單機mongodb轉爲複製集的操作步驟

由於歷史原因,生產環境的幾臺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
  
storage:
  dbPath: /opt/mongodb/27117/
  directoryPerDB: true
  engine: wiredTiger

  



打算新增的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
  
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的連接方式,從原先的單機方式改爲複製集方式 【非常重要】







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章