Nosql Mongodb之旅(22)—MongoDB Replica Sets

前端之家收集整理的这篇文章主要介绍了Nosql Mongodb之旅(22)—MongoDB Replica Sets前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
      1. MongoDB支持在多个机器中通过异步复制达到故障转移和实现冗余。多机器中同一时刻只有一台机器是用于写操作,正因为如此,MongoDB提供了数据一致性的保障。而担当primary角色的机器,可以把读的操作分发给slave

      1. MongoDB高可用分两种:

      1. Master-Slave 主从复制:

      1. 只需要在某一个服务启动时加上master 参数,而另一个服务加上slave 与–source 参数,即可实现同步。MongoDB 的最新版本已不再推荐此方案。

      1. Replica Sets 复制集:

      1. MonoDB1.6版本上开发了新功能Replica Sets,这比之前的replication功能要强大一些,增加了故障自动切换和自动修复成员节点,各个DB之间数据完全一致,大大降低了维护成本。auto shard 已经明确说明不支持replication paris,建议使用replica set

      1. Replica Sets的结构非常类似一个集群。是的,你完全可以把它当作一个集群,因为它实现的功能和集群是一样的,其中一个节点如果出现故障,其它节点马上会将业务接过来,而无需停机操作。

      1. 节点的类型:

      1. standard:常规节点,它存储一份完整的数据副本,参与选举投票,有可能成为primary节点。

      1. passive:存储了完整的数据副本,参与投票,不能成为primary节点。

      1. arbiter:仲裁节点,只参与投票,不接收复制的数据,也不能成为primary节点。

      1. 一个repica sets节点数量最好为奇数(odd)。

      1. 配置实例(三节点)

      1. 实验是三个节点:

      1. 两个standard节点(这两个节点直接可以互切primary secondary)。

      1. 一个arbiter节点,它手中握着一张选票,决定上面两个standard节点中的哪一个可以成为primay

      1. 图例:

      1. 配置步骤:

      1. 1、启动三个节点

      1. 启动第一个standard节点(ip:192.168.0.11)

        1. /mongodb/bin/mongod--dbpath=/mongodb/mongodb_date--logpath=/mongodb/mongodb_log/mongod.log--port27017--replSettest/192.168.0.12:27017--maxConns=2000--fork--logappend
      1. 启动第二个standard节点 (ip:192.168.0.12)
        1. /mongodb/bin/mongod--dbpath=/mongodb/mongodb_date--logpath=/mongodb/mongodb_log/mongod.log--port27017--replSettest/192.168.0.11:27017--maxConns=2000--fork--logappend
      1. 启动arbiter节点,也就是仲裁节点 (ip:192.168.0.13)。注意!--replSet test/后面写的是两个standard节点的ip和端口
        1. /mongodb/bin/mongod--dbpath=/mongodb/mongodb_date--logpath=/mongodb/mongodb_log/mongod.log--port27017--replSettest/192.168.0.11:27017,192.168.0.12:27017--fork--logappend
      1. 参数说明:
      1. --dbpath 数据文件路径

      1. --logpath 日志文件路径

      1. --port 端口号,默认是27017.我这里使用的也是这个端口号.

      1. --replSet 复制集的名字,一个replica sets中的每个节点的这个参数都要用一个复制集名字,这里是test.

      1. --replSet test/ 这个后面跟的是其他standard节点的ip和端口

      1. --maxConns 最大连接数

      1. --fork后台运行

      1. --logappend 日志文件循环使用,如果日志文件已满,那么新日志覆盖最久日志。

      1. 2、很关键的一步,配置完上面,下面开始初始化各个节点。在第二个启动的节点上,运行mongo

        1. db.runCommand({"replSetInitiate":{
        1. "_id":"test",
        1. "members":[
        1. {
        1. "_id":0,
        1. "host":"192.168.0.11:27017"
        1. },
        1. {
        1. "_id":1,
        1. "host":"192.168.0.12:27017"
        1. }
        1. ]}})
      1. 3、加入arbiter节点
        1. PRIMARY>rs.addArb("192.16.0.13:27017");
      1. 注意!!!
      1. 添加新节点前,一定要配置好防火墙,开放对应的IPPORT.

      1. 添加普通数据节点:

        1. PRIMARY>rs.add("ip:port")
      1. 删除节点
        1. PRIMARY>rs.remove("ip:port")
      1. 显示当前谁是primary
        1. PRIMARY>rs.isMaster()
      1. 将一个普通数据节点修改passive节点
      1. 除了仲裁节点,其他每个节点都有个优先权,我们可以通过设置优先权来决定谁的成为primay的权重最大。MongoDB replica sets中通过设置priority的值来决定优先权的大小,这个值的范围是0--100,值越大,优先权越高。如果值是0,那么不能成为primay

      1. 1、通过rs.conf()命令查看出节点列表

        1. PRIMARY>rs.conf()
        1. {
        1. "_id":"test",
        1. "version":22,
        1. "members":[
        1. {
        1. "_id":3,
        1. "host":"192.168.22.36:27017"
        1. },
        1. {
        1. "_id":5,
        1. "host":"192.168.22.10:27017"
        1. },
        1. {
        1. "_id":6,
        1. "host":"192.168.22.12:27017",
        1. "priority":0,
        1. "arbiterOnly":true
        1. },
        1. {
        1. "_id":7,
        1. "host":"192.168.22.115:27017"
        1. }
        1. ]
        1. }
      1. 2、将上面红色的192.168.22.10节点的priority修改0,让它只接收数据,不参与成为primary的竞争。
      1. 命令格式如下:

        1. cfg=rs.conf()
        1. cfg.members[0].priority=0.5
        1. cfg.members[1].priority=2
        1. cfg.members[2].priority=2
        1. rs.reconfig(cfg)
      1. 红色中括号中的数字是执行rs.conf()得出的节点顺序,第一个节点在这里写0,第二个节点写1,依次类推。
      1. 执行命令

        1. cfg=rs.conf()
        1. cfg.members[1].priority=0
        1. rs.reconfig(cfg)
      1. 3.查看结果,192.168.22.10的优先权变为0.
        1. PRIMARY>rs.conf()
        1. {
        1. "_id":"test",
        1. "host":"192.168.22.10:27017"
        1. "priority":0
        1. },
        1. "host":"192.168.22.115:27017"
        1. }
        1. ]
        1. }

    猜你在找的NoSQL相关文章