基于docker的MongoDB复制(副本集)

MongoDB复制(副本集)

MongoDB复制是将数据同步在多个服务器的过程。

复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。

复制还允许您从硬件故障和服务中断中恢复数据。

什么是复制?

  • 保障数据的安全性
  • 数据高可用性 (24*7)
  • 灾难恢复
  • 无需停机维护(如备份,重建索引,压缩)
  • 分布式读取数据

MongoDB复制原理

mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。

mongodb各个节点常见的搭配方式为:一主一从、一主多从。

我们采用 一主一从一仲裁者模式。

主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

MongoDB复制结构图如下所示:

img

24105

MongoDB副本集设置

  1. 准备三台服务器(linux docker环境)

    地址 角色
    192.168.1.1 Primary
    192.168.1.2 Secondary
    192.168.1.3 Arbiter
  2. 分别创建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"
    
  3. 进入MongoDB所在容器

    docker exec -it mongodb_test /bin/bash
    
  4. 进入mongodb shell

    mongo
    
  5. 初始化副本集

    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);
    
  6. 可能用到的命令

    ##查看副本集状态
    rs.status();
    ##向副本集添加成员
    rs.add("host:port");
    ##移除副本集成员
    rs.remove("host:port");
    

    更多副本集相关操作,请参考官方文档

  7. 注意事项:

    初始化副本集前,请确保,mongodb版本是一致的,并且彼此间网络互通。

C#使用副本集

连接串直接配置Primary和Secondary格式如下:

mongodb://[host1]:[prot1],[host2]:[prot2]
mongodb://192.168.1.1:27017,192.168.1.2:27017
posted @ 2021-04-27 13:59  Yu2  阅读(149)  评论(0编辑  收藏  举报