MongoDB 副本集部署 之 新增新成員

2021-10-07 12:24:00 字數 3984 閱讀 6060

本章內容:

本教程說明了如何向現有副本集新增新成員。有關副本部署模式的背景,請參閱文件:副本集部署體系結構。

乙個副本集最多可以有七個投票成員。要將成員新增到已經具有七個投票成員的副本集中,要麼將新成員作為非投票成員,要麼從現有某乙個成員中刪除投票功能。

在生產環境部署中,可以配置乙個初始化指令碼來管理成員操作步驟。

可以通過以下步驟將新成員新增到現有副本集中。也可以使用相同的步驟「重新新增」已刪除的成員。如果被刪除成員的資料仍然是相對較新的,則資料可以容易恢復和更新。

如果有現有成員的備份或快照,則可以將資料檔案(例如:dbpath目錄)移動到新系統,並使用它們快速建立新成員。這些檔案必須是:

重要

始終使用檔案系統快照來建立現有副本集的成員的副本。不要使用mongodump和mongorestore初始化新副本集成員資料。

從mongodb 3.6開始,預設情況下,mongodb二進位制檔案mongod和mongos繫結到localhost。如果為二進位制檔案設定了net.ipv6配置檔案或--ipv6命令列選項,則該二進位制檔案還將繫結到本地ipv6位址。

在舊版本中,從mongodb 2.6開始,預設情況下,只有正式的mongodb rpm(red hat,centos,fedora linux和衍生產品)和deb(debian,ubuntu和衍生產品)的二進位制檔案才繫結到localhost。

當僅繫結到本地主機時,這些mongodb 3.6二進位制檔案只能接受來自在同一臺計算機上執行的客戶端(包括mongo shell,部署中的其他成員(副本集和分片集群)的連線)。遠端客戶端無法連線到僅繫結到本地主機的二進位制檔案。

要覆蓋並繫結到其他ip位址,可以使用net.bindip配置檔案設定或--bind_ip命令列選項來指定主機名或ip位址的列表。

警告

繫結到非本地主機(例如可公開訪問)的ip位址之前,請確保已保護群集免受未經授權的訪問。有關安全建議的完整列表,請參閱「安全檢驗表」。至少應考慮啟用身份驗證並強化網路基礎結構。

例如,以下mongod例項同時繫結到localhost和主機名my-example-associated-hostname:

mongod --bind_ip localhost,my-example-associated-hostname
假如主機名my-example-associated-hostname與ip位址198.51.100.1關聯。為了連線到該例項,遠端客戶端必須指定主機名或其關聯的ip位址198.51.100.1:

mongo --host my-example-associated-hostname

mongo --host 198.51.100.1

提示

如果可能,請使用邏輯dns主機名而不是ip位址,尤其是在配置副本集成員或分片群集成員時。邏輯dns主機名的使用避免了由於ip位址更改而導致的配置更改。

現有正在執行的副本集。

新的mongodb系統能夠支援你的資料集,現有副本集可以通過網路對其進行訪問。

否則,請使用mongodb安裝教程和「部署副本集」教程。

在將新成員新增到現有副本集中之前,請使用以下策略之一準備新成員的資料目錄:

如果新成員處於恢復(recovering)狀態,作為複製過程的一部分,在mongodb可以將所有資料進行複製之前,它必須退出並成為 secondary

成員。此過程需要時間,但不需要管理員干預。

確保可以將資料目錄複製到新成員,然後在操作日誌允許的視窗內開始複製。否則,新例項將必須執行初始同步,這將完全重新同步資料,如重新同步副本集的成員中所述。

使用rs.printreplicationinfo()來檢查副本集成員關於oplog的當前狀態。

有關複製部署模式的背景,請參閱副本集部署體系結構文件。

提示

如果可能,請使用邏輯dns主機名而不是ip位址,尤其是在配置副本集成員或分片群集成員時。邏輯dns主機名的使用避免了由於ip位址更改而導致的配置更改。

第1:啟動新的mongod例項。

指定資料目錄和副本集名稱。以下示例指定/srv /mongodb/db0資料目錄和rs0副本集:

mongod --dbpath /srv/mongodb/db0 –replset rs0  --bind_ip localhost,
警告

繫結到非本地主機(例如可公開訪問)的ip位址之前,請確保已保護集群免受未經授權的訪問。有關安全建議的完整列表,請參閱安全檢查表。至少應考慮啟用身份驗證並強化網路基礎結構。

有關配置選項的更多資訊,請參見mongod手冊頁。

可選的操作

可以在mongod.conf配置檔案中指定資料目錄,副本集名稱和ip繫結,然後使用以下命令啟動mongod:

mongod --config /etc/mongod.conf

第2:連線到副本集的主副本。

只能在連線到primary成員時,可以新增成員。如果不知道哪個成員是primary成員,請登入到副本集的任何成員,然後發出db.ismaster()命令。

第3:使用rs.add()將新成員新增到副本集。

將成員配置文件傳遞給該方法。例如,要在主機mongodb3.example.net上新增成員,請發出以下命令:

rs.add(  )
提示

當新新增的輔助節點的投票和優先順序設定大於零時,在其初始同步期間,即使輔助節點不能提供讀取或成為主節點,因為其資料仍不一致,所以該輔助節點仍算作有表決權的成員。

第4:確認新成員已達到secondary狀態。

要檢查副本集成員的狀態,請執行rs.status():

rs.status()
第5:新新增的成員轉換為secondary狀態後,請使用rs.reconfig()更新新新增成員的優先順序和投票權(如果需要)。

例如,如果rs.conf()返回mongodb3.example.net:27017的配置文件作為members陣列中的第五個元素,以將其優先順序和投票權更新為1,請使用以下操作序列:

var cfg = rs.conf();

cfg.members[4].priority = 1

cfg.members[4].votes = 1

rs.reconfig(cfg)

警告

shell方法rs.reconfig()可能強制當前primary資料庫降級,從而引起新一輪選舉。當主資料庫降級時,mongod將關閉所有客戶端連線。雖然這通常需要10到20秒,但請嘗試在計畫的維護期間進行這些更改。

避免重新配置包含不同mongodb版本成員的副本集,因為驗證規則可能在mongodb版本之間有所不同。

mysql副本集 MongoDB副本集

一 節點型別standard 常規節點,它儲存乙份完整的資料副本,參與選舉投票,有可能成為活躍節點。passive 儲存了完整的資料副本 一 節點型別 standard 常規節點,它儲存乙份完整的資料副本,參與選舉投票,有可能成為活躍節點。passive 儲存了完整的資料副本,參與投票,不能成為活躍...

Docker中部署MongoDB副本集

docker環境 自行安裝 docker pull mongo啟動三個節點docker run itd name m0 p 27017 27017 mongo replset rs docker run itd name m1 p 37017 27017 mongo replset rs docke...

mysql副本集 mongoDB副本集的搭建

環境簡介 192.168.1.151 fedoraserver 用作副本集的主庫,已經有資料 192.168.1.152 fedoraserver 從庫,空例項 192.168.1.153 fedoraserver 從庫,空例項 mongodb的副本集和mysql基於gtid的多源三例項迴圈主從即 ...