單節點mongodb3.4.3轉換成複製集(帶賬號密碼)
阿新 • • 發佈:2019-01-01
* 背景
現有一個單節點啟動的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