MongoDB數據庫——MongoDB複製集

MongoDB複製集

什麼是MongoDB複製集?

複製集是由一組擁有相同數據集的mongodb實例所組成的集羣,在多臺服務器之間同步數據,(差不多跟MySQL的主從複製一個概念)

複製集的優點:1.數據安全性更高,災難恢復

                          2.數據可用性大,無需停機維護(比如備份、索引重建、故障轉移)

                          3.讀縮放(額外的副本讀取),副本集對應用程序是透明的

複製集的工作原理(如下圖所示)

MongoDB的複製集由多個節點構成(至少兩個節點),其中一個是主節點,負責處理客戶端的請求,其餘的都是從節點,負責複製主節點上的數據

MongoDB一般由一主一從或者一主多從的方式搭配,主節點記錄所有操作到oplog上,從節點再定期輪詢主節點獲取這些操作,然後對自己的數據副本執行這些操作,保證和主節點的數據保持一致

複製集的選舉原理

節點類型分爲三種:

標準節點(host):存儲數據,可能被選爲活躍(primary)節點,有選舉權

被動節點(passive):被動節點有完整副本,不可能成爲活躍節點,有選舉權

仲裁節點(arbiter):負責選舉,不存儲數據,不能充當主從節點

選舉的規則:

1.只有標準節點纔會被選舉爲活躍節點(passive),有選舉權,被動節點有完整副本,但是不能被選舉爲活躍節點,有選舉權,仲裁節點不會複製數據,不可能被選舉成爲活躍節點,只有選舉權

2.標準節點和被動節點的區別:priority的值高的是標準節點,低的是被動節點

3.選舉最後得票高的人獲勝,priority的優先權爲0~1000之間,相當於額外增加這麼多票

配置搭建MongoDB複製集

1.下載安裝完MongoDB後創建4個實例並啓動(如下圖所示)

2.編輯主配置文件

vim /usr/local/mongodb/bin/mongodb1.conf

注意:replSet這個參數的值後面會使用到

其他的配置文件修改一下port、dbpath、logpath參數即可

3.初始化配置複製集並登錄

alias mongo="/usr/local/mongodb/bin/mongo"mongo

> cfg={"_id":"wmz","members":[{"_id":0,"host":"192.168.0.102:27017"},{"_id":1,"host":"192.168.0.102:27018"},
{"_id":2,"host":"192.168.0.102:27019"}]}

補充:可以在配置的時候設置節點,比如

> cfg={"_id":"wmz","members":[{"_id":0,"host":"192.168.0.102:27017","priority":100},{"_id":1,"host":"192.168.0.102:27018","priority":100},
{"_id":2,"host":"192.168.0.102:27019","priority":0},{"_id":2,"host":"192.168.0.102:27019","arbiterOnly":true}]}

重新設置複製集:> rs.reconfig()

查看複製集的選舉狀態:> rs.isMaster()

4.查看複製集狀態信息:> rs.status()

PRIMARY的狀態:

兩個SECONDARY的狀態

注意:health1代表健康0代表宕機state1代表主節點,爲2代表從節點

5.手動添加節點:> rs.add()

添加成功如下圖:

刪除節點:> rs.remove()

刪除成功如下圖:

5.測試故障自動轉移

停止mongodb1的運行

/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb1.conf --shutdown

確定27017端口的主節點停止

登錄27018端口登錄進入MongoDB數據庫查看狀態

mongo --port 27018

發現192.168.0.102:27018變成了主節點PRIMARY則說明成功

模擬故障還可以使用下面的命令

rs.freeze(30)      //暫停30s不參與選舉
rs.stepDown(60,30)   //告訴主節點交出主節點位置,維持從節點狀態不少於60秒,等待30秒使主節點和從節點日誌同步

從節點默認無法讀取數據:> rs.slaveOK()

複製集的管理

手動添加刪除節點服務器

> rs.add()和> rs.remove()

查看複製狀態信息

> rs.printReolicationInfo()

> rs.printSlaveReplicationInfo()

oplog日誌

查看日誌狀態信息:> db.oplog.rs.stats()

更改oplog的大小:> db.runCommand()

複製集認證

認證方式:

通過配置auth參數來開啓權限認證,但這種認證方式只適合單機節點,當我們使用複製集時應該怎麼開啓權限認證來保證複製集的

單點認證

vim /usr/local/mongodb/bin/mongodb1.conf

auth=true

keyFile認證

1.修改配置文件:vim /usr/local/mongodb/bin/mongodb1.conf

clusterAuthMode=keyFile

keyFile=/usr/local/mongodb/.keyFile

2.創建kgcrskey文件加入內容

touch /usr/local/mongodb/.keyFile

3.配置keyFile文件再給權限

文件中的具體內容其實就是一行字符串,但複製集對keyFile文件有所要求

內容:以base64編碼集中中的字符進行編寫,即字符串只能包含a-z、A-Z、+、/

長度不能超過1000字節

權限最多到600 ,權限至少 chmod 600 keyFile

openssl rand -base64 102 > /usr/local/mongodb/.keyFile

chmod 600 /usr/local/mongodb/.keyFile 

注意:每個節點都要進行該操作

 

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