MongoDB学习05–Master-Slave架构及副本集

4月 16th, 2012
Master-Slave架构及副本集

  1. Master-Slave架构的优点及拓扑图:
    1. 主要的优点:
      1. 解决单点故障问题;
      2. 实现数据的备份和恢复;
      3. 实现数据的读写分离;
    2. 拓扑图;                                                                                                              
    3. 使用不同的目录和端口来模拟不同的服务器:
      1. master:mongod –dbpath=/mongo/master –port=27017 –master;
      2. slave1:mongod –dbpath=/mongo/slave1 –port=30001 –slave –source=127.0.0.1:27017;
      3. slave2:mongod –dbpath=/mongo/slave2 –port=30002 –slave;
  2. 启动Master数据库:mongod –dbpath=/mongo/master –port=27017 –master,在master和slave的服务器上都会有一个local的集合,用来存放内部的复制信息;                      
  3. 配置Salve1数据库,并在启动时就与Master数据库保持同步:mongod –dbpath=/mongo/slave1 –port=30001 –slave –source=127.0.0.1:27017,会看到有一个rep1的进程从Master服务器同步数据;           
  4. 把原来的Slave2服务器添加到Master-Slave架构中:
    1. 首先启动一台Slave2服务器,并不指定Master源:mongod –dbpath=/mongo/slave2 –port=30002 –slave;                               
    2. 连接到Slave2服务器,在local数据库下添加Master服务器信息,然后查看,同步完成后会出现同步的时间戳;                                    
    3. 可以通过观察系统日志或者查看集合的记录数来查看同步的状况;
  5. 查看Master, Slave的状态:
    1. 查看master服务器的状态:db.printReplicationInfo();                     
    2. 查看slave服务器的状态:db.printReplicationInfo();                           
  6. 读写分离:
    1. 默认情况下Salve服务器不支持数据的读取,可以通过驱动中的slaveOkay来显示读取Slave数据库,从而减轻Master服务器的压力;
    2. 也可以让前端程序直接连接到Slave服务器读取数据;
  7. 副本集:
    1. 与Master-Slave不同的是,它没有特定的主数据库,如果哪个主数据库宕机了,集群中就会推选出一个从属的数据库作为主数据库,具有自动故障恢复功能,所以一定要保证副本集为奇数个,否则会发生主节点宕机,其它节点为只读的情况;
    2. 创建一个名为snda的集群;
    3. 使用不同的服务器和端口来模拟不同的服务器:
      1. rep1:mongod –dbpath=/mongo/rep1 –port=30001 –replSet=snda/127.0.0.1:30002,127.0.0.1:30003;
      2. rep2:mongod –dbpath=/mongo/rep2 –port=30002 –replSet=snda/127.0.0.1:30001,127.0.0.1:30003;
      3. rep3:mongod –dbpath=/mongo/rep3 –port=30003 –replSet=snda/127.0.0.1:30001,127.0.0.1:30002;
      4. arbriter:mongod –dbpath=/mongo/arbiter –port=30000 –replSet=snda/127.0.0.1:30001;
  8. 打开第一个副本服务器rep1:mongod –dbpath=/mongo/rep1 –port=30001 –replSet=snda/127.0.0.1:30002,127.0.0.1:30003,replSet参数表示让服务器知道副本集snda下还有其它的服务器;     
  9. 打开第二个副本服务器rep2:mongod –dbpath=/mongo/rep2 –port=30002 –replSet=snda/127.0.0.1:30001,127.0.0.1:30003,会与其它的副本进行通信,并读取副本集的配置;             
  10. 同样的方法打开第三个副本集rep3:mongod –dbpath=/mongo/rep3 –port=30003 –replSet=snda/127.0.0.1:30001,127.0.0.1:30002;
  11. 添加副本集的配置信息,在任意一个副本上的admin数据库进行配置,这里选择rep1:db.runCommand({replSetInitiate:{_id:”snda”, members:[{_id:1, host:”127.0.0.1:30001″}, {_id:2, host:”127.0.0.1:30002″}, {_id:3, host:”127.0.0.1:30003″}]}});                      
  12. 此时可以从日志看出哪一个副本已经成为了Primary服务器,哪一个副本是Secondary服务器,可以看到rep2和rep3都投票给rep1作为primary服务器;当然也可以通过查看状态查询:rs.status();               
  13. 启动仲裁服务器:mongod –dbpath=/mongo/arbiter –port=30000 –replSet=snda/127.0.0.1:30001;                            
  14. 添加仲裁服务器配置,可以通过snda副本集中任意一个副本的admin数据库添加,这里以rep1为例:rs.addArb(“127.0.0.1:30000”);                         
  15. 查看副本集群中各个服务器的状态:rs.status();                                          
  16. 测试自动故障恢复功能,关掉当前的主服务器,之后通过rs.status()查看状态,发现自动投票选择了新的主服务器;                                        
  17. 当rep1重新修复后加入集群,自动成为了Secondary服务器;
—————————– 已开启的Slave服务器加入到Master-Slave架构中 —————————–
mongo 127.0.0.1:30002/local
db.sources.insert({host:”127.0.0.1:27017″})
db.sources.find()
db.sources.find()
—————————– 已开启的Slave服务器加入到Master-Slave架构中 —————————–
—————————– MongoDB副本集的配置 —————————–
— 1.添加三个副本,并互相告知剩余的成员;
mongod –dbpath=/mongo/rep1 –port=30001 –replSet=snda/127.0.0.1:30002,127.0.0.1:30003;
mongod –dbpath=/mongo/rep2 –port=30002 –replSet=snda/127.0.0.1:30001,127.0.0.1:30003;
mongod –dbpath=/mongo/rep3 –port=30003 –replSet=snda/127.0.0.1:30001,127.0.0.1:30002;
— 2.添加副本集的配置信息;
mongo 127.0.0.1:30001/admin
db.runCommand({replSetInitiate:{_id:”snda”, members:[{_id:1, host:”127.0.0.1:30001″}, {_id:2, host:”127.0.0.1:30002″}, {_id:3, host:”127.0.0.1:30003″}]}})
— 3.启动仲裁服务器;
mongod –dbpath=/mongo/arbiter –port=30000 –replSet=snda/127.0.0.1:30001;
— 4.添加仲裁服务器的配置信息;
mongo 127.0.0.1:30001/admin
rs.addArb(“127.0.0.1:30000”)
— 5.查看副本集各个成员的状态;
rs.status()
—————————– MongoDB副本集的配置 —————————–
标签: ,
目前还没有任何评论.