1. 程式人生 > >單節點mongodb3.4.3轉換成複製集(帶賬號密碼)

單節點mongodb3.4.3轉換成複製集(帶賬號密碼)

* 背景

現有一個單節點啟動的mongodb例項,版本:3.4.3。帶賬號密碼。目標是將該單節點轉換成複製集結構,同時帶賬號密碼登入複製集。

單節點的mongodb的配置檔案為:

mongo.conf

dbpath=/usr/local/mongodb/data/db
logpath=/usr/local/mongodb/data/logs/mongodb.log
logappend=true
journal=true
quiet=true
port=27017
fork=true
auth=true

連結字串為:

mongodb://user:passed@10.1.161.94:27017/dbName

* 步驟

  • 1 修改原先的配置檔案為:mongod.yml
systemLog:
  destination: file
  path: "/usr/local/mongodb/data/logs/mongodb.log"
  logAppend: true
  quiet: true
storage:
  dbPath: "/usr/local/mongodb/data/db"
  journal:
    enabled: true
processManagement:
  fork: true
net:
  bindIp: localhost,10.1.161.94
  port: 27017
security:
  keyFile: "/usr/local/mongodb/keyFile"
replication: replSetName: "rs0"
  • 2 生成一個為replica set 成員準備的SSL KEY檔案
> touch keyFile
> openssl rand -base64 741 > keyFile
> chmod 600 keyFile

這裡keyFile的許可權給600就夠了,不要給777,否則mongodb例項啟動不起來,會報許可權too open。

  • 3 以新配置檔案重新啟動該例項。
> ./bin/mongod --config mongod.yml
  • 4 登入該例項,初始化複製集
> ./bin/mongo 
MongoDB shell
version v3.4.3 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.3 > use admin switched to db admin > db.auth("user","passed") 1 > rs.initiate()
  • 5 目前該複製集只有一個節點,在另外一臺機器上部署另外兩個節點:10.1.161.95:27017 10.1.161.95:28017
    將keyFile複製過去,配置檔案分別為:

mongod_2.yml

systemLog:
  destination: file
  path: "/usr/local/mongodb/data_2/logs/mongodb.log"
  logAppend: true
  quiet: true
storage:
  dbPath: "/usr/local/mongodb/data_2/db"
  journal:
    enabled: true
processManagement:
  fork: true
net:
  bindIp: localhost,10.1.161.95
  port: 27017
security:
  keyFile: "/usr/local/mongodb/keyFile" 
replication:
  replSetName: "rs0" 

mongod_3.yml

systemLog:
  destination: file
  path: "/usr/local/mongodb/data_3/logs/mongodb.log"
  logAppend: true
  quiet: true
storage:
  dbPath: "/usr/local/mongodb/data_3/db"
  journal:
    enabled: true
processManagement:
  fork: true
net:
  bindIp: localhost,10.1.161.95
  port: 28017
security:
  keyFile: "/usr/local/mongodb/keyFile" 
replication:
  replSetName: "rs0" 
  • 6 啟動另外2個節點,登入主節點10.1.161.94:27017,將這2個幾點新增進複製集。
> rs.add("10.1.161.95:27017")
> rs.add("10.1.161.95:28017")
  • 7 檢視複製集狀態
> rs.status()
{
    "set" : "rs0",
    "date" : ISODate("2017-12-12T02:01:31.751Z"),
    "myState" : 2,
    "term" : NumberLong(7),
    "syncingTo" : "10.1.161.95:27017",
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1513044128, 1),
            "t" : NumberLong(7)
        },
        "appliedOpTime" : {
            "ts" : Timestamp(1513044128, 1),
            "t" : NumberLong(7)
        },
        "durableOpTime" : {
            "ts" : Timestamp(1513044128, 1),
            "t" : NumberLong(7)
        }
    },
    "members" : [
        {
            "_id" : 0,
            "name" : "10.1.161.94:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 59968,
            "optime" : {
                "ts" : Timestamp(1513044128, 1),
                "t" : NumberLong(7)
            },
            "optimeDate" : ISODate("2017-12-12T02:02:08Z"),
            "syncingTo" : "10.1.161.95:27017",
            "configVersion" : 3,
            "self" : true
        },
        {
            "_id" : 1,
            "name" : "10.1.161.95:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 59966,
            "optime" : {
                "ts" : Timestamp(1513044128, 1),
                "t" : NumberLong(7)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1513044128, 1),
                "t" : NumberLong(7)
            },
            "optimeDate" : ISODate("2017-12-12T02:02:08Z"),
            "optimeDurableDate" : ISODate("2017-12-12T02:02:08Z"),
            "lastHeartbeat" : ISODate("2017-12-12T02:01:29.913Z"),
            "lastHeartbeatRecv" : ISODate("2017-12-12T02:01:30.306Z"),
            "pingMs" : NumberLong(0),
            "electionTime" : Timestamp(1512983310, 1),
            "electionDate" : ISODate("2017-12-11T09:08:30Z"),
            "configVersion" : 3
        },
        {
            "_id" : 2,
            "name" : "10.1.161.95:28017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 59966,
            "optime" : {
                "ts" : Timestamp(1513044128, 1),
                "t" : NumberLong(7)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1513044128, 1),
                "t" : NumberLong(7)
            },
            "optimeDate" : ISODate("2017-12-12T02:02:08Z"),
            "optimeDurableDate" : ISODate("2017-12-12T02:02:08Z"),
            "lastHeartbeat" : ISODate("2017-12-12T02:01:29.913Z"),
            "lastHeartbeatRecv" : ISODate("2017-12-12T02:01:30.021Z"),
            "pingMs" : NumberLong(0),
            "syncingTo" : "10.1.161.95:27017",
            "configVersion" : 3
        }
    ],
    "ok" : 1
}
  • 8 複製集的連結字串為:
mongodb://user:passed@10.1.161.94:27017,10.1.161.95:27017,10.1.161.95:28017/dbName?replicaSet=rs0