Mongodb复制集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb复制集相关的知识,希望对你有一定的参考价值。

  • Mongodb复制集简介
    Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保持复制集内所有成员存储相同的数据集,提供数据的高可用。
    客户端在主节点写入数据,在从节点读取数据,主节点和从节点进行数据交互保证数据一致性,如果其中一个节点出了故障,其他发节点马上将业务接过来无需停机操作
  • 复制集的优势

    让数据更安全
    搞数据可用性
    灾难恢复
    无停机维护(如备份,重建索引,故障转移)
    读缩放(额外的副本读取)
    副本集对应用程序是透明的

  • 复制集的特点

    N个几点的群集
    任何节点可作为主节点
    所有写入操作都在主节点上
    自动故障转移
    自动恢复

  • 复制集部署
  • 安装好的MongoDB
  • 添加配置4个实例
  • 点击:安装及实例添加教程

    # mkdir -p /data/mongodb/mongodb{2,3,4}     //创建数据目录
    # mkdir /data/mongodb/logs
    # touch /data/mongodb/logs/mongodb{2,3,4}.log    //创建日志文件
    # cd /data/mongodb/logs/
    # chmod 777 *.log     //赋予权限
  • 编辑4个实例的日志文件

    # cp -p /etc/mongod.conf /etc/mongod2.conf
    # vim /etc/mongod2.conf
         path: /data/mongodb/logs/mongodb2.log               //每个实例指定自己日志目录
         dbPath: /data/mongodb/mongodb2                        //每个实例指定自己的数据目录
         port: 27018                                                          //指定端口分别为27017、 27018、 27019 、 27020
            .......
         replication:                                           //开启所有实例的复制参数:定义一个 replSetName: kgcrs
                    replSetName: kgcrs
  • 启动所有实例

    # mongod -f /etc/mongod.conf
    # mongo --port 27017
    
    # mongod -f /etc/mongod2.conf
    # mongo --port 27018
    
    # mongod -f /etc/mongod3.conf
    # mongo --port 27019
    
    # mongod -f /etc/mongod4.conf
    # mongo --port 27020
    # netstat -ntap | grep mongod

    技术分享图片

  • 初始化配置复制集
  • 确定节点上没有数据

        # mongo   //进入实例
        > show dbs
        > rs.status()  //查看复制集状态
        > cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.233.128:27017"},{"_id":1,"host":"192.168.233.128:27018"},{"_id":2,"host":"192.168.233.128:27019"}]}
         // 定义cfg初始化参数  id 是之前配置文件里定义的,成员(3个  id分别定义 0 1 2   IP端口号27017、27018、27019)
         >  rs.initiate(cfg)     //启动复制集
         >  rs.status()  //查看此时可以查看到复制状态了

    技术分享图片

  • 增加和删除节点
  • 配置启动复制集后可以通过 rs.add() 和rs.remove() 来增加和删除节点

    rs.add("192.168.233.128:27020") //增加节点
    rs.status()
    技术分享图片
    rs.remove("192.168.233.128:27020") //删除节点

    • MongoDB复制集的切换
    • 当节点出现故障会自动切换到其他节点,管理员也可以手动切换

      # ps aux | grep  mongod

技术分享图片

        # kill -9 61070    //关闭主节点    复制集会自动切换
        > rs.status()   //查看
  • 手动切换

    kgcrs:PRIMARY> rs.freeze(30)      //PRIMARY暂停30s不参与选举
    kgcrs:PRIMARY> rs.stepDown(60,30)   //交出主节点位置,维持从节点状态不少于60秒,等待30秒使主节点和从节点日志同步

以上是关于Mongodb复制集的主要内容,如果未能解决你的问题,请参考以下文章

mongodb 复制集

MongoDB复制集

亲测教你如何搭建 MongoDB 复制集 + 选举原理

『MongoDB』MongoDB部署架构——复制集篇(Replica Set)

MongoDB 复制集

部署MongoDB复制集(主从复制读写分离高可用)