简介:
复制集采用一主一从,一主多从方式(生产中为一主多从),每当主服务挂掉(掉线)从服务器将会采用选举的方式重新选举一个主顶上来(主:primary,从:secend)
主从切换采用的方式有两种:
手动切换:主动放弃primary;
自动切换:关闭MingoDB服务;
具体操作:在装完MongoDB的系统中操作(具体装MongoDB方法请看我前两篇博客介绍)
本实验有4个实例 开启3个 1个主3个从

主从切换
1:27017
2:27018
3:27019
4:27020
实验步骤:
[root@localhost ~]# mkdir -p /data/mongodb/mongodb{2,3,4}
[root@localhost ~]# mkdir -p /data/mongodb/logs
[root@localhost ~]# touch /data/mongodb/logs/mongodb{2,3,4}.log
[root@localhost ~]# chmod 777 /data/mongodb/logs/*.log
编辑配置文件
[root@localhost logs]# vim /etc/mongod.conf
开启replication,名字自定义
replication:
replSetName: kgcrs
[root@localhost yum.repos.d]# mongod -f /etc/mongod.conf --shutdown #关闭服务
[root@localhost yum.repos.d]# mongod -f /etc/mongod.conf #开启服务

复制产生四个实例
[root@localhost yum.repos.d]# cp -p /etc/mongod.conf /etc/mongod2.conf
[root@localhost yum.repos.d]# cp -p /etc/mongod.conf /etc/mongod3.conf
[root@localhost yum.repos.d]# cp -p /etc/mongod.conf /etc/mongod4.conf
[root@localhost yum.repos.d]# vim /etc/mongod2.conf
#修改三处
path: /data/mongodb/logs/mongodb2.log
dbPath: /data/mongodb/mongodb2
port: 27018
#将其他几个都修改
[root@localhost yum.repos.d]# cp -p /etc/mongod2.conf /etc/mongod3.conf
[root@localhost yum.repos.d]# vim /etc/mongod3.conf
(还是那三条,序号改好即可)
[root@localhost yum.repos.d]# cp -p /etc/mongod2.conf /etc/mongod4.conf
[root@localhost yum.repos.d]# vim /etc/mongod4.conf
#修改完成后依次启动
[root@localhost yum.repos.d]# mongod -f /etc/mongod2.conf
[root@localhost yum.repos.d]# mongod -f /etc/mongod3.conf
[root@localhost yum.repos.d]# mongod -f /etc/mongod4.conf
#查看端口开启
[root@localhost yum.repos.d]# netstat -ntap
#登录MongoDB
[root@localhost yum.repos.d]# mongo --port 27018
[root@localhost yum.repos.d]# mongo --port 27019
[root@localhost yum.repos.d]# mongo --port 27020
#将其他几台加入集
[root@localhost yum.repos.d]# mongo

cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.120.129:27017"},{"_id":1,"host":"192.168.120.129:27018"},{"_id":2,"host":"192.168.120.129:27019"}]}
db.stats()
rs.initiate(cfg) #启动
kgcrs:SECONDARY> rs.status() #查看状态
#添加节点
kgcrs:PRIMARY> rs.add("192.168.120.129:27020")
#删除节点(不想要某个,可以删除)
kgcrs:PRIMARY> rs.remove("192.168.120.129:27020")
故障转移:
[root@localhost ~]# ps aux | grep mongod
root 6036 0.7 3.6 1591944 74292 ? Sl 09:11 0:36 mongod -f /etc/mongod.conf
root 6276 0.6 3.2 1501836 66448 ? Sl 09:26 0:24 mongod -f /etc/mongod2.conf
root 6304 0.6 3.1 1581136 63152 ? Sl 09:27 0:23 mongod -f /etc/mongod3.conf
root 6356 0.5 2.9 1460340 59644 ? Sl 09:27 0:19 mongod -f /etc/mongod4.conf
root 41580 0.0 0.0 112676 984 pts/2 R+ 10:29 0:00 grep --color=auto mongod
#制造故障,干掉PRIMARY
方法一:自动切换
[root@localhost ~]# kill -9 6304
#进入其他mongo查看主(在从服务器上是无权操作的,只能去主看)
方法二:手动切换
#暂停30秒不参与选举
kgcrs:PRIMARY> rs.freeze(30)
#交出主节点位置,维持从节点状态不少于60秒,等待30秒使主节点和从节点日志同步
kgcrs:PRIMARY> rs.stepDown(60,30)

总结:MongoDB初步复制集先讲到这里,后面再继续介绍。