搭建MongoDB集群的一个小妙招,教你快速搭建MonggoDB集群。
一.首先确认你的集群信息
三台机器的配置服务(27018)形成复制集,分片1、2、3也在各机器都部署一个实例,它们之间形成复制集,客户端直接连接3个路由服务与之交互,配置服务和分片服务对客户端是透明的。
明确下列信息:
例如:
服务器的安装及配置:
1、下载解压MongoDB(三台服务器执行相同操作)
下载路径:https://fastdl.mongodb.org/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/config
logpath=/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=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
replSet=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=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
replSet=shard2
bind_ip=0.0.0.0
在/home/mongodb/conf目录创建shard3.conf文件;
dbpath=/home/mongodb/data/shard3
logpath=/home/mongodb/log/shard3.log
port=27003
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
replSet=shard3
bind_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 27001
use 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 27002
use 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 27003
use 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" : 3
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "config", "primary" : "config", "partitioned" : true }
config.system.sessions
shard key: { "_id" : 1 }
unique: false
balancing: true
chunks:
shard1 1
{ "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shard1 Timestamp(1, 0)