暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mongo副本集(Replica Set)集群搭建并开启认证

大侠之运维 2022-10-10
869

点击上方蓝字  关注大侠之运维

后台回复99.99% 获取运维干货物

简单介绍下背景:


近期公司在做系统迁移,之前有个系统是研发自己管理的,所有的中间件都是单点,而且没有开启认证,存在很大的风险隐患,趁着这次迁移,将相关中间件进行了重新部署。


今天先做的是mongodb集群的搭建,mongodb集群有三种模式,一种是主从模式、一种是副本集模式,还有一种和分片集群,本文介绍的是副本集模式。



♦️

准备工作

服务器准备:

序号

IP

角色

架构模式

1

172.168.5.26

SECONDARY

Replica Set

2

172.168.5.27

            SECONDARY      Replica Set
     3
    172.168.5.28
            PRIMARY
      Replica Set


具体角色是根据实际部署完后集群间确定的


安装包准备,三台同步,不同版本根据需要调整:

    wget  https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-4.0.8.tgz

    或者到官方网址中寻找:

      https://www.mongodb.com/try/download/community


      ♦️

      集群部署

      解压部署包:

        tar -xvf  mongodb-linux-x86_64-rhel62-4.0.3.tgz -C data 
        cd /data
        mv mongodb-linux-x86_64-rhel62-4.0.3 mongodb

        新建数据目录、配置目录

          mkdir -p data/mongodb/data/{db,log}
          mkdir -p data/mongodb/conf

          初始化配置文件

          vim data/mongosb/conf/mongodb.conf

            dbpath=/data/mongodb/data/db
            logpath=/data/mongodb/data/log/mongodb.log
            pidfilepath=/data/mongodb/mongo.pid
            logappend=true
            port=23017
            bind_ip=0.0.0.0
            fork=true
            directoryperdb=true
            replSet=myset

            启动mongo服务,三台执行

              cd /data/mongodb/bin
              ./mongod --config data/mongodb/conf/mongodb.conf

              配置主从设置,其中一个节点执行

                ./mongo 172.168.5.26:23017

                  use adminrs

                    cfg = {_id: "myset",members:[{_id: 0,host: '172.168.5.26:23017',priority: 3},{_id: 1,host: '172.168.5.28:23017',priority: 2},{_id: 2,host: '172.168.5.27:23017',priority: 1}]};
                      rs.initiate(cfg)
                        rs.status()

                        如下结果

                          myset:PRIMARY> rs.status()
                          {
                          "set" : "myset",
                          "date" : ISODate("2022-10-10T12:03:23.256Z"),
                          "myState" : 1,
                          "term" : NumberLong(8),
                          "syncingTo" : "",
                          "syncSourceHost" : "",
                          "syncSourceId" : -1,
                          "heartbeatIntervalMillis" : NumberLong(2000),
                          "optimes" : {
                          "lastCommittedOpTime" : {
                          "ts" : Timestamp(1665403394, 1),
                          "t" : NumberLong(8)
                          },
                          "readConcernMajorityOpTime" : {
                          "ts" : Timestamp(1665403394, 1),
                          "t" : NumberLong(8)
                          },
                          "appliedOpTime" : {
                          "ts" : Timestamp(1665403394, 1),
                          "t" : NumberLong(8)
                          },
                          "durableOpTime" : {
                          "ts" : Timestamp(1665403394, 1),
                          "t" : NumberLong(8)
                          }
                          },
                          "lastStableCheckpointTimestamp" : Timestamp(1665403384, 1),
                          "members" : [
                          {
                          "_id" : 0,
                          "name" : "172.168.5.26:23017",
                          "health" : 1,
                          "state" : 1,
                          "stateStr" : "PRIMARY",
                          "uptime" : 1393,
                          "optime" : {
                          "ts" : Timestamp(1665403394, 1),
                          "t" : NumberLong(8)
                          },
                          "optimeDate" : ISODate("2022-10-10T12:03:14Z"),
                          "syncingTo" : "",
                          "syncSourceHost" : "",
                          "syncSourceId" : -1,
                          "infoMessage" : "",
                          "electionTime" : Timestamp(1665402022, 1),
                          "electionDate" : ISODate("2022-10-10T11:40:22Z"),
                          "configVersion" : 1,
                          "self" : true,
                          "lastHeartbeatMessage" : ""
                          },
                          {
                          "_id" : 1,
                                                  "name" : "172.168.5.27:23017",
                          "health" : 1,
                          "state" : 2,
                          "stateStr" : "SECONDARY",
                          "uptime" : 1392,
                          "optime" : {
                          "ts" : Timestamp(1665403394, 1),
                          "t" : NumberLong(8)
                          },
                          "optimeDurable" : {
                          "ts" : Timestamp(1665403394, 1),
                          "t" : NumberLong(8)
                          },
                          "optimeDate" : ISODate("2022-10-10T12:03:14Z"),
                          "optimeDurableDate" : ISODate("2022-10-10T12:03:14Z"),
                          "lastHeartbeat" : ISODate("2022-10-10T12:03:22.636Z"),
                          "lastHeartbeatRecv" : ISODate("2022-10-10T12:03:22.570Z"),
                          "pingMs" : NumberLong(0),
                          "lastHeartbeatMessage" : "",
                          "syncingTo" : "172.16.52.30:24017",
                          "syncSourceHost" : "172.16.52.30:24017",
                          "syncSourceId" : 2,
                          "infoMessage" : "",
                          "configVersion" : 1
                          },
                          {
                          "_id" : 2,
                                                  "name" : "172.168.5.28:23017",
                          "health" : 1,
                          "state" : 2,
                          "stateStr" : "SECONDARY",
                          "uptime" : 1392,
                          "optime" : {
                          "ts" : Timestamp(1665403394, 1),
                          "t" : NumberLong(8)
                          },
                          "optimeDurable" : {
                          "ts" : Timestamp(1665403394, 1),
                          "t" : NumberLong(8)
                          },
                          "optimeDate" : ISODate("2022-10-10T12:03:14Z"),
                          "optimeDurableDate" : ISODate("2022-10-10T12:03:14Z"),
                          "lastHeartbeat" : ISODate("2022-10-10T12:03:22.627Z"),
                          "lastHeartbeatRecv" : ISODate("2022-10-10T12:03:22.793Z"),
                          "pingMs" : NumberLong(0),
                          "lastHeartbeatMessage" : "",
                          "syncingTo" : "172.16.52.22:24017",
                          "syncSourceHost" : "172.16.52.22:24017",
                          "syncSourceId" : 0,
                          "infoMessage" : "",
                          "configVersion" : 1
                          }
                          ],
                          "ok" : 1,
                          "operationTime" : Timestamp(1665403394, 1),
                          "$clusterTime" : {
                          "clusterTime" : Timestamp(1665403394, 1),
                          "signature" : {
                          "hash" : BinData(0,"C3Oa+jLMS7aIOE2cDbvt6+hEInw="),
                          "keyId" : NumberLong("7152819770046283777")
                          }
                          }
                          }


                          ♦️

                          开启认证


                          添加用户

                            use admin
                            db.createUser({user:"root",pwd:"mongo&prd",roles:["root"]})
                            use scyw
                            db.createUser({user: "yw", pwd: "ywprd", roles: ["readWrite"]})

                            生成key文件

                              openssl rand -base64 90 -out ./mongo.keyfile
                              chmod 400 ./mongo.keyfile

                              同步上述文件到三台

                              配置文件调整,添加如下行

                                keyFile=/data/mongodb/mongo.keyfile
                                auth=true

                                重启三个mongo实例

                                验证,可以看到没有认证是会报错的

                                  myset:PRIMARY> db.system.users.find()
                                  Error: error: {
                                  "operationTime" : Timestamp(1665405804, 1),
                                  "ok" : 0,
                                  "errmsg" : "command find requires authentication",
                                  "code" : 13,
                                  "codeName" : "Unauthorized",
                                  "$clusterTime" : {
                                  "clusterTime" : Timestamp(1665405804, 1),
                                  "signature" : {
                                  "hash" : BinData(0,"qJB/hKg54xFEGj0O9gben+ZR80g="),
                                  "keyId" : NumberLong("7152819770046283777")
                                  }
                                  }
                                  }

                                  需要 db.auth('root','mongo&prd')



                                  👆点击查看更多内容👆


                                  推荐阅读

                                  神器,代码画架构图,部署图,yyds

                                  生产elasticsearch 8.0部署文档

                                  elastalert2-ELK日志关键字监控实践

                                  kubernetes安装参考这篇就好了!!


                                  记得星标记一下,下次更容易找到我

                                         



                                  文章转载自大侠之运维,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                  评论