Mongodb的入门(6)副本集

时间:2022-11-11 20:34:08

Mongodb的副本集:(有两种情况,主从复制,副本集)

  这次我来说一下mongodb的副本集,副本集的出现可以有效的保证mongodb的单点问题,对数据的稳健性有一定辅助作用:

  MongoDB复制:是将数据同步在多个服务器的过程。

    1.复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。

    2.复制还允许您从硬件故障和服务中断中恢复数据。


  什么是复制?

    • 保障数据的安全性
    • 数据高可用性 (24*7)
    • 灾难恢复
    • 无需停机维护(如备份,重建索引,压缩)
    • 分布式读取数据

MongoDB复制原理:

  mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。

  mongodb各个节点常见的搭配方式为:一主一从、一主多从。

  主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

     Mongodb的入门(6)副本集


Mongodb的主从复制:

   由于我本地已经装载了一个mongodb服务,我就在本地模拟两个mongdb启动做数据备份的操作:

     1> 配置路径如下:

      Mongodb的入门(6)副本集

     2> 进入各服务下的bin目录启动mongodb 并指定端口:Server1的对应master port = 27011

      mongod.exe --dbpath=E:\mongodbRs\db1 --master --port=27011

      Mongodb的入门(6)副本集

      Server2下是复制的mongodb  port=27012     mongod.exe --dbpath=E:\mongodbRs\db2 --port=27012 --slave --source=127.0.0.1:27011

      启动后一直监控:

      Mongodb的入门(6)副本集

    3>在27011 上插入一条记录:

      27012上就能看到变化:

      Mongodb的入门(6)副本集

      Mongodb的入门(6)副本集

·      报错的解决办法:

      Mongodb的入门(6)副本集

      注意:丛库只允许查询,插入会报错

      Mongodb的入门(6)副本集

    4>动态追加从属数据库    有印象就行,

      上面介绍的是在mongodb启动的时候,就知道主数据是哪个,下面我来说一种动态追加的方式:

      Mongodb的入门(6)副本集

     启动mongodb,不指定主库:mongod.exe --dbpath=E:\mongodbRs\db3 --port=27013 --slave

      Mongodb的入门(6)副本集

     上面显示信息是指没有master库配置:配置方式如下:

      Mongodb的入门(6)副本集

    查看mongodb3的服务启动信息可以查看到:slave生效了

      Mongodb的入门(6)副本集

    到这动态追加从库也配置完成:

  5>读写分离

  这种手段在大一点的架构中都有实现,在mongodb中其实很简单,在默认的情况下,从属数据库不支持数据的读取,但是没关系,

  在驱动中给我们提供了一个叫做“slaveOkay"来让我们可以显示的读取从属数据库来减轻主数据库的性能压力

  


对比:一主两从

    Mongodb的入门(6)副本集

  到这主从复制就基本上说完了,下面说副本集的搭建和介绍


Mongdb的副本集:  

   副本集的特点:

    1> 副本集没有特定的主数据库。

    2>如果哪个主数据库宕机了,集群中就会推选出一个从属数据库作为主数据库顶上,这就具备了自动故障恢复功能,

  

  副本集在搭建过程中,要保证数据是清空的,因为我上面搭建的主从复制的数据都保存在db1 db2 db3中,所以在搭建副本集时,要先清空数据,保证搭建副本集的纯净环境

  副本集:(搭建命令)
      mongod.exe --port 27011 --dbpath=E:\mongodbRs\db1 --replSet rs0
      mongod.exe --port 27012 --dbpath=E:\mongodbRs\db2 --replSet rs0
      mongod.exe --port 27013 --dbpath=E:\mongodbRs\db3 --replSet rs0

副本集搭建过程:

    Mongodb的入门(6)副本集

  rs.status():查询副本集的状态:截图如下:

    Mongodb的入门(6)副本集

  6>刚说副本集是没有主节点的集群,主节点宕机后其他节点会自动切换回来,下面我模拟这种场景,把27011干掉:

    Mongodb的入门(6)副本集

  7>我再把27011节点起来,这时候他作为一个从节点的状态又回到了集群中:

    Mongodb的入门(6)副本集

  


  至此,mongodb的主从复制和副本集的搭建已经全部完成,不会的搭建可以参考:http://www.runoob.com/mongodb/mongodb-replication.html