linux下Mongodb集群搭建:分片+副本集
三台服务器 192.168.1.40/41/42
安装包 mongodb-linux-x86_64-amazon2-4.0.1.tgz
| 服务器40 | 服务器41 | 服务器42 |
| mongos | mongos | mongos |
| config server | config server | config server |
| shard server1 主节点 | shard server1副节点 | shard server1仲裁 |
| shard server2 仲裁 | shard server2 主节点 | shard server2 副节点 |
| shard server3副节点 | shard server3仲裁 | shard server3主节点 |
端口分配:
mongos:28000
config:28001
shard1:28011
shard2:28012
shard3:28013
主要模块以及配置文件
1、config server 配置服务器
vi /usr/local/mongodb/conf/config.conf
40服务器配置文件
pidfilepath = /usr/local/mongodb/config/log/configsrv.pid
dbpath = /mydata/mongodb/config/data
logpath = /usr/local/mongodb/config/log/congigsrv.log
logappend = true bind_ip = 192.168.29.40
port =
fork = true #以守护进程的方式运行MongoDB,创建服务器进程 #declare this is a config db of a cluster;
configsvr = true #副本集名称
replSet=configs #设置最大连接数
maxConns=20000
41服务器配置文件
pidfilepath = /usr/local/mongodb/config/log/configsrv.pid
dbpath = /mydata/mongodb/config/data
logpath = /usr/local/mongodb/config/log/congigsrv.log
logappend = true bind_ip = 192.168.29.41
port =
fork = true #以守护进程的方式运行MongoDB,创建服务器进程 #declare this is a config db of a cluster;
configsvr = true #副本集名称
replSet=configs #设置最大连接数
maxConns=
42服务器配置文件
pidfilepath = /usr/local/mongodb/config/log/configsrv.pid
dbpath = /mydata/mongodb/config/data
logpath = /usr/local/mongodb/config/log/congigsrv.log
logappend = true bind_ip = 192.168.29.42
port =
fork = true #以守护进程的方式运行MongoDB,创建服务器进程 #declare this is a config db of a cluster;
configsvr = true #副本集名称
replSet=configs #设置最大连接数
maxConns=
启动三台服务器的config server
mongod -f /usr/local/mongodb/conf/config.conf 登录任意一台配置服务器,初始化配置副本集
#连接
mongo --port
#config变量
config = {
... _id : "configs",
... members : [
... {_id : , host : "192.168.1.40:28001" },
... {_id : , host : "192.168.1.41:28001" },
... {_id : , host : "192.168.1.42:28001" }
... ]
... } #初始化副本集
rs.initiate(config)
2 配置分片副本集(三台机器)
配置文件
vi /usr/local/mongodb/conf/shard1.conf
#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid
dbpath = /mydata/mongodb/shard1/data
logpath = /usr/local/mongodb/shard1/log/shard1.log
logappend = true bind_ip = 192.168.29.40
port =
fork = true #打开web监控
#httpinterface=true
#rest=true #副本集名称
replSet=shard1 #declare this is a shard db of a cluster;
shardsvr = true #设置最大连接数
maxConns=
#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid
dbpath = /mydata/mongodb/shard1/data
logpath = /usr/local/mongodb/shard1/log/shard1.log
logappend = true bind_ip = 192.168.29.41
port =
fork = true #打开web监控
#httpinterface=true
#rest=true #副本集名称
replSet=shard1 #declare this is a shard db of a cluster;
shardsvr = true #设置最大连接数
maxConns=20000
#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid
dbpath = /mydata/mongodb/shard1/data
logpath = /usr/local/mongodb/shard1/log/shard1.log
logappend = true bind_ip = 192.168.29.42
port = 28011
fork = true #打开web监控
#httpinterface=true
#rest=true #副本集名称
replSet=shard1 #declare this is a shard db of a cluster;
shardsvr = true #设置最大连接数
maxConns=20000
vi /usr/local/mongodb/conf/shard2.conf
vi /usr/local/mongodb/conf/shard2.conf (shard2和shard3就是上面配置文件相应地方改为2和3就可以了)
3、配置路由服务器 mongos
先启动配置服务器和分片服务器,后启动路由实例:(三台机器)
vi /usr/local/mongodb/conf/mongos.conf
#内容
pidfilepath = /usr/local/mongodb/mongos/log/mongos.pid
logpath = /usr/local/mongodb/mongos/log/mongos.log
logappend = true bind_ip = 0.0.0.0
port =
fork = true #监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
configdb = configs/192.168.1.40:,192.168.1.41:,192.168.1.42: #设置最大连接数
maxConns=
启动三台服务器的mongos server
mongos -f /usr/local/mongodb/conf/mongos.conf
4、启用分片
目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。
登陆任意一台mongos
mongo --port 28000
#使用admin数据库
use admin
#串联路由服务器与分配副本集
sh.addShard("shard1/192.168.1.40:28011,192.168.1.41:28011,192.168.1.42:28011")
sh.addShard("shard2/192.168.1.40:28012,192.168.1.41:28012,192.168.1.42:28012")
sh.addShard("shard3/192.168.1.40:28013,192.168.1.41:28013,192.168.1.42:28013")
#查看集群状态
sh.status()
5、测试
目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos上,准备让指定的数据库、指定的集合分片生效。
#指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});
#指定数据库里需要分片的集合和片键
db.runCommand( { shardcollection : "testdb.table1",key : {id: } } ) 我们设置testdb的 table1 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!
测试分片配置结果
mongo 127.0.0.1:
#使用testdb
use testdb;
#插入测试数据
for (var i = ; i <= ; i++)
db.table1.save({id:i,"test1":"testval1"});
#查看分片情况如下,部分无关信息省掉了
db.table1.stats(); {
"sharded" : true,
"ns" : "testdb.table1",
"count" : ,
"numExtents" : ,
"size" : ,
"storageSize" : ,
"totalIndexSize" : ,
"indexSizes" : {
"_id_" : ,
"id_1" :
},
"avgObjSize" : ,
"nindexes" : ,
"nchunks" : ,
"shards" : {
"shard1" : {
"ns" : "testdb.table1",
"count" : ,
"size" : ,
...
"ok" :
},
"shard2" : {
"ns" : "testdb.table1",
"count" : ,
"size" : ,
...
"ok" :
},
"shard3" : {
"ns" : "testdb.table1",
"count" :,
"size" : ,
...
"ok" :
}
},
"ok" :
}
6、后期运维
启动关闭
mongodb的启动顺序是,先启动配置服务器,在启动分片,最后启动mongos.
mongod -f /usr/local/mongodb/conf/config.conf
mongod -f /usr/local/mongodb/conf/shard1.conf
mongod -f /usr/local/mongodb/conf/shard2.conf
mongod -f /usr/local/mongodb/conf/shard3.conf
mongod -f /usr/local/mongodb/conf/mongos.conf
关闭时,直接killall杀掉所有进程
killall mongod
killall mongos
linux下Mongodb集群搭建:分片+副本集的更多相关文章
- mongodb3.6集群搭建:分片+副本集
mongodb是最常用的noSql数据库,在数据库排名中已经上升到了前五.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...
- mongodb 搭建集群(分片+副本集)
mongodb 搭建集群(分片+副本集) 一.搭建结构图: 二.搭建步骤:
- MongoDB 3.6.9 集群搭建 - 切片+副本集
1. 环境准备 在Mongo的官网下载Linux版本安装包,然后解压到对应的目录下:由于资源有限,我们采用Replica Sets + Sharding方式来配置高可用.结构图如下所示: 这里我说明下 ...
- MongoDB集群搭建之副本集模仿主从模式的行为
#模拟主节点异常中断 [root@ba3b27d855f6 bin]# kill -9 199 [root@ba3b27d855f6 bin]# #连接到其中一台备份节点 [root@ba3b27 ...
- MongoDB集群搭建-分片
MongoDB集群搭建-分片 一.场景: 1,机器的磁盘不够用了.使用分片解决磁盘空间的问题. 2,单个mongod已经不能满足写数据的性能要求.通过分片让写压力分散到各个分片上面,使用分片服务器自身 ...
- MongoDB在单机上搭建分片副本集群(windows)
------------------------------1.安装MongoDB...... ------------------------------2.准备好文件夹 --config:配置文件 ...
- mongodb 3.4 集群搭建升级版 五台集群
最新版mongodb推荐使用yaml语法来做配置,另外一些旧的配置在最新版本中已经不在生效,所以我们在生产实际搭建mongodb集群的时候做了一些改进.如果大家不熟悉什么是分片.副本集.仲裁者的话请先 ...
- 分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署
最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式 ...
- Kubernetes集群搭建之Etcd集群配置篇
介绍 etcd 是一个分布式一致性k-v存储系统,可用于服务注册发现与共享配置,具有以下优点. 简单 : 相比于晦涩难懂的paxos算法,etcd基于相对简单且易实现的raft算法实现一致性,并通过g ...
- 基于Dokcer搭建Redis集群搭建(主从集群)
最近陆陆续续有不少园友加我好友咨询 redis 集群搭建的问题,我觉得之前写的这篇 <基于Docker的Redis集群搭建> 文章一定是有问题了,所以我花了几分钟浏览之前的文章总结了下面几 ...
随机推荐
- 【Dairy】2016.10.17-1 OIer最悲剧的事情
OIer最悲剧的事情: 看完题,觉得很可做 然后开始码,码了很久 一测样例,不过.. 开始肉眼查错..手玩样例.. 过了很久 ...
- 洛谷 P3960 [ NOIP 2017 ] 列队 —— 线段树
题目:https://www.luogu.org/problemnew/show/P3960 NOIP 题,不用很复杂的数据结构...但又参考了许多: 要求支持维护删除第 k 个和在末尾插入的数据结构 ...
- [Shell学习笔记] read命令从键盘或文件中获取标准输入(转载)
转自:http://www.1987.name/151.html read命令是用于从终端或者文件中读取输入的内部命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后面,如果没有 ...
- Git简介(转载)
转自:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137396284551 ...
- bzoj 1827: [Usaco2010 Mar]gather 奶牛大集会【树形dp】
不能用read会TLE!!不能用read会TLE!!不能用read会TLE!! 一开始以为要维护每个点,线段树写了好长(还T了-- 首先dfs一遍,求出点1为集会地点的答案,处理处val[u]为以1为 ...
- 小记 vue 打包(build)需要注意的一些事
记录 vue 项目打包的一些事情 首先声明项目都是由 vue-cli 生成; vue 项目从 dev 切换到 prod 时有很多地方需要注意; 首先是大家最需要注意的 ajax 切换环节 以前一开始用 ...
- redis的持久化的原理介绍和实现
redis提供了持久化功能——RDB和AOF.通俗的讲就是将内存中的数据写入硬盘中. RDB一定时间取存储文件,AOF默认每秒去存储历史命令,官方建议两种方式同时使用 一.RDB(Redis Data ...
- java Class.getResource和ClassLoader.getResource
http://www.cnblogs.com/wang-meng/p/5574071.html http://blog.csdn.net/earbao/article/details/50009241 ...
- [C陷阱和缺陷] 第1章 词法“陷阱”
有感自己的C语言在有些地方存在误区,所以重新仔细把"C陷阱和缺陷"翻出来看看,并写下这篇博客,用于读书总结以及日后方便自身复习. 第1章 词法"陷阱" 1.1 ...
- linux学习之路1 Linux系统安装
VMware workstation虚拟器 网上下载VMware workstation,然后安装任一系统的linux系统,不过选的系统一定要跟你下载好的linux镜像保持一致,博主装的是Red Ha ...