MongoDB4.2副本集部署

由于公司环境需要升级迁移,需要部署指定4.2版本MongoDB主从集群,但是有与mongo4.0后不在推荐使用主从方式。所以遇到了一点问题,最终部署的为4.2副本集。

原环境为一主一从3.8版本环境:

    4.0以下部署方式如下:

      环境:

        主:172.18.57.108

        从:172.18.57.109

 

 

首先了解配置文件内容:

logpath=/home/data/mongo/log/mongod.log      #日志存放路径
logappend=true                    #是否追加日志

fork=true                      # 是否后台启动
port=27017                     # 启动服务端口

dbpath=/home/data/mongo/data/db          # 数据存放目录

pidfilepath=/data/mongo/pid/mongod.pid        #进程号存放位置
bind_ip=0.0.0.0                   #开放那些可以连接
oplogSize=10240                  # 默认oplog大小,不设置也没事
directoryperdb=true                 # 设置每个数据库将被保存在一个单独的目录
replSet=rs0                      # 副本集名称
#slave=true                      # 是否为从节点

#source=172.18.57.108:27017            # 主库ip与端口

master=true                    # 是否为主库

目前来说,开启这些就可以满足基本需求,所以更多的就不介绍了。

  环境部署准备:

    1. 下载软件包:wget https://repo.mongodb.org/yum/redhat/6/mongodb-org/3.6/x86_64/RPMS/mongodb-org-server-3.6.23-1.el6.x86_64.rpm

    2. 解压软件包:tar zxf  mongodb-org-server-3.6.23-1.el6.x86_64.rpm

    3. 更改安装目录: mv mongodb.3.6.23  mongodb

    4. 将mongod启动文件做软链接到/usr/bin下,以方便使用: ln -s /data/ops/app/mongodb/bin/mongod /usr/bin/mongod

    5. 创建指定目录与文件:

        mkdir -p /data/mongo/{data,log}

        mkdir -p /data/mongo/data/db

        touch /data/mongo/log/mongod.log

    6. 编写主配置文件: vim /data/mongo/mongodb.cof

        logpath=/home/data/mongo/log/mongod.log

        logappend=true

        fork=true
        port=27017
        dbpath=/home/data/mongo/data/db
        pidfilepath=/data/mongo/pid/mongod.pid
        bind_ip=0.0.0.0
        oplogSize=10240
        directoryperdb=true # 设置每个数据库将被保存在一个单独的目录
        replSet=rs0

        master=true

    7.以上同样从库执行,从库配置文件如下:

        logpath=/home/data/mongo/log/mongod.log
        logappend=true
        fork=true
        port=27017
        dbpath=/home/data/mongo/data/db
        pidfilepath=/data/mongo/pid/mongod.pid
        bind_ip=0.0.0.0
        oplogSize=10240
        directoryperdb=true # 设置每个数据库将被保存在一个单独的目录
        replSet=rs0
        slave=true
        source=172.18.57.108:27017

    8. 启动mongodb: mongod -f  /data/mongo/mongodb.cof

    9. 进入mongo查看是否为主从

 

 

    4.2副本集部署:

      4.0以上部署配置文件基本没有更改,需把slave、source、master注释

      1. 下载4.2版本软件包:wget https://repo.mongodb.org/yum/redhat/6/mongodb-org/4.2/x86_64/RPMS/mongodb-org-server-4.2.14-1.el6.x86_64.rpm

      2. 一切都和上面一样,只是多了一个仲裁节点,因为mongodb主从不可用,只能部署剧本集。网上有很多说是可以部署主从,但是我没有找到。。。4.2以后的主从即使部署成功后,当主节点宕掉

    从节点并不会选替换为主节点,需手动更改才可,如未更改为主节点,原主节点重启后从节点会重新同步数据,所以推荐还是做副本集。

      3. 创建仲裁节点目录与配置文件(仲裁节点可以在主或者从主机上随意起一台):

        mkdir -p /data/ops/app/mongo/{data,log}

        mkdir -p /data/ops/app/mongo/data/db

        touch /data/ops/app/mongo/log/mongod.log

        vim /data/ops/app/mongo/mongod.conf

          logpath=/home/data/ops/app/mongo/log/mongod.log
          logappend=true
          fork=true
          port=28018
          dbpath=/home/data/ops/app/mongo/data/db
          pidfilepath=/data/ops/app/mongo/pid/mongod.pid
          bind_ip=0.0.0.0
          oplogSize=10240
          directoryperdb=true # 设置每个数据库将被保存在一个单独的目录
          replSet=rs0

      4. 创建完成后启动所有节点,查看是否启动成功:ss -lnt |grep 27017

      5. 启动成功后通过shell连接任意一个数据库执行初始化:

            > conf=
            {
            "_id" : "rs0",
            "members" : [
            { "_id" : 0, "host" : "172.16.57.108:27017" },
            { "_id" : 1, "host" : "172.16.57.109:27017" },
            { "_id" : 2, "host" : "172.16.57.109:28018" }
            ]

            >rs.initiate(conf)

         也可以直接加上相应的数值,数值越大的则为主:

          cfg={ _id:"rs0", members:[ {_id:0,host:'172.18.57.108:27017',priority:2},{_id:2,host:'172.18.57.109:27017',priority:1}, {_id:1,host:'172.18.57.109:28018',arbiterOnly:true}]}

 

            结果输出如下:

                {
                "ok" : 1,
                "operationTime" : Timestamp(1542247326, 1),
                "$clusterTime" : {
                "clusterTime" : Timestamp(1542247326, 1),
                "signature" : {
                "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                "keyId" : NumberLong(0)
                }
                }
                }

 

 

如果在执行 rs.initiate() 方法时不传入任何参数,MongoDB 将以默认的配置文档对副本集进行初始化,后续可以再通过 rs.add() 方法来向副本集中添加成员。

 

副本集节点操作:

添加:

rs.add("172.18.57.224:27017")

删除:

rs.remove("172.16.57.224:27017")

添加仲裁:

rs.addArb("172.16.57.224:28018")

添加备份节点:

rs.add({"_id":3,"host":"172.16.57.224:27017","priority":0,"hidden":true})

更改副本集配置,强制某个节点为Primary:

cfg = rs.conf()

cfg.members[0].priority = 5 

cfg.members[1].priority = 1 

cfg.members[2].priority = 1 

rs.reconfig(cfg

副本查看状态:

rs.status()

查看副本集配置:

rs.conf()

 

 

 

 

故障案例:

1.启动报错:child process failed, exited with error number 1

  一般为配置文件书写错误

2.启动报错:child process failed, exited with error number 100(当时忘记记录下来了,如果是相似的)

  一般为非正常启动关闭导致的表锁了(一般删除存储数据目录下的mongodb.soke可以生效)

 

posted @ 2021-06-02 14:16  小情绪就不闹  阅读(410)  评论(0编辑  收藏  举报