• 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

  • 相关阅读:
    简单的Vue示例
    Vue开发环境搭建基本操作
    2020CentOS官网下载镜像方法
    while((ch=getchar()) !=EOF && ch != ' ');语句作用
    Mac 下使用svn
    用树形结构递归渲染权限列表
    .net core中使用jwt进行认证
    C#中异步多线程的实现方式
    redis-避免生产环境使用keys命令
    让visual studio总是以管理员身份启动
  • 原文地址:https://www.cnblogs.com/gdpuzxs/p/6826023.html
Copyright © 2020-2023  润新知