一、概述
?????? 1、 MongoDB復制集(MongoDB Replica Set)是MongoDB提供的一種高可用性和數(shù)據(jù)冗余的解決方案。它由多個MongoDB實例組成,其中一個作為主節(jié)點(Primary),其他節(jié)點則扮演從節(jié)點(Secondary)的角色。主節(jié)點處理所有的寫操作和客戶端請求,而從節(jié)點負責復制主節(jié)點的數(shù)據(jù)并提供讀操作的能力。
?????? 2、 復制集的主要目標是提供數(shù)據(jù)的冗余和故障恢復的能力。當主節(jié)點發(fā)生故障或不可用時,復制集會自動選舉出一個新的主節(jié)點來接管主節(jié)點的職責,保證系統(tǒng)的可用性。一旦原先的主節(jié)點恢復,它會以從節(jié)點的身份重新加入復制集,同步最新的數(shù)據(jù)。
??????? 3、在復制集中,數(shù)據(jù)同步是通過Oplog(操作日志)來實現(xiàn)的。主節(jié)點會記錄所有的寫操作,并將其順序保存在Oplog中。從節(jié)點通過讀取Oplog中的操作來進行數(shù)據(jù)的復制和同步。
?????? 4、 復制集還提供了其他一些功能,如自動故障檢測和恢復、自動故障轉(zhuǎn)移、讀寫分離等。通過配置合適的副本集成員和選舉優(yōu)先級,可以實現(xiàn)不同的數(shù)據(jù)治理策略和故障容錯能力。
??????? 5、要配置一個MongoDB復制集,需要在MongoDB配置文件中指定每個節(jié)點的相關配置,包括主節(jié)點和從節(jié)點的IP地址、端口號、復制集名稱等。在啟動MongoDB實例時,指定配置文件即可。一旦復制集的節(jié)點都啟動成功,系統(tǒng)會自動進行選舉并形成一個復制集。
??????? 6、MongoDB復制集提供了高可用性、數(shù)據(jù)冗余和故障恢復的能力,是在生產(chǎn)環(huán)境中常用的部署架構之一。通過使用復制集,可以保證MongoDB數(shù)據(jù)庫在單節(jié)點故障或部分故障的情況下仍然可用,并提供更好的讀寫性能和數(shù)據(jù)冗余。
二、工作原理
????????1. 節(jié)點角色:一個MongoDB復制集由多個節(jié)點組成,其中一個節(jié)點被選舉為主節(jié)點(Primary),其他節(jié)點則扮演從節(jié)點(Secondary)的角色。主節(jié)點負責處理所有的寫操作和客戶端請求,從節(jié)點負責復制主節(jié)點的數(shù)據(jù)并提供讀操作。
????????2. 選舉過程:復制集的選舉過程在初始啟動或主節(jié)點故障時發(fā)生。當一個節(jié)點檢測到主節(jié)點不可用時,它會發(fā)起一次選舉。選舉過程包括以下步驟:
?? - 節(jié)點發(fā)出選舉請求,向其他節(jié)點發(fā)送投票請求。
?? - 其他節(jié)點接收到投票請求后,檢查自己的選舉條件,如節(jié)點狀態(tài)、投票狀態(tài)等。
?? - 如果節(jié)點滿足選舉條件,它會將投票回復給發(fā)起選舉的節(jié)點。
?? - 發(fā)起選舉的節(jié)點會等待一定數(shù)量的投票回復,如果它獲得了足夠多的投票(超過半數(shù)),則成為新的主節(jié)點。
????????3. 數(shù)據(jù)復制和同步:主節(jié)點負責記錄所有的寫操作并將其順序保存在Oplog(操作日志)中。從節(jié)點通過讀取Oplog中的操作來進行數(shù)據(jù)的復制和同步。復制包括兩個階段:
?? - 初始同步(Initial Sync):當一個從節(jié)點加入復制集時,它會從主節(jié)點復制所有的數(shù)據(jù)。主節(jié)點會將數(shù)據(jù)以數(shù)據(jù)文件(Data File)的形式發(fā)送給從節(jié)點,從節(jié)點按照順序?qū)懭氲奖镜卮疟P中。初始同步完成后,從節(jié)點與主節(jié)點的數(shù)據(jù)將保持同步。
?? - 增量同步(Incremental Sync):一旦從節(jié)點完成初始同步,它會通過讀取Oplog中的寫操作來實現(xiàn)與主節(jié)點的增量同步。主節(jié)點將新的寫操作追加到Oplog中,從節(jié)點定期讀取Oplog并將相應的操作應用到本地數(shù)據(jù)中,使得它與主節(jié)點的數(shù)據(jù)保持一致。
????????4. 自動故障檢測和恢復:復制集支持自動故障檢測和恢復功能。當主節(jié)點故障或不可用時,復制集會自動進行主節(jié)點選舉,從而選擇一個新的主節(jié)點來接管主節(jié)點的職責。一旦原先的主節(jié)點恢復,它會以從節(jié)點的身份重新加入復制集,同步最新的數(shù)據(jù)。
三、安裝部署
下載連接
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.6.tgz
創(chuàng)建mongodb文件夾
mkdir /usr/local/mongodb
指定解壓路徑
tar xf mongodb-linux-x86_64-rhel70-4.0.6.tgz -C /usr/local/mongodb
創(chuàng)建軟連接
ln -s /usr/local/mongodb/bin/* /bin/
創(chuàng)建數(shù)據(jù)目錄
mkdir -p /data/mongodb1
創(chuàng)建日志目錄
mkdir -p /data/logs/mongodb
創(chuàng)建日志文件
touch /data/logs/mongodb/mongodb1.log
編寫啟停腳本
vim /etc/init.d/mongodb
#!/bin/bash
INSTANCE=$1
ACTION=$2
case "$ACTION" in
'start')
/usr/local/mongodb/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf;;
'stop')
/usr/local/mongodb/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf --shutdown;;
'restart')
/usr/local/mongodb/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf --shutdown
/usr/local/mongodb/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf;;
esac
?文章來源地址http://www.zghlxwxcb.cn/news/detail-537398.html
給腳本賦予執(zhí)行權限
chmod +x /etc/init.d/mongodb
編寫配置文件
cd /usr/local/mongodb/
mkdir conf 創(chuàng)建配置文件目錄
vim conf/mongodb1.conf 創(chuàng)建配置文件
port=27017 監(jiān)聽端口
dbpath=/data/mongodb1 指定數(shù)據(jù)目錄
logpath=/data/logs/mongodb/mongodb1.log 指定日志文件路徑
logappend=true 允許寫入日志
fork=true 允許創(chuàng)建子進程
maxConns=5000 最大連接數(shù)
storageEngine=mmapv1 存儲引擎
?
啟動命令
/etc/init.d/mongodb mongodb1 start
停止命令
/etc/init.d/mongodb mongodb1 stop
四、創(chuàng)建復制集
vim /usr/local/mongodb/conf/mongodb1.conf
port=27017
dbpath=/data/mongodb1
logpath=/data/logs/mongodb/mongodb1.log
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
slowms=1 開啟慢查詢閾值
profile=1 開啟查詢分析
replSet=722207 集群名字 隨意取
在復制四份配置文件只修改配置文件中的端口號,數(shù)據(jù)文件目錄,日志文件路徑
?
?
?
mkdir /data/mongodb{1..4} -p 創(chuàng)建四個數(shù)據(jù)文件目錄
mkdir /data/logs/mongodb -p 創(chuàng)建日志文件目錄
touch /data/logs/mongodb/mongodb{1..4}.log 創(chuàng)建四個日志文件
chmod 777 /data/logs/mongodb/mongodb* 賦予日志所有權限
啟動四個mongodb
/etc/init.d/mongodb mongodb1 start
/etc/init.d/mongodb mongodb2 start
/etc/init.d/mongodb mongodb3 start
/etc/init.d/mongodb mongodb4 start
netstat -anputl | grep mongodb 查看端口
?五、測試
進入mongodb查看
查看節(jié)點信息 rs.status()
?配置復制集
cfg={"_id":"722207","members":[{"_id":0,"host":"127.0.0.1:27017"},{"_id":1,"host":"127.0.0.1:27018"},{"_id":2,"host":"127.0.0.1:27019"}]}
查看復制集狀態(tài) rs.status()
在這里需要注意兩條
"health" : 1, //1為健康,0為宕機
"state" : 1, //1為主,2為從
?添加27020節(jié)點 ?rs.add("127.0.0.1:27020")
關閉主節(jié)點27017主節(jié)點 模擬故障
進入27018查看信息
可以看到27020節(jié)點變成了主節(jié)點
?
六、復制集選舉原理
1、復制的原理
MongoDB復制是基于操作日志oplog實現(xiàn),oplog相當于mysql中的二進制日志,只記錄數(shù)據(jù)發(fā)生的改變操作。
2、選舉的原理
(1)節(jié)點類型:標準節(jié)點,被動節(jié)點,仲裁節(jié)點
????????①、只有標準節(jié)點可能被選舉為活躍(主)節(jié)點,有選舉權
????????②、被動節(jié)點有完整副本,不可能成為活躍節(jié)點,有選舉權
????????③、仲裁節(jié)點不復制數(shù)據(jù),不可能成為活躍節(jié)點,只有選舉權
(2)標準節(jié)點與被動節(jié)點的區(qū)別
????????priority值高者是標準節(jié)點,低者則為被動節(jié)點
(3)選舉規(guī)則
票數(shù)高者獲勝,priority是優(yōu)先權0-1000值,相當于額外增加0-1000的票數(shù)。
選舉結(jié)果:票數(shù)高者獲勝;若票數(shù)相同,數(shù)據(jù)新者獲勝。
3、修改選舉優(yōu)先權(設置兩個主節(jié)點、一個從節(jié)點、一個仲裁節(jié)點)
重新停啟mongodb
mongo進入mongodb
設置27017、27018為主節(jié)點、27019為從節(jié)點、27020為仲裁節(jié)點
cfg={"_id":"722207","protocolVersion":1,"members":[{"_id":0,"host":"127.0.0.1:27017","priority":100}, {"_id":1,"host":"127.0.0.1:27018","priority":100}, {"_id":2,"host":"127.0.0.1:27019","priority":0}, {"_id":3,"host":"127.0.0.1:27020","arbiterOnly":true}]}
創(chuàng)建完成后查看集群狀態(tài)如果出現(xiàn)了報錯下面的錯誤需要刪除27020這個節(jié)點
再重新添加
?rs.remove('127.0.0.1:27020')刪除這個節(jié)點
rs.add('127.0.0.1:27020')再次添加這個節(jié)點
再次進行節(jié)點設置
?再次查看集群狀態(tài)
?查看主節(jié)點是誰
?現(xiàn)在再來把27017給停掉
可以看到27018變成了主服務器
?再次把27018停掉查看情況
可以看到27017成為了主服務器
角色設置生效后只有主節(jié)點才會成為主服務器、從服務器和仲裁服務不會參與主節(jié)點的競選
文章來源:http://www.zghlxwxcb.cn/news/detail-537398.html
?
以上就是mongodb復制集的配置
如有錯誤歡迎各位大佬批評指正,我們共同進步
到了這里,關于小白到運維工程師自學之路 第四十六集 (mongodb復制集)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!