1. 程式人生 > >Ubuntu 18.04下部署MongoDB複製集(副本集)

Ubuntu 18.04下部署MongoDB複製集(副本集)

環境 作業系統: 18.04 MongoDB: 4.0.3

 

伺服器 首先部署3臺伺服器,1臺主節點 + 2臺從節點 3臺伺服器的內容ip分別是: 10.140.0.5 (主節點) 10.140.0.6 (從節點01) 10.140.0.7 (從節點02)

 

安裝MongoDB 接下來,需要在每一臺伺服器上安裝MongoDB。 完整安裝過程可參考官方文件   為了方便,本文提供MongoDB的一鍵安裝指令碼。  

可以到Linux公社資源站下載:

------------------------------------------分割線------------------------------------------

具體下載目錄在 /2018年資料/11月/3日/Ubuntu 18.04下部署MongoDB複製集(副本集)/

------------------------------------------分割線------------------------------------------

 

切換成root使用者
sudo su -

執行安裝指令碼
wget https://gitlab.com/caizhifei2003/scripts/raw/master/install/mongodb/ubuntu-1804.sh
chmod u+x ubuntu-1804.sh
./ubuntu-1804.sh

此時,可以通過mongo命令進入資料庫



配置複製集  

設定複製集名稱
 
有兩種方式來設定複製集的名稱。一種是通過mongod命令,另一種是通過修改配置檔案。
本文使用通過修改配置檔案的方式來設定複製集名稱,確保每次節點重新啟動後能夠使用相同的配置啟動資料庫。

開啟MongoDB在Ubuntu上的配置檔案
vim /etc/mongod.conf

找到replication配置節
replication:
    replSetName: "rs0"

繫結MongoDB的IP地址
 
找到net配置節
net:
    port: 27017
    bindIp: localhost,10.140.0.5這裡是主節點的地址,相應的從節點要繫結
10.140.0.6
10.140.0.7

儲存檔案,重新啟動mongod服務
service mongod restart

此時,進入到任何一個節點。檢視複製集狀態。

初始化複製集
通過mongo shell進入主節點的資料庫
執行復制集初始化命令

rs.initiate( {
  _id : "rs0",
  members: [
      { _id: 0, host: "10.140.0.5:27017" },
      { _id: 1, host: "10.140.0.6:27017" },
      { _id: 2, host: "10.140.0.7:27017" }
  ]
})
 

檢視複製集狀態
rs.status()

 

到此,複製集已經建立成功。

 

測試資料同步

執行如下命令,在主節點上插入一條資料

use test
db.test.insertOne({"name": "kenny"})

進入任何一個從節點,檢視資料是否被同步。
use test
rs.slaveOk()
db.test.find()

預設情況下,MongoDB只允許在主節點上寫入和讀取資料。這裡的rs.slaveOk()是為了在從節點上也讀取資料而需要執行的session(如果退出mongo shell,需要重新執行該命令)級別的命令。

顯示的內容如下:



測試重新選舉主節點 在3個節點上分別使用rs.isMaster()命令 10.140.0.5:



10.140.0.6:



10.140.0.7

強制關閉主節點上的MongoDB服務
use admin
db.shutdownServer()

在兩個從節點上,通過rs.isMaster()命令檢視狀態

10.140.0.6:



10.140.0.7:



從上面的執行結果可以看出,10.140.0.6已經被推選成新的主節點。此時所有服務一切正常。 至此,部署MongoDB複製集的基本操作已經完成。

 

總結   MongoDB複製集的部署還是比較簡單的,官方文件也給出了較為詳細的說明。   同任何其它資料庫一樣,MongoDB的副本集也是為了增強資料的安全性,避免因為伺服器出現異常時,而導致資料服務不可用的情況出現。同時,資料被完整的儲存在多個節點中,任何一臺伺服器的硬碟出現問題,都不會丟失資料。但是這裡也存在風險,那就是資料同步存在時間差,如果還沒有等到資料被同步到從節點,主節點就當機的話,那麼這部分資料是無法找回的。   官方建議的副本集節點數量是3個,1個主節點+2個從節點。或者是1個主節點+1個從節點+1個仲裁節點。仲裁節點的作用是在主節點不可用時,通過演算法找到最適合的從節點成為新的主節點。不建議將仲裁節點和資料節點放在同一個伺服器上。