一.什么是MongoDB副本集幸乒?
副本集是一組mongod維護相同數(shù)據(jù)集的實例,它提供了數(shù)據(jù)的冗余備份唇牧,并在多個服務器上存儲數(shù)據(jù)副本罕扎,提高了數(shù)據(jù)的可用性基茵, 并可以保證數(shù)據(jù)的安全性;還允許您從硬件故障和服務中斷中恢復數(shù)據(jù)壳影;實現(xiàn)自動故障轉移,還可以采用分布式方式讀取數(shù)據(jù)弥臼。
二.MongoDB副本集的原理宴咧?
mongodb的復制至少需要兩個節(jié)點。其中一個是主節(jié)點径缅,負責處理客戶端請求掺栅,其余的都是從節(jié)點,負責復制主節(jié)點上的數(shù)據(jù)纳猪。mongodb各個節(jié)點常見的搭配方式為:一主一從氧卧、一主多從。
主節(jié)點記錄在其上的所有操作oplog氏堤,從節(jié)點定期輪詢主節(jié)點獲取這些操作沙绝,然后對自己的數(shù)據(jù)副本執(zhí)行這些操作,從而保證從節(jié)點的數(shù)據(jù)與主節(jié)點一致鼠锈。
通過在不同數(shù)據(jù)庫服務器上提供多個數(shù)據(jù)副本闪檬,復制可提供一定級別的容錯功能,以防止丟失單個數(shù)據(jù)庫服務器购笆。
三.MongoDB副本集同步粗悯?
克隆除本地數(shù)據(jù)庫之外的所有數(shù)據(jù)庫。要克隆mongod掃描每個源數(shù)據(jù)庫中的每個集合同欠,并將所有數(shù)據(jù)插入到這些集合的自己的副本中样傍。版本3.4中已更改:初始同步會在為每個集合復制文檔時構建所有集合索引。在早期版本的MongoDB中铺遂,僅
_id
在此階段構建索引衫哥。初始同步在數(shù)據(jù)復制期間提取新添加的oplog記錄。確保目標成員在local
數(shù)據(jù)庫中有足夠的磁盤空間娃循,以便在此數(shù)據(jù)復制階段的持續(xù)時間內(nèi)臨時存儲這些oplog記錄炕檩。-
將所有更改應用于數(shù)據(jù)集。使用源中的oplog捌斧,mongod更新其數(shù)據(jù)集以反映副本集的當前狀態(tài)笛质。
四.部署MongoDB副本集的注意事項
- 如果可能妇押,請使用邏輯DNS主機名而不是IP地址,尤其是在配置副本集成員或分片集群成員時姓迅。邏輯DNS主機名的使用避免了由于IP地址更改而導致的配置更改敲霍。
- IP綁定 3.6版本之后才默認綁定地址為localhost俊马,所以最好還是配置--bind-ip參數(shù),如若綁定的非本地計算機肩杈,請確保已保護您的群集免受未經(jīng)授權的訪問柴我,最好考慮啟用身份驗證和 強化網(wǎng)絡基礎架構
- 確保網(wǎng)絡流量可以在集合的所有成員和網(wǎng)絡中的所有客戶端之間安全地傳遞
1.建立虛擬專用網(wǎng)絡。確保您的網(wǎng)絡拓撲通過局域網(wǎng)路由單個站點內(nèi)的成員之間的所有流量扩然。
2.配置訪問控制以防止從未知客戶端到副本集的連接艘儒。
3.配置網(wǎng)絡和防火墻規(guī)則,以便僅在默認的MongoDB端口上允許傳入和傳出的數(shù)據(jù)包夫偶,并且僅在部署中允
- 最好部署具有已啟用訪問控制的副本集
- 備份數(shù)據(jù)庫在備份時會出現(xiàn)一定的延遲
- 啟動MongoDB 需以副本集模式啟動
- 備份數(shù)據(jù)庫必須設置votes 值為1才擁有選舉成為Primary服務器的可能
五.MongoDB副本集的需要哪些資源配置界睁?
一臺安裝好MongoDB 的服務器 192.168.1.1
或者
三臺安裝好MongoDB 的服務器 192.168.1.1 192.168.1.2 192.168.1.3
網(wǎng)絡處于可使用狀態(tài)
六.部署MongoDB副本集
1. 設置配置文件
通過 --replSet 和 --bind_ip 命令行選項指定副本集名稱和ip綁定
語法:mongod --replSet "rs0" -- bind_ip localhost,<hostname ( s )| ip address ( es ) >
或者使用配置文件指定 replica set name 和 ip addresses
systemLog
path: /var/log/mongodb/mongodb.log
storage
dbPath: /var/lib/mongo-res1
journal:
enabled: true
replication:
replSetName : rs0
net :
bindIp : localhost兵拢,<hostname(s)| ip address(es)>
配置參數(shù)含義:
replSet:設置Replica Set的name翻斟,在各個配置文件中,其值必須相同说铃。
dbpath:MongoDB用于存儲數(shù)據(jù)的目錄访惜,默認值是C:\data\db
bind_ip 指定ip
path:用于記錄mongod的日志數(shù)據(jù)
port:指定MongoDB監(jiān)聽的端口,默認值是27017
然后要使用配置文件啟動MongoDB實例 腻扇,使用 --config 選項指定配置文件的路徑疾牲。
mongod --config <path-to-config>
三個實例啟動完畢后,查看 ps -ef|grep mongo
2.使用 mongoDB shell 連接到其中一個 mongod 實例
mongo --host 192.168.1.1 --port 27017
3.啟動副本集
使用 rs.initiate() 來指定副本集的所有成員
rs.initiate({
_id : "rs0",
members :[
{ _id : 0 , host: "192.168.1.1:27017"},
{ _id : 1 , host: "192.168.1.1:27019"},
{ _id : 2 , host: "192.168.1.1:27019"}
]
})
4.查看副本集配置
rs.conf()
5.查看副本集主副本信息
rs.status()
七.應用MongoDB副本集
嘗試關閉主節(jié)點
db.shutdownServer();
或者使用kill 端口的方式
然后再查看剩下的兩個副節(jié)點是否有一個成為新的節(jié)點
stateStr : "PRIMARY" 就是主節(jié)點