搭建MongoDB集群的一个小妙招,教你快速搭建MonggoDB集群。
一.首先确认你的集群信息
三台机器的配置服务(27018)形成复制集,分片1、2、3也在各机器都部署一个实例,它们之间形成复制集,客户端直接连接3个路由服务与之交互,配置服务和分片服务对客户端是透明的。
明确下列信息:
例如:
服务器的安装及配置:
1、下载解压MongoDB(三台服务器执行相同操作)
下载路径:/linux
建议下载版本:mongodb-linux-x86_64-4.0.6.tgz;
解压步骤:1.打开 xshell 连接虚拟机主机,
2.将压缩包放置/home路径下进行解压
3.改名:将解压文件夹名称改为mongodb;
设置环境变量:echo ‘export PATH=.:/home/mongodb/bin:$PATH’ >> /etc/profile
进行保存;
通过source /etc/profile进行刷新处理;
2、创建路由、配置、分片等的相关目录与文件配置服务器部署(3台服务器执行相同操作)
启动配置文件存放的文件夹:mkdir -p /home/mongodb/conf 配置服务数据存放目录:mkdir -p /home/mongodb/data/config 分片1服务数据存放目录:mkdir -p /home/mongodb/data/shard1 分片2服务数据存放目录:mkdir -p /home/mongodb/data/shard2 分片3服务数据存放目录:mkdir -p /home/mongodb/data/shard3创建log目录: mkdir -p /home/mongodb/log 配置服务日志存放文件:touch /home/mongodb/log/config.log 路由服务日志存放文件:touch /home/mongodb/log/mongos.log 分片1服务日志存放文件:touch /home/mongodb/log/shard1.log 分片2服务日志存放文件:touch /home/mongodb/log/shard2.log 分片3服务日志存放文件:touch /home/mongodb/log/shard3.log
3.配置服务器的部署(3台机器执行操作)
在/home/mongodb/conf目录创建config.conf
将下面的配置文件放置config.conf文件中
dbpath=/home/mongodb/data/configlogpath=/home/mongodb/log/config.log port=27018 logappend=true fork=true maxConns=5000 #复制集名称 replSet=configs #置参数为true configsvr=true #允许任意机器连接 bind_ip=0.0.0.0
配置复制集—》》分别启动三台服务器的配置服务:
mongod -f /home/mongodb/conf/config.conf
连接mongo,只需在任意一台机器执行即可:
mongo --host bd1 --port 27018
切换数据库:
use admin
初始化复制集:
rs.initiate({_id:“configs”,members:[{_id:0,host:“bd1:27018"},{_id:1,host:“bd2:27018”}, {_id:2,host:“bd3:27018”}]})
其中_id:"configs"的configs是上面config.conf配置文件里的复制集名称,把三台服务器的配置服务组成复制集。
查看状态:
rs.status()
等几十秒左右,执行上面的命令查看状态,三台机器的配置服务就已形成复制集,其中1台为PRIMARY,其他2台为SECONDARY。
4.分片服务部署(3台服务器执行相同操作)
在/home/mongodb/conf目录创建shard1.conf文件;
文件内容如下:
dbpath=/home/mongodb/data/shard1 logpath=/home/mongodb/log/shard1.log port=27001 logappend=truefork=truemaxConns=5000storageEngine=mmapv1shardsvr=truereplSet=shard1 bind_ip=0.0.0.0
在/home/mongodb/conf目录创建shard2.conf文件;
文件内容如下:
dbpath=/home/mongodb/data/shard2 logpath=/home/mongodb/log/shard2.log port=27002 logappend=truefork=truemaxConns=5000storageEngine=mmapv1shardsvr=truereplSet=shard2bind_ip=0.0.0.0
在/home/mongodb/conf目录创建shard3.conf文件;
dbpath=/home/mongodb/data/shard3 logpath=/home/mongodb/log/shard3.log port=27003 logappend=truefork=truemaxConns=5000storageEngine=mmapv1shardsvr=truereplSet=shard3bind_ip=0.0.0.0
5.配置分片集:
a.在3台机器的相同端口形成一个分片的复制集,由于3台机器都需要这3个文件,所以根据这9个配置文件分别启动分片服务:
分别在每一个机器中启动下列三条命令:
mongod -f /home/mongodb/conf/shard1.conf
mongod -f /home/mongodb/conf/shard2.conf
mongod -f /home/mongodb/conf/shard3.conf
b.将分片配置为复制集
连接mongo,只需在任意一台机器执行即可: mongo --host bd0201 --port 27001
*(这里以shard1为例,其他两个分片则再需对应连接到27002、27003的端口进行操作即可 ) 切换数据库: use admin 初始化复制集: rs.initiate({_id:“shard1”,members:[{_id:0,host:" bd1
:27001"},{_id:1,host:" bd2:27001"},{_id:2,host:" bd3:27001"}]})
以上是基于分片1来操作,同理,其他2个分片也要连到各自的端口来执行一遍上述的操作,让3个分片各自形成1主2从的复制集,注意端口及仲裁节点的问题即可,操作完成后3个分片都启动完成,并完成复制集模式。
选择一台机器将命令输入
mongo --host bd1 --port 27001use admin rs.initiate({_id:"shard1",members:[{_id:0,host:"bd1:27001"},{_id:1,host:"bd2:27001"},{_id:2,host:"bd3:27001"}]})exit
退出
继续输入:
mongo --host bd1 --port 27002use admin rs.initiate({_id:"shard2",members:[{_id:0,host:"bd1:27002"},{_id:1,host:"bd2:27002"},{_id:2,host:"bd3:27002"}]})exit
退出
继续输入:
mongo --host bd1 --port 27003use admin rs.initiate({_id:"shard3",members:[{_id:0,host:"bd1:27003"},{_id:1,host:"bd2:27003"},{_id:2,host:"bd:27003"}]})
c.路由服务部署(3台服务器执行相同操作)
在/home/mongodb/conf目录创建mongos.conf,内容如下:
logpath=/home/mongodb/log/mongos.log logappend = true port = 27017 fork = true configdb = configs/bd1:27018,bd2:27018, bd3:27018 maxConns=20000 bind_ip=0.0.0.0
启动mongos
分别在三台服务器同时启动:
mongos -f /home/mongodb/conf/mongos.conf
启动分片功能
连接mongo:
mongo --host bd1 --port 27017
切换数据库:
use admin
添加分片,只需在一台机器执行即可:
sh.addShard("shard1/bd1:27001, bd2:27001, bd3:27001") sh.addShard("shard2/bd1:27002, bd2:27002, bd3:27002 ") sh.addShard("shard3/bd1:27003, bd2:27003, bd3:27003 ")
查看集群状态:
sh.status()
显示内容如下,那么恭喜你,已经成功晋级为搭建MongoDB小能手!
--- Sharding Status --- sharding version: {"_id" : 1,"minCompatibleVersion" : 5,"currentVersion" : 6,"clusterId" : ObjectId("5f51ba7ee7235v9a708e45")}shards:{ "_id" : "shard1", "host" : "shard1/bd1:27001,bd2:27001,bd3:27001", "state" : 1 }{ "_id" : "shard2", "host" : "shard2/bd1:27002,bd2:27002,bd3:27002", "state" : 1 }{ "_id" : "shard3", "host" : "shard3/bd1:27003,bd2:27003,bd3:27003", "state" : 1 }active mongoses:"4.0.6" : 3autosplit:Currently enabled: yesbalancer:Currently enabled: yesCurrently running: noFailed balancer rounds in last 5 attempts: 0Migration Results for the last 24 hours: No recent migrationsdatabases:{ "_id" : "config", "primary" : "config", "partitioned" : true }config.system.sessionsshard key: { "_id" : 1 }unique: falsebalancing: truechunks:shard1 1{ "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shard1 Timestamp(1, 0)