MongoDB副本集

  这个月开始学习了MongoDB,下面总结一下芒果DB的副本集。

  mongoDB官方已经不建议使用主从模式了,替代方案是采用副本集的模式。主从模式的缺点其实就是主机挂了,从机无法向外提供服务了。

  而mongoDB的副本集可以做到主机宕机了,从机可以根据一定选举机制,在从机中重新选取一个节点当成主机,继续向外部提供服务,真正做到了一个高可用。这个跟之前写的redis的哨兵模式有点类似。副本集的架构如下:

  

  由图可以看到客户端连接到整个副本集,不关心具体哪一台机器是否挂掉。主服务器负责整个副本集的读写,副本集定期同步数据备份,一但主节点挂掉,副本节点就会选举一个新的主服务器,这一切对于应用服务器不需要关心。我们看一下主服务器挂掉后的架构:

  

  下面进行环境的配置,我们直接在一台机器上部署三个节点,即一主两从,端口号更改一下即可。分别在三个cmd控制台启动三个MongoDB服务。

  (1)mongod --port 27017 --dbpath "D:datadb" --logpath "D:dataloglog.txt" --replSet rs0

  (2)mongod --port 27018 --dbpath "D:data eplSetDb" --logpath "D:data eplSetLoglog.txt" --replSet rs0

  (3)mongod --port 27019 --dbpath "D:data eplSetDb2" --logpath "D:data eplSetLog2log.txt" --replSet rs0

  (4)启动MongoDB客户端控制台(端口号为27017),使用命令rs.initiate()来启动一个新的副本集。

  (5)使用rs.add()方法将从机添加到副本集中,格式:rs.add(HOST_NAME:PORT)

     rs.add("172.31.18.239:27018");   rs.add("172.31.18.239:27019");

   到此,整个副本集已经搭建完成。可以使用命令rs.conf()来查看副本集的配置,查看副本集状态使用 rs.status() 命令,查看节点是不是为主节点可以使用rs.isMaster()命令,结果如下:

    

  在上述节点中,端口号为27017的节点时主节点,27018,27019为从节点。接下来在主节点插入一条数据,然后在从节点查看是否有数据。

  主节点插入成功。

   在27018端口的从机查看,显示如下:

  

  mongodb默认是从主节点读写数据的,副本节点上不允许读,需要设置副本节点可以读。可以使用命令 db.getMongo().setSlaveOk()进行设置,显示如下:

  

  这样副本集的复制功能已经实现了,接下来我们测试一下副本集故障转移功能。

  将主机MongoDB服务关闭,查看从节点的状态。

  

  主机宕机后,端口为27018的从机成为新的主机,接下来我们在新的主机中插入新的数据,查看27019从机是否能复制成功。

  db.persons.insert({"name":"zhaoxiaolei","age":24})

  查看端口为27019的从机,显示如下:

  

  接下来我们将端口号为27017的MongoDB服务重新启动一下,查看宕机后恢复正常,该是怎样的结果,显示如下:

  

  即宕机后重新加入到副本集后,从主机变成从机。查看节点数据显示如下:

     

   mongoDB进入web控制台,可以查看MongoDB的一些运行状况,以httpinterface参数启动mongodb,且应该以你的mongodb端口号+1000进行访问。如http://localhost:28017/

  参考网站:http://www.csdn.net/article/2014-04-09/2819221-build-high-avialable-mongodb-cluster-part-1/2

原文地址:https://www.cnblogs.com/gdpuzxs/p/6826023.html