mongodb之副本集搭建

實戰環境

centos7 64位系統

防火牆和selinux關閉

mongodb 4.0

副本集官方文檔地址:https://docs.mongodb.com/manual/replication/

一、副本集介紹

MongoDB的replica set是一個mongod進程實例簇,數據在這個簇中相互複製,並自動進行故障切換。

MongoDB的數據庫複製增加了冗餘,確保了高可用性,簡化了管理任務如備份,並且增加了讀能力。大多數產品部署都使用了複製。MongoDB中primary處理寫操作,其它進行復制的成員則是secondaries。

image.png

相對於原來的主從複製,副本集能自動感知primary節點的下線,並提升其中一個Secondary作爲Primary。

默認選舉是按照實例啓動先後順序選舉主從,可以設置權重,指定某個實例爲primary(後續會有權重設置操作),

二、副本集角色

1. Primary

   默認情況下,讀寫都是在Primary上操作的。

2. Secondary

   通過oplog來重放Primary上的所有操作,擁有Primary節點數據的完整拷貝。

   默認情況下,不可寫,也不可讀。

   根據不同的需求,Secondary又可配置爲如下形式:

   1> Priority 0 Replica Set Members

        優先級爲0的節點,優先級爲0的成員永遠不會被選舉爲primary。

        在mongoDB副本集中,允許給不同的節點設置不同的優先級。

        優先級的取值範圍爲0-1000,可設置爲浮點數,默認爲1。

        擁有最高優先級的成員會優先選舉爲primary。

        譬如,在副本集中添加了一個優先級爲2的成員node3:27020,而其它成員的優先級爲1,只要node3:27020擁有最新的數據,那麼當前的primary就會自動降

        級,node3:27020將會被選舉爲新的primary節點,但如果node3:27020中的數據不夠新,則當前primary節點保持不變,直到node3:27020的數據更新到最新。

    2> Hidden Replica Set Members-隱藏節點

         隱藏節點的優先級同樣爲0,同時對客戶端不可見

         使用rs.status()和rs.config()可以看到隱藏節點,但是對於db.isMaster()不可見。客戶端連接到副本集時,會調用db.isMaster()命令來查看可用成員信息。

         所以,隱藏節點不會受到客戶端的讀請求。

         隱藏節點常用於執行特定的任務,譬如報表,備份。

    3> Delayed Replica Set Members-延遲節點

         延遲節點會比primary節點延遲指定的時間(通過slaveDelay參數來指定)

         延遲節點必須是隱藏節點。

3. Arbiter

   仲裁節點,只是用來投票,且投票的權重只能爲1,不復制數據,也不能提升爲primary。

   仲裁節點常用於節點數量是偶數的副本集中。

   建議:通常將Arbiter部署在業務服務器上,切忌將其部署在Primary節點或Secondary節點服務器上。

注:一個副本集最多有50個成員節點,7個投票節點。

三、實戰說明

使用2臺服務器實戰mongodb副本集,生產環境中建議至少三臺服務器

兩臺服務器

ip爲:192.168.237.128、192.168.237.129

集羣搭建實戰IP:

192.168.237.128:27017 

192.168.237.129:27018 

192.168.237.128:27019

1、配置文件修改(修改三個實例的端口和日誌目錄、數據目錄)

vim /data/mongodb/27017/mongodb.conf
systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/27017/mongodb.log
storage:
  dbPath: /data/mongodb/27017/
  journal:
    enabled: true
processManagement:
  fork: true
net:
  port: 27017
  bindIp: 0.0.0.0
#集羣名稱,三個配置文件一致
replication:
  replSetName: malin

2、啓動

/usr/local/mongodb/bin/mongod -f /data/mongodb-cluster/27017/mongodb.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb-cluster/27018/mongodb.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb-cluster/27019/mongodb.conf

3、初始化副本集

登錄任意一臺mongodb實例

/usr/local/mongodb/bin/mongo 127.0.0.1:27017

執行sql語句進行初始化

config = { _id:"malin", members:[
  {_id:0,host:"192.168.237.128:27017"},
  {_id:1,host:"192.168.237.129:27018"},
  {_id:2,host:"192.168.237.128:27019"}]
}
use admin               #必須在admin下執行
rs.initiate( config )	#副本集初始化,需要一定時間
rs.status()		#副本集狀態,一個primary,其它SECONDARY。primary是主,只有primary能寫入

4、測試副本集的數據同步

登錄primary實例

    執行sql

use malin
db.myuser.insert( {userid: 1} )

登錄SECONDARY實例,查看數據是否同步

    執行sql

    #SECONDARY需要聲明是slave才能查看數據

rs.slaveOk()

    從庫無法插入數據

查看延時

rs.printSlaveReplicationInfo()

5、副本集故障自動切換說明

mongodb的副本集當primary掛了,會挑選其中的一臺secondary升爲主

如果集羣只剩下一個實例的話,不會提升爲primary,插入數據將異常

所以,當集羣中有實例掛掉時,應該及時處理問題,啓動實例,如果實例中只剩下兩臺實例時,再掛掉一臺,會出現出入數據異常。


總結:至此副本集羣搭建完成,如有問題留言

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