标签:free name kill 添加节点 status move shutdown host exit
简介MongoDB复制是将数据同步在多个服务器的过程。
复制集提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
复制集还允许从硬件故障和服务中断中恢复数据。
mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
mongodb各个节点常见的搭配方式为:一主一从、一主多从。
MongoDB复制结构图如下所示:
以上结构图中,客户端从主节点读取数据,在客户端写入数据到主节点时, 主节点与从节点进行数据交互保障数据的一致性。
副本集特征:
[root@localhost ~]# mkdir -p /data/mongodb/mongodb{2,3,4} //创建数据目录
[root@localhost ~]# mkdir -p /data/logs/mongodb
[root@localhost ~]# touch /data/logs/mongodb/mongodb{2,3,4}.log //创建日志文件
[root@localhost ~]# chmod -R 777 /data/logs/mongodb/*.log //赋予权限
先编辑Mongodb实例1的配置文件,配置replication选项,并复制3份。
vim /etc/mongod.conf
replication:
replSetName: kgcrs //配置replSetName参数为kgcrs
重新启动Mongodb实例1
[root@localhost ~]# mongod -f /etc/mongod.conf --shutdown
killing process with pid: 1074
[root@localhost ~]# mongod -f /etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 17130
child process started successfully, parent exiting
复制3份,并修改配置文件中的port参数配置,dbpath参数配置,logpath参数配置。
cp -p /etc/mongod.conf /etc/mongod2.conf
cp -p /etc/mongod.conf /etc/mongod3.conf
cp -p /etc/mongod.conf /etc/mongod4.conf
修改mongod2.conf 的配置文件参数。
vim /etc/mongod2.conf
path: /data/logs/mongodb/mongodb2.log //日志文件存储路径
dbPath: /data/mongodb/mongodb2 //数据文件路径
port: 27018 //监听端口
修改mongod3.conf 的配置文件参数。
vim /etc/mongod3.conf
path: /data/logs/mongodb/mongodb3.log //日志文件存储路径
dbPath: /data/mongodb/mongodb3 //数据文件路径
port: 27019 //监听端口
修改mongod4.conf 的配置文件参数。
vim /etc/mongod4.conf
path: /data/logs/mongodb/mongodb4.log //日志文件存储路径
dbPath: /data/mongodb/mongodb4 //数据文件路径
port: 27020 //监听端口
mongod -f /etc/mongod2.conf
mongod -f /etc/mongod3.conf
mongod -f /etc/mongod4.conf
可以看到四个实例全部启动。
[root@localhost ~]# mongo //进入MongoDB27017实例
MongoDB shell version v3.6.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.6
初始化配置时保证从节点没有数据,不然数据会丢失。
> cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.113.176:27017"},{"_id":1,"host":"192.168.113.176:27018"},{"_id":2,"host":"192.168.113.176:27019"}]}
> rs.initiate(cfg)
启动复制集后,再次通过rs.status()命令查看复制集的完整状态信息。
其中,health为1代表健康,0代表宕机。state为1代表主节点,为2代表从节点。
配置启动复制集后,可以通过rs.add()和rs.remove()命令方便的添加或删除节点。
#添加节点
kgcrs:PRIMARY> rs.add("192.168.113.176:27020")
kgcrs:PRIMARY> rs.status() //查看节点是否添加成功
#删除节点
kgcrs:PRIMARY> rs.remove("192.168.113.176:27020")
kgcrs:PRIMARY> rs.status()
可以看到27020的节点没有了。
MongoDB复制集可以实现群集的高可用,当其中的主节点出现故障时会自动切换到其他节点。管理员也可以手动进行复制集的主从切换。
通过kill命令可以停止复制集的当前主节点,然后查看主节点会自动切换到其他节点上。
[root@localhost ~]# ps aux | grep mongod
root 17130 1.0 6.2 1582772 62064 ? Sl 09:33 1:06 mongod -f /etc/mongod.conf
root 17830 0.8 5.7 1462576 57628 ? Sl 09:58 0:45 mongod -f /etc/mongod2.conf
root 17880 0.8 5.8 1522504 58324 ? Sl 09:58 0:45 mongod -f /etc/mongod3.conf
root 17927 0.7 5.3 1441856 53356 ? Sl 09:58 0:37 mongod -f /etc/mongod4.conf
root 20678 0.0 0.0 112676 984 pts/1 S+ 11:23 0:00 grep --color=auto mongod
[root@localhost ~]# kill -9 17130
[root@localhost ~]# mongo -port 27018
kgcrs:SECONDARY> rs.status()
[root@localhost ~]# mongo -port 27019
kgcrs:PRIMARY> rs.freeze(30) //暂停30s不参与选举
kgcrs:PRIMARY> rs.stepDown(60,30) //交出主节点位置,维持从节点状态不少于60秒,等待30秒使主节点和从节点日志同步
kgcrs:SECONDARY> rs.status()
标签:free name kill 添加节点 status move shutdown host exit
原文地址:http://blog.51cto.com/11134648/2146034