MongoDB复制是将数据同步在多个服务器的过程。
复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
复制还允许您从硬件故障和服务中断中恢复数据。
mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
mongodb各个节点常见的搭配方式为:一主一从、一主多从。
我们采用 一主一从一仲裁者模式。
主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
MongoDB复制结构图如下所示:
准备三台服务器(linux docker环境)
地址 | 角色 |
---|---|
192.168.1.1 | Primary |
192.168.1.2 | Secondary |
192.168.1.3 | Arbiter |
分别创建MongoDB
docker run --name mongodb_test -p 27017:27017 -v /mountdir/mongodb_test/configdb:/data/configdb/ -v /mountdir/mongodb_test/db/:/data/db/ -d mongo:4.4 --replSet "rs0"
进入MongoDB所在容器
docker exec -it mongodb_test /bin/bash
进入mongodb shell
mongo
初始化副本集
var config={_id:"rs0",members:[{_id:0,host:"192.168.1.1:27017"},{_id:1,host:"192.168.1.2:27017"}, {_id:2,host:"192.168.1.3:27017",arbiterOnly:true}]}; rs.initiate(config);
可能用到的命令
##查看副本集状态 rs.status(); ##向副本集添加成员 rs.add("host:port"); ##移除副本集成员 rs.remove("host:port");
更多副本集相关操作,请参考官方文档
注意事项:
初始化副本集前,请确保,mongodb版本是一致的,并且彼此间网络互通。
连接串直接配置Primary和Secondary格式如下:
mongodb://[host1]:[prot1],[host2]:[prot2] mongodb://192.168.1.1:27017,192.168.1.2:27017