單機mongodb轉為複製集的操作步驟
- 2019 年 10 月 4 日
- 筆記
由於歷史原因,生產環境的幾台mongodb都是單機在運行,考慮到宕機等不確定的風險,需要給他們做一下高可用。mongodb原生的複製集方案非常簡單好用。
下面,就是相關的測試環境實驗筆記。。。。
單機mongodb轉為複製集的操作步驟:
MongoDB版本: 3.2.16
實驗環境中,3個mongodb實例運行在同一個虛擬機上。另外,從節約資源考慮,我們最終搭建完的結構是: 1主、1備、1仲裁節點
當前正在運行的單機節點: 192.168.10.10:27117
配置如下:
systemLog: destination: file quiet: true path: mongodb_27117.log logAppend: true logRotate: reopen processManagement: fork: true pidFilePath: mongod_27117.pid net: bindIp: 0.0.0.0 port: 27117 setParameter: cursorTimeoutMillis: 60000 operationProfiling: slowOpThresholdMs: 500 storage: dbPath: /opt/mongodb/27117/ directoryPerDB: true engine: wiredTiger journal: enabled: true
打算新增的2個節點:
192.168.10.10:27118 standby節點
192.168.10.10:27119 仲裁節點
下面開始操作:
1、業務低峰期,申請操作窗口時間。然後關閉當前的 27117 節點 ,並去修改配置如下:
> use admin > db.shutdownServer()
修改 27117 的配置文件,在最後加上3行內容,設置10G的oplog大小,基本上夠用了:
replication:
oplogSizeMB: 10240
replSetName: test01
2、再次啟動 27117 進程
./mongod -f 27117.conf
3、初始化集群配置
./mongo –port 27117
> config = { _id:"test01", members:[ {_id:0,host:"192.168.10.10:27117"} ] } > rs.initiate(config) test01:PRIMARY> rs.status() { "set" : "test01", "date" : ISODate("2019-06-20T14:07:03.057Z"), "myState" : 1, "term" : NumberLong(1), "heartbeatIntervalMillis" : NumberLong(2000), "members" : [ { "_id" : 0, "name" : "192.168.10.10:27117", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 58, "optime" : { "ts" : Timestamp(1561039618, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2019-06-20T14:06:58Z"), "infoMessage" : "could not find member to sync from", "electionTime" : Timestamp(1561039617, 2), "electionDate" : ISODate("2019-06-20T14:06:57Z"), "configVersion" : 1, "self" : true } ], "ok" : 1 }
4、 啟動 27118 27119 實例
編輯 27118 和 27119 的配置文件,大致如下:
systemLog: destination: file quiet: true path: mongodb_27119.log logAppend: true logRotate: reopen processManagement: fork: true pidFilePath: mongod_27119.pid net: bindIp: 0.0.0.0 port: 27119 setParameter: cursorTimeoutMillis: 60000 storage: dbPath: /opt/mongodb/27119/ directoryPerDB: true engine: wiredTiger journal: enabled: true operationProfiling: slowOpThresholdMs: 500 replication: oplogSizeMB: 10240 replSetName: test01
啟動進程:
./mongod -f 27118.conf ./mongod -f 27119.conf
5、登錄到 27117 實例里,將 27118 和 27119 加到集群中去
./mongo --port 27117 > rs.add("192.168.10.10:27118") > rs.addArb("192.168.10.10:27119")
6、查看集群狀態
> rs.status()
由於有數據正在同步過程中,這裡可能看到新加的節點是startup或者其它的狀態,稍等即可。
【注意:新加的節點在做全量同步的時候,大概率會造成主庫內存佔用過大,因此不要把主庫的內存設得過大,防止同步數據的時候把主庫拖垮了】
> rs.conf()
7、測試故障切換【可選】
> use admin > rs.stepDown()
觀察需要多久自動選出新的主節點,沒問題後,再將主庫切回到原先的狀態
8、添加相關的監控
可以採用zabbix 或者 mongodb_exporter 來採集數據
9、聯繫業務方修改業務上mongodb的連接方式,從原先的單機方式改為複製集方式 【非常重要】