- Mongodb複製集簡介
Mongodb複製集由一組Mongod實例(進程)組成,包含一個Primary節點和多個Secondary節點,Mongodb Driver(客戶端)的所有數據都寫入Primary,Secondary從Primary同步寫入的數據,以保持複製集內所有成員存儲相同的數據集,提供數據的高可用。
客戶端在主節點寫入數據,在從節點讀取數據,主節點和從節點進行數據交互保證數據一致性,如果其中一個節點出了故障,其他發節點馬上將業務接過來無需停機操作 -
複製集的優勢
讓數據更安全
搞數據可用性
災難恢復
無停機維護(如備份,重建索引,故障轉移)
讀縮放(額外的副本讀取)
副本集對應用程序是透明的 -
複製集的特點
N個幾點的羣集
任何節點可作爲主節點
所有寫入操作都在主節點上
自動故障轉移
自動恢復 - 複製集部署
- 安裝好的MongoDB
- 添加配置4個實例
-
# mkdir -p /data/mongodb/mongodb{2,3,4} //創建數據目錄 # mkdir /data/mongodb/logs # touch /data/mongodb/logs/mongodb{2,3,4}.log //創建日誌文件 # cd /data/mongodb/logs/ # chmod 777 *.log //賦予權限
-
編輯4個實例的日誌文件
# cp -p /etc/mongod.conf /etc/mongod2.conf # vim /etc/mongod2.conf path: /data/mongodb/logs/mongodb2.log //每個實例指定自己日誌目錄 dbPath: /data/mongodb/mongodb2 //每個實例指定自己的數據目錄 port: 27018 //指定端口分別爲27017、 27018、 27019 、 27020 ....... replication: //開啓所有實例的複製參數:定義一個 replSetName: kgcrs replSetName: kgcrs
-
啓動所有實例
# mongod -f /etc/mongod.conf # mongo --port 27017 # mongod -f /etc/mongod2.conf # mongo --port 27018 # mongod -f /etc/mongod3.conf # mongo --port 27019 # mongod -f /etc/mongod4.conf # mongo --port 27020 # netstat -ntap | grep mongod
- 初始化配置複製集
-
確定節點上沒有數據
# mongo //進入實例 > show dbs > rs.status() //查看複製集狀態 > cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.233.128:27017"},{"_id":1,"host":"192.168.233.128:27018"},{"_id":2,"host":"192.168.233.128:27019"}]} // 定義cfg初始化參數 id 是之前配置文件裏定義的,成員(3個 id分別定義 0 1 2 IP端口號27017、27018、27019) > rs.initiate(cfg) //啓動複製集 > rs.status() //查看此時可以查看到複製狀態了
- 增加和刪除節點
-
配置啓動複製集後可以通過 rs.add() 和rs.remove() 來增加和刪除節點
rs.add("192.168.233.128:27020") //增加節點
rs.status()
rs.remove("192.168.233.128:27020") //刪除節點- MongoDB複製集的切換
-
當節點出現故障會自動切換到其他節點,管理員也可以手動切換
# ps aux | grep mongod
# kill -9 61070 //關閉主節點 複製集會自動切換
> rs.status() //查看
-
手動切換
kgcrs:PRIMARY> rs.freeze(30) //PRIMARY暫停30s不參與選舉 kgcrs:PRIMARY> rs.stepDown(60,30) //交出主節點位置,維持從節點狀態不少於60秒,等待30秒使主節點和從節點日誌同步