MongoDB 特性:副本集

一、Mongodb的主从模式种类:

     1.master/slave模式(这种结构无法实现自动 failover,MongoDB 官方已经不建议使用主从模式)
     2.Replicat sets模式
二、Mongodb Replicat sets模式 简介:
     MongoDB官方已经不建议使用主从模式了,替代方案是采用副本集的模式。
     主从模式其实就是一个单副本的应用,没有很好的扩展性和容错性。而副本集具有多个副本保证了容错性,就算一个副本挂掉了还有很多副本存在,并且解决了上面第一个问题“主节点挂掉了,整个集群内会自动切换”。
     其架构图如下:
1=故障后=>
2     由图可以看到,客户端连接到整个副本集,不关心具体哪一台机器是否挂掉。
     主服务器负责整个副本集的读写,副本集定期同步数据备份,一但主节点挂掉,副本节点就会选举一个新的主服务器,这一切对于应用服务器不需要关心。
     副本集中的副本节点,在主节点挂掉后,通过心跳机制检测到后,就会在集群内发起主节点的选举机制,自动选举一位新的主服务器。
     注:
          使用副本集时,如果 PRIMARY 挂掉,SECONDARY 会成为 PRIMARY, Mongodb 的访问地址是会改变的。
          但是,Mongodb 提供了各种开发语言访问 Mongodb replica sets 的驱动程序,所以,访问地址的高可用在客户端访问代码中实现。
三、Mongodb Replicat sets 部署规划:
          172.16.10.55:27017     (mongodb master)
          172.16.10.56:27017     (mongodb slave)
          172.16.10.56:27018     (mongodb 仲裁点)
四、Mongodb Replicat sets 配置文件修改:
     1.修改172.16.10.55:27017(mongodb master) 的配置文件如下:
          vim /usr/local/mongodb/conf/mongodb.conf
               port=27017
               dbpath=/usr/local/mongodb/data
               logpath=/usr/local/mongodb/log/mongodb.log
               logappend=true
               fork=true
               oplogSize=4096
               replSet=haowu/172.16.10.56:27017,172.16.10.56:27018
     2.修改172.16.10.56:27017(mongodb slave) 的配置文件如下:
          vim /usr/local/mongodb/conf/mongodb.conf
               port=27017
               dbpath=/usr/local/mongodb/data
               logpath=/usr/local/mongodb/log/mongodb.log
               logappend=true
               fork=true
               oplogSize=4096
               replSet=haowu/172.16.10.55:27017,172.16.10.56:27018
     3.修改172.16.10.56:27018(mongodb 仲裁点) 的配置文件如下:
          vim /usr/local/mongodb_arbirer/conf/mongodb.conf
               port=27018
               dbpath=/usr/local/mongodb_arbirer/data
               logpath=/usr/local/mongodb_arbirer/log/mongodb.log
               logappend=true
               fork=true
 
     # oplogSize:
               用于指定复制时的日志大小,默认大小是磁盘剩余空间的5%,其实就是一个缓存,缓存PRIMARY产生的日志。
     # replSet:
               设置副本集的命令,名字后跟其他的实例地址。实例地址也可以不指定或者指定一个,mongodb可以自动去发现其他节点。为了使配置清晰,指定了节点地址。
五、Mongodb Replicat sets 启动:
      1.172.16.10.55:27017(mongodb master)启动:
          /usr/local/mongodb/bin/mongod –config /usr/local/mongodb/conf/mongodb.conf
      2.172.16.10.56:27017(mongodb slave)启动:
         /usr/local/mongodb/bin/mongod –config /usr/local/mongodb/conf/mongodb.conf
      3.172.16.10.56:27018(mongodb 仲裁点)启动:
          /usr/local/mongodb_arbirer/bin/mongod –config /usr/local/mongodb_arbirer/conf/mongodb.conf
          # 在启动集群后,需要对集群做初始化配置,初始化配置需要所有的节点都在启动状态
六、Mongodb Replicat sets 集群初始化:
     登录到172.16.10.55:27017(mongodb master)上,执行如下操作:
      /usr/local/mongodb/bin/mongo>config_rs1={_id:’haowu’,members:[
                                                                      {_id:0,host:’172.16.10.55:27017′,priority:10},
                                                                      {_id:1,host:’172.16.10.56:27017′,priority:9},
                                                                      {_id:2,host:’172.16.10.56:27018′,”arbiterOnly”:true}
                                                                      ]}
        /usr/local/mongodb/bin/mongo>rs.initiate(config_rs1)
        /usr/local/mongodb/bin/mongo>rs.status()
        /usr/local/mongodb/bin/mongo>rs.config()
        /usr/local/mongodb/bin/mongo>rs.initiate(config_rs1)
七、Mongodb Replicat sets 同步测试:
      1. 登录 mongodb master 上,插入数据:
          haowu:PRIMARY> show collections;
haowu:PRIMARY> db.haowu.insert({name:”haowu”,age:28})
haowu:PRIMARY> db.haowu.find();
      2. 登录 mongodb slave 上,执行如下操作,看是否同步:
          # mongodb默认是从主节点读写数据的,副本节点上不允许读,下面,设置副本节点可读
          haowu:SECONDARY> rs.slaveOk()
haowu:SECONDARY> db.haowu.find();

八、Mongodb Replicat sets 故障切换测试:
      1. 登录 mongodb master 上,关闭master:
          haowu:PRIMARY> use admin、
haowu:PRIMARY> db.shutdownserver();
      2. 登录 mongodb slave 上,查看slave日志切换信息:
          其实,登录slave,你会发现slave的标识由:haowu:SECONDARY>  变为  haowu:PRIMARY>
          haowu:SECONDARY> rs.isMaster()
      3.我们这里,因为设置了副本集成员的优先级,所以,当宕机的master 重新启动后,会自动再次成为 master;
         因此,如果想避免此类事件发生,我们可以去掉优先级设置
九、Mongodb Replicat sets 读写分离配置:
     读写分离,将读压力分散到副本集的副本节点上,可以减轻主节点的读写压力
     (1)设置读写分离,需要先在副本节点SECONDARY ,设置 setSlaveOk。
     (2)在程序中设置副本节点负责读操作,

Author: Michael

关注数据分析,挖掘数据金矿。

Leave a Reply

Your email address will not be published. Required fields are marked *