mongo副本集總結(jié)

一、在同一臺(tái)機(jī)器上配置副本集

1.環(huán)境準(zhǔn)備

mongo的安裝什么的就不再贅述了。

這里建議使用mongo3.2以上的版本,3.2以上版本的WiredTiger引擎,性能更好,數(shù)據(jù)壓縮更好,同樣數(shù)據(jù)的情況下,3.2占用的空間僅為3.0版本的1/3。

需要先給每一個(gè)副本集建立一個(gè)data目錄。

cd /data

mkdir db0?db1?db2

(需要sudo權(quán)限的在mkdir前加上sudo)

同樣,需要給log文件建立log日志文件夾。

cd /var/log

mkdir mongolog0 mongolog2 mongolog3

(同理,有需要?jiǎng)t在mkdir前加上sudo)

2.副本集啟動(dòng)配置

mongod --fork --dbpath /data/db0 --logpath /var/log/mongolog/mongodb0.log --replSet example --port 27017

mongod --fork --dbpath /data/db1 --logpath /var/log/mongolog/mongodb1.log --replSet example --port 27018

mongod --fork --dbpath /data/db2 --logpath /var/log/mongolog/mongodb2.log --replSet example --port 27019

參數(shù)介紹:

--fork:后臺(tái)運(yùn)行(要注意的是,用到了“--fork”參數(shù)就必須啟用“--logpath”參數(shù),這是強(qiáng)制性的)

--logpath:日志的保存路徑

--dbpath:數(shù)據(jù)庫(kù)保存路徑

--port:打開(kāi)的端口號(hào)

--replSet:打開(kāi)副本集,后面帶的是副本集的名字

3.副本集的初始化

啟動(dòng)mongo:mongo(默認(rèn)端口號(hào)為27017)

在mongo shell中輸入:

rsconf={"_id":"example","members": [{"_id":0,"host":"127.0.0.1:27017"}]}

初始化副本集:rs.initiate(rsconf)

此時(shí)會(huì)出現(xiàn):example:PRIMARY>

添加其他成員:rs.add("127.0.0.1:27018")

? ? ? ? ? ? ? ? ? ? ? rs.add("127.0.0.1:27019")

查看副本集情況:rs.conf()

修改priority(當(dāng)主節(jié)點(diǎn)掛掉時(shí),該節(jié)點(diǎn)稱(chēng)為主節(jié)點(diǎn)的優(yōu)先級(jí)):cfg=rs.conf()

cfg.members[2].priority =2

添加仲裁節(jié)點(diǎn):rs.addArb("127.0.0.1:40000")(仲裁節(jié)點(diǎn)不持有數(shù)據(jù),但需要目錄來(lái)保存一些配置信息)

仲裁節(jié)點(diǎn)的作用:

通過(guò)實(shí)際測(cè)試發(fā)現(xiàn),當(dāng)整個(gè)副本集集群中達(dá)到50%的節(jié)點(diǎn)(包括仲裁節(jié)點(diǎn))不可用的時(shí)候,剩下的節(jié)點(diǎn)只能成為secondary節(jié)點(diǎn),整個(gè)集群只能讀不能寫(xiě)。比如集群中有1個(gè)primary節(jié)點(diǎn),2個(gè)secondary節(jié)點(diǎn),加1個(gè)arbit節(jié)點(diǎn)時(shí):當(dāng)兩個(gè)secondary節(jié)點(diǎn)掛掉了,那么剩下的原來(lái)的primary節(jié)點(diǎn)也只能降級(jí)為secondary節(jié)點(diǎn);當(dāng)集群中有1個(gè)primary節(jié)點(diǎn),1個(gè)secondary節(jié)點(diǎn)和1個(gè)arbit節(jié)點(diǎn),這時(shí)即使primary節(jié)點(diǎn)掛了,剩下的secondary節(jié)點(diǎn)也會(huì)自動(dòng)成為primary節(jié)點(diǎn)。因?yàn)橹俨霉?jié)點(diǎn)不復(fù)制數(shù)據(jù),因此利用仲裁節(jié)點(diǎn)可以實(shí)現(xiàn)最少的機(jī)器開(kāi)銷(xiāo)達(dá)到兩個(gè)節(jié)點(diǎn)熱備的效果。

移除成員:rs.remove("127.0.0.1:40000")

對(duì)原主節(jié)點(diǎn)進(jìn)行降級(jí):rs.stepDown(15)

tip:初始化操作只需要在一臺(tái)上mongo進(jìn)行即可,另外兩臺(tái)只需要被加入到集群中,不需要初始化操作,


二、權(quán)限模式

這里注意,需要現(xiàn)在無(wú)權(quán)限的模式下先創(chuàng)建好賬號(hào)密碼。

創(chuàng)建root賬號(hào)語(yǔ)句:

use admin;

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


創(chuàng)建好初始root賬號(hào)后,重啟mongo,開(kāi)啟權(quán)限模式。

開(kāi)啟權(quán)限模式的副本集時(shí)需要在啟動(dòng)時(shí)帶上參數(shù) --keyFile /mongo/keyfile

后面為keyfile的路徑

keyfile文件必須滿(mǎn)足條件:

(1)至少6個(gè)字符,小于1024字節(jié)

(2)認(rèn)證時(shí)候不考慮文件中空白字符

(3)連接到副本集的成員和mongos進(jìn)成的keyfile文件內(nèi)容必須一樣

(4)必須是base64編碼,但是不能有等號(hào)

(5)文件權(quán)限必須是x00,也就是說(shuō),不能分配任何權(quán)限給group成員和other成員

keyfile文件的生成:

openssl rand -base64 100 > /mongo/keyfile

chmod 600 /mongo/keyfile


三、在不同服務(wù)器上配置副本集

rsconf={"_id":"example","members": [{"_id":0,"host":"127.0.0.1:27017"}]}中不能寫(xiě)成127.0.0.1或者localhost,否則會(huì)不知道哪一臺(tái)才是localhost。需要寫(xiě)成ip地址。

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

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

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