zoukankan      html  css  js  c++  java
  • MongoDB搭建ReplSet复制集群

    MongoDB的复制集是一个主从复制模式 又具有故障转移的集群,任何成员都有可能是master
    当master挂掉用会很快的重新选举一个节点来充当master。

    复制集中的组成主要成员

    • Primary
      数据读写 master节点
    • Secondary
      备份Primary的数据 默认设置下 不可读 不可写
    • arbiter
      投票节点 此节点不会存数据 只参与投票 ,当primary节点出现异常挂掉之后 arbiter节点负责从secondary 节点中选举一个节点升级为Primary节点

    其中可以设置Secondary节点可读,让Primary节点负责写,这些就实现了一个高效简单的读写分离    。    

    环境搭建

    以3个实例来演示一下复制集群的搭建过程 分别为:127.0.0.1:12345,127.0.0.1:12346,127.0.0.1:12347。
    需要预先创建好各目录的文件夹 不然启动的时候会报错,这里还有一个坑是 pidfilepath配置项必须是绝对路径,
    否则也会报错,replSet在同一个复制集中也需要具有一致的名称。

    注意在旧版本中是使用的是master slave模式 目前使用的是3.4官方不支持使用这种方式,
    官方希望使用replset代替master slave。所以当你配置master或者slave的时候就会报错。

    127.0.0.1:12345配置

    
    
    port=12345
    fork=true
    dbpath=data/12345
    logpath=log/12345/mongod.log
    httpinterface=true
    rest=true
    logappend=true
    pidfilepath=/home/collect/mongodb-linux-x86_64-rhel70-3.4.1/log/12345/12345.pid
    replSet=mydbCenter
    oplogSize=512
     
    127.0.0.1:12346配置
    
    
    port=12346
    fork=true
    dbpath=data/12346
    logpath=log/12346/mongod.log
    httpinterface=true
    rest=true
    logappend=true
    pidfilepath=/home/collect/mongodb-linux-x86_64-rhel70-3.4.1/log/12346/12346.pid
    replSet=mydbCenter
    oplogSize=512
    127.0.0.1:12347配置
     
    
    
    port=12347
    fork=true
    dbpath=data/12347
    logpath=log/12347/mongod.log
    httpinterface=true
    rest=true
    logappend=true
    pidfilepath=/home/collect/mongodb-linux-x86_64-rhel70-3.4.1/log/12347/12347.pid
    replSet=mydbCenter
    oplogSize=512

    分别启动好3个实例之后,随便进入一个实例

    初始化复制集群

    首先创建1个配置对象 在js中就是一个简单的对象 、json串
     
    1.  
      var rs_conf={
    2.  
      "_id" : "mydbCenter",
    3.  
      "members" : [
    4.  
      {
    5.  
      "_id" : 0,
    6.  
      "host" : "127.0.0.1:12345"
    7.  
      },
    8.  
      {
    9.  
      "_id" : 1,
    10.  
      "host" : "127.0.0.1:12346"
    11.  
      },
    12.  
      {
    13.  
      "_id" : 2,
    14.  
      "host" : "127.0.0.1:12347"
    15.  
      }
    16.  
      ]
    17.  
      }
    把配置应用到集群
     
    rs.initiate(rs_conf)
    

    这里有一个限制就是需要集群的节点中不能有数据 需要先清空一下 不然initiate的时候会出错。
    配置成功后使用rs.status()命令查看各节点状态,一些正常 就能看到各节点的状态信息

    rs.status()
    

    搭建好复制集群之后命令行的标识符会变为相应的成员类型如

    1.  
      mydbCenter:PRIMARY>
    2.  
      mydbCenter:SECONDARY>

    这也是检验集群是否搭建的成功的一个小标识。

    接着可以尝试一下在Primary中写入一条数据。这条数据会立即同步到各个Secondary节点中。
    当然前面也说过默认情况的Secondary不可读 会报下面的错误。

    1.  
      {
    2.  
      "ok" : 0,
    3.  
      "errmsg" : "not master and slaveOk=false",
    4.  
      "code" : 13435,
    5.  
      "codeName" : "NotMasterNoSlaveOk"
    6.  
      }

    所以需要在Secondary中执行

    db.getMongo().setSlaveOk()
    

    在网络上看到有很多帖子说只要在Primary节点中执行 db.getMongo().setSlaveOk()
    就能在Secondary节点中读取数据,但是在3.4版本试了一下是不行的。需要在Secondary中执行一下
    db.getMongo().setSlaveOk()让Secondary可读。

    添加节点

    如果现在已经有搭建好一个复制集群了 老板想多加一台备份机器进去 怎么办?
    只需要启动好新机器的实例后 在Primary中调用rs.add() 方法即可

    rs.add({"host" : "127.0.0.1:12348"})
    

    添加投票节点调用rs.addArb()方法。

    转载至:笑松小站 http://blog.seoui.com/2017/01/11/mongodb-rs/

  • 相关阅读:
    python获取DBLP数据集
    GNUPLOT 画多组柱状图 以及 折线图 以及各种问题的解决方案
    Leetcode 1:two sum
    测试面试之如何测试一个杯子
    C++小总结
    统计‘1’的个数
    C语言小总结
    剑指offer面试题1---赋值运算符函数
    黑盒测试与白盒测试
    软件测试的原则
  • 原文地址:https://www.cnblogs.com/ExMan/p/9571727.html
Copyright © 2011-2022 走看看