標籤:ssi 一個 mongodb複製 ons 驗證 dea god 操作記錄 二進位日誌
本文章將介紹MongoDB複製集的基本配置和管理,分別包括配置從節點可以讀取資料、查看複製集狀態、更改oplog大小、配置帶認證的複製集
複製是基於動作記錄oplog,相當於Mysql中的二進位日誌,只記錄發生改變的記錄。複製是將主節點的oplog日誌同步並應用到其他從節點的過程。
節點的類型分為標準(host)節點、被動(passive)節點和仲裁(arbiter)節點。
- 標準節點可能被選舉為活躍(primary)節點,有選舉權。
- 被動節點有完整副本,不可能成為活躍節點,有選舉權。
- 仲裁節點不複製資料,不可能成為活躍節點,只有選舉權。
- 標準節點和被動節點的區別:priority值高的是標準節點,低的是被動節點。
選舉規則是票高者獲勝,priority是優先權為0~1000的值,相當於額外增加0~1000的票數。選舉結果:票高者獲勝。若票數相同:資料新者獲勝。
- 配置複製集的優先順序
- 先建立4個執行個體 教程
設定2個標準節點,一個被動節點,一個仲裁節點。
> cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.86.128:27017","priority":100},{"_id":1,"host":"192.168.86.128:27018","priority":100},{"_id":2,"host":"192.168.86.128:27019","priority":0},{"_id":3,"host":"192.168.86.128:27020","arbiterOnly":true}]}
> rs.initiate(cfg) //初始化配置 > rs.isMaster() //查看複製集的狀態
類比主節點故障
# mongod -f /etc/mongod.conf --shutdown //主節點服務關掉# mongo --port 27018> rs.isMaster() //查看節點的身份狀態 主節點已經換到27018
類比所有標準節點故障
# mongod -f /etc/mongod.conf --shutdown # mongod -f /etc/mongod2.conf --shutdown # mongo --port 27019> rs.isMaster() //查看節點身份狀態 可以看到主節點沒有了(當所有標準節點故障,被動節點也不能成為主節點)
- 允許從節點讀取資料
預設的MongoDB複製集的基本配置和管理,可以使用rs.slaveOK() 命令允許能夠在從節點讀取資料。
# mongo --port 27018> rs.slaveOk() //允許預設從節點讀取資料> show dbs
查看複製狀態資訊
查看Master的oplog中繼資料資訊:
> rs.printReplicationInfo()
查看Slave的同步狀態:
> rs.printSlaveReplicationInfo()
查看主從配置資訊:
> rs.conf() //或db.system.replset.find()
oplog:operations log的簡寫,儲存在一個特殊的資料庫中(local),oplog就儲存在其中的oplog.$main集合裡面,這個集合是一個固定集合,新操作會自動替換舊的操作,以保證oplog不會超過預設的大小,其中的每個文檔都代表主節點上執行的一個操作,oplog會包含所有對資料有修改的的操作(查詢操作不會記錄),預設下,oplog大小會佔用64位的執行個體5%的可用磁碟空間。
mongo複製的過程:主節點應用業務操作修改到資料庫中,然後記錄這些操作到oplog中,從節點複製這些oplog,然後應用這些修改。ps:這些操作是非同步。如果從節點的操作已經被主節點落下很遠,oplog日誌在從節點還沒執行完,oplog可能已經輪滾一圈了,從節點跟不上同步,複製就會停下,從節點需要重新做完整的同步,為了避免此種情況,盡量保證主節點的oplog足夠大,能夠存放相當長時間的操作記錄。
> use local > db.oplog.rs.find() //查看.oplog > db.oplog.rs.stats() //查看.oplog內容 > rs.printReplicationInfo() //查詢oplog的大小及儲存的操作記錄持續的時間長度
登出replication:相關啟動參數,並修改port連接埠號碼27028
# vim /etc/mongod2.conf
備份當前節點的所有oplog記錄
# mongodump --port 27028 --db local --collection ‘oplog.rs‘# mongo --port 27028> use local> db.oplog.rs.drop() //刪除原來的oplog> db.runCommand( { create: "oplog.rs", capped: true, size: (2 * 1024 * 1024 * 1024) } ) //建立新的> use admin> db.shutdownServer()
開啟replication:相關啟動參數,並修改port連接埠號碼27018
# vim /etc/mongod2.conf
mongod -f /etc/mongod2.confmongo //進入主節點
rs.stepDown() //讓出主節點位置
- 部署認證複製
在主節點建立root使用者
kgcrs:PRIMARY> use adminkgcrs:PRIMARY> db.createUser({"user":"root","pwd":"123","roles":["root"]})
產生4個執行個體的密鑰檔案
# cd /usr/bin/ # echo "kgcrs key"> kgcrskey1 # echo "kgcrs key"> kgcrskey2 # echo "kgcrs key"> kgcrskey3 # echo "kgcrs key"> kgcrskey4 # chmod 600 kgcrskey{1..4} # vim /etc/mongod.conf (mongod2.conf /mongod3.conf/mongod4.conf 都要改)security: keyFile: /usr/bin/kgcrskey1 //(分別為 kgcrskey2、kgcrskey3、kgcrskey4) clusterAuthMode: keyFile
4個執行個體依次重啟
# mongod -f /etc/mongod.conf --shutdown# mongod -f /etc/mongod.conf
進入主節點驗證
> show dbs #無法查看資料庫> rs.status() #無法查看複製集
> use admin #身份登入驗證> db.auth("root","123")> rs.status() #可以查看資料庫> show dbs #可以查看複製集
MongoDB複製集管理最佳化