MongoDB複製集(Replication Set)

基本原理

複製集是一組MongoDB維護相同數據集的實例。它的基本構成是1主2從的結構,自帶互相監控投票機制,如果主庫發生宕機,複製集內部會進行投票選舉,選擇一個新的主庫替代原有主庫對外提供服務。同時複製集會自動通知客戶端程序主庫已經發生切換,應用就會連接到新的主庫。
在這裏插入圖片描述

複製集成員

Primary:接收所有寫操作的唯一成員
Secondaries:複製主服務器的oplog並操作應用於數據集以保持數據一致
在這裏插入圖片描述
arbiter:arbiter不存儲數據集的副本也不可能成爲primary。然而,仲裁者參與primary選舉但一個arbiter僅有1票。

特殊從節點

  • arbiter節點:主要負責選主過程中的投票,但是不存儲任何數據,也不提供任何服務。
  • hidden節點:隱藏節點。不參與選主,也不對外提供服務。
  • delay節點:延時節點。數據會落後於主庫一段時間,由於數據是延時的,也不應該提供服務或參與選主。一般配合hidden節點配置使用。

oplog

oplog(操作日誌)是一個特殊的有上限的集合,它保存着所有修改存儲在數據庫中的數據的操作的滾動記錄。MongoDB在主服務器上應用數據庫操作,然後在主服務器的oplog上記錄操作。secondary然後在異步進程中複製和應用這些操作,使得數據同步極大地提高,缺點是oplog有大小限制,默認是空閒磁盤的5%。

複製集作用

  • 冗餘和增加數據可用性。對於不同數據庫服務器上的多個數據副本,複製提供了對單個數據庫服務器丟失的一定程度容錯能力。
  • 自動故障切換。 如果主庫發生宕機,複製集內部會進行投票選舉,選擇一個新的主庫替代原有主庫對外提供服務。
    在這裏插入圖片描述

環境搭建

準備多套目錄:

su - mongod
mkdir -p /mongodb/28017/conf /mongodb/28017/data /mongodb/28017/log
mkdir -p /mongodb/28018/conf /mongodb/28018/data /mongodb/28018/log
mkdir -p /mongodb/28019/conf /mongodb/28019/data /mongodb/28019/log
mkdir -p /mongodb/28020/conf /mongodb/28020/data /mongodb/28020/log

多套配置文件內容:

cat > /mongodb/27017/conf/mongod.conf <<EOF
systemLog:
destination: file
path: /mongodb/28017/log/mongodb.log
logAppend: true
storage:
journal:
enabled: true
dbPath: /mongodb/28017/data
directoryPerDB: true
#engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
processManagement:
fork: true
net:
bindIp: 192.168.8.131,127.0.0.1
port: 27017
replication:
oplogSizeMB: 2048
replSetName: my_repl
EOF

\cp /mongodb/28017/conf/mongod.conf /mongodb/28018/conf/
\cp /mongodb/28017/conf/mongod.conf /mongodb/28019/conf/
\cp /mongodb/28017/conf/mongod.conf /mongodb/28020/conf/
sed ‘s#28017#28018#g’ /mongodb/28018/conf/mongod.conf -i
sed ‘s#28017#28019#g’ /mongodb/28019/conf/mongod.conf -i
sed ‘s#28017#28020#g’ /mongodb/28020/conf/mongod.conf -i

啓動多實例:

mongod -f /mongodb/28017/conf/mongod.conf
mongod -f /mongodb/28018/conf/mongod.conf
mongod -f /mongodb/28019/conf/mongod.conf
mongod -f /mongodb/28020/conf/mongod.conf

配置普通複製集:

mongo --port 28017 admin
config = {_id: ‘my_repl’, members: [
{_id: 0, host: ‘192.168.8.131:27017’},
{_id: 1, host: ‘192.168.8.131:27018’},
{_id: 2, host: ‘192.168.8.131:27019’}]
}

rs.initiate(config) //初始化配置
rs.status() //檢查狀態

配置1主1從一個arbiter

mongo -port 28017 admin
config = {_id: ‘my_repl’, members: [
{_id: 0, host: ‘10.0.0.51:28017’},
{_id: 1, host: ‘10.0.0.51:28018’},
{_id: 2, host: ‘10.0.0.51:28019’,“arbiterOnly”:true}]
}
rs.initiate(config)

複製集管理操作:

查看複製集狀態
rs.status(); //查看整體複製集狀態
rs.isMaster() // 查看當前是否是主節點
rs.conf() //查看複製集配置信息
添加刪除節點
rs.remove(“ip:port”); // 刪除一個節點
rs.add(“ip:port”); // 新增從節點
rs.addArb(“ip:port”); // 新增仲裁節點

配置延時節點(一般延時節點也配置成hidden)

cfg=rs.conf()
cfg.members[2].priority=0 =1取消配置
cfg.members[2].hidden=true =false取消
cfg.members[2].slaveDelay=120 =0取消
rs.reconfig(cfg) //使其生效

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