(四)復制集

1、什么是復制集

? ? 介紹

? ? 一個復制集里至少包含一個主節(jié)點。如下圖中,三個節(jié)點,寫操作只能從主節(jié)點操作。主節(jié)點收到數(shù)據(jù)操作時,會將操作記錄在操作日志里。所有的從節(jié)點都會在數(shù)據(jù)同步的過程中,從主節(jié)點讀取操作日志,從而保證從節(jié)點和主節(jié)點的數(shù)據(jù)統(tǒng)一。操作日志的相關(guān)設置參見:https://docs.mongodb.com/manual/core/replica-set-oplog/

????選舉機制

????????當主節(jié)點發(fā)生故障時,復制集會通過選舉協(xié)議(https://docs.mongodb.com/manual/core/replica-set-elections/)選舉產(chǎn)生一個新的主節(jié)點。在選舉的過程中,因為沒有主節(jié)點,其他的節(jié)點只能讀數(shù)據(jù),數(shù)據(jù)庫是不接受寫操作的。

復制集結(jié)構(gòu)圖

? ? 帶仲裁節(jié)點復制集

有時候為了保證復制集的可用性,專門設置一個仲裁節(jié)點。這個節(jié)點的主要作用是決定其他節(jié)點是主節(jié)點還是從節(jié)點,這個節(jié)點不存儲數(shù)據(jù)。當主節(jié)點掛掉后,仲裁節(jié)點將從其他從節(jié)點中選出一個主節(jié)點,集合新加入節(jié)點后,由仲裁節(jié)點決定是主節(jié)點還是從節(jié)點。

復制集(一個節(jié)點做仲裁)

2、免認證方式啟動三個服務

????啟動服務1:

mongod -f ./mongod.conf? ??

????mongod.conf:

systemLog:

? destination: file

? path: /usr/local/var/log/mongodb/mongo.log

? logAppend: true

storage:

? dbPath: /usr/local/var/mongodb

net:

? bindIp: 127.0.0.1

? port: 27017

processManagement:

? fork: true

replication:

? replSetName: fyh


????啟動服務2:

mongod -f ./mongod1.conf? ?

????mongod1.conf:?

systemLog:

? destination: file

? path: /usr/local/var/log/mongodb/mongo1.log

? logAppend: true

storage:

? dbPath: /usr/local/var/mongodb1

net:

? bindIp: 127.0.0.1

? port: 27017

processManagement:

? fork: true

replication:

? replSetName: fyh

????啟動服務3:

mongod -f ./mongod2.conf? ?

????mongod2.conf?:

systemLog:

? destination: file

? path: /usr/local/var/log/mongodb/mongo2.log

? logAppend: true

storage:

? dbPath: /usr/local/var/mongodb2

net:

? bindIp: 127.0.0.1

? port: 27017

processManagement:

? fork: true

replication:

? replSetName: fyh

注意:配置中的路徑需要提前創(chuàng)建,否則啟動失敗

3、啟動復制集

? ? 1)連接其中一個客戶端

mongo localhost:27017

? ? 2)配置復制集

https://docs.mongodb.com/manual/reference/replica-configuration/

config_fyh = {_id:"fyh", members: [{_id: 0, host:"localhost:27017"},{_id: 1, host: "localhost:27018"},{_id: 2, host: "localhost:27019", arbiterOnly: true}]}

其中?arbiterOnly: true 是將節(jié)點設置成仲裁節(jié)點

? ? 3)啟動復制集

>rs.initiate(config_fyh)

{ "ok" : 1 }

? ? 4)查看狀態(tài)

>rs.status()

? ? 5)創(chuàng)建用戶密碼

>use admin

>db.createUser({user: "admin", pwd: "admin", roles: [{role:"userAdminAnyDatabase", db: "admin"}]})

>use process

>db.createUser({user: "process", pwd: "process", roles: [{role:"readWrite", db: "process"}]})

? ? 6)以安全模式啟動:

上邊的配置中添加安全配置如下:

security:

? keyFile: /usr/local/etc/mongodbConf/key

? authorization: enabled

其中key是三個進程間通信使用的加密秘鑰

echo "password" >?/usr/local/etc/mongodbConf/key

注意:這個密鑰文件不能有群組或者其他人訪問的權(quán)限,否則服務獎無法啟動,需要改變其權(quán)限

chmod 400?/usr/local/etc/mongodbConf/key

? ? 7)連接復制集

mongo localhost:27017/process -u process -p process

4、復制集自動故障轉(zhuǎn)移

? ? 1)查看mongod進程

ps aux |grep mongod


????2)殺死主進程

kill 19780

????3)連接數(shù)據(jù)庫,查看復制集狀態(tài)

mongo localhost:27018

>rs.status()

可以看到原來的主節(jié)點進程(27017端口)掛了,原來的從節(jié)點變成了主節(jié)點。

? ? 4)重啟殺死的進程并查看復制集狀態(tài)

mongod -f ./mongod.conf

>rs.status()

從結(jié)果可以看出27017端口的進程變成了從節(jié)點。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容