您好,登錄后才能下訂單哦!
什么是MongoDB復(fù)制集?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
一、mongo復(fù)制集簡(jiǎn)介
近年來,隨著大數(shù)據(jù)越來越火,非關(guān)系型數(shù)據(jù)庫的重要性被越來越多的人所認(rèn)知,越來越多的開發(fā)者逐漸加入到NoSQL的陣營(yíng)中。我們知道NoSQL是Not Only SQL的意思,既然如此,很多關(guān)系型數(shù)據(jù)庫所支持的特性在非關(guān)系型數(shù)據(jù)中也是同樣適用,比如復(fù)制集。
MongoDB是支持?jǐn)?shù)據(jù)復(fù)制的,它在復(fù)制集方面的優(yōu)勢(shì)與其他數(shù)據(jù)復(fù)制集一樣,它通過將數(shù)據(jù)部署在多個(gè)不同的服務(wù)器上,防止因單機(jī)故障而造成數(shù)據(jù)的丟失,借助數(shù)據(jù)冗余來提高數(shù)據(jù)的可靠性和安全性。而且還可以通過復(fù)制技術(shù)構(gòu)建分布式數(shù)據(jù)庫,提高系統(tǒng)的訪問性能和安全性。
MongoDB的復(fù)制集模式是主從復(fù)制。在所有的數(shù)據(jù)庫服務(wù)的機(jī)器中,只有一臺(tái)機(jī)器擔(dān)當(dāng)Primary角色,其余的機(jī)器均是Secondaries。擔(dān)當(dāng)Primary角色的機(jī)器接收所有來自客戶端的寫(Write)操作請(qǐng)求,并完成該操作,從而保證了數(shù)據(jù)的一致性。擔(dān)當(dāng)Primary角色的機(jī)器還能夠把來自客戶端的讀(Read)操作分配給其他機(jī)器(Secondaries),減輕主數(shù)據(jù)庫服務(wù)器的壓力。
二、復(fù)制集創(chuàng)建和配置
1.如果之前開了mongo的服務(wù),那么首先要結(jié)束掉mongo的服務(wù)
cmd:pkill -9 mongo
2.刪除掉之前的dbs和log
cmd:rm -rf /home/m*
3.在三臺(tái)機(jī)器上分別配置dbs和log(這里使用一臺(tái)設(shè)備模擬三臺(tái)設(shè)備做復(fù)制集,所以在一臺(tái)設(shè)備上創(chuàng)建了三個(gè)數(shù)據(jù)庫地址以及日志存放路徑。)
mkdir -p /home/m17 /home/m18 /home/m19 /home/mlog
4.啟動(dòng)三個(gè)實(shí)例,并且申明屬于同一個(gè)復(fù)制集
①、首先要切換到mongodb目錄下,在執(zhí)行下面的命令。
②、啟動(dòng)三個(gè)實(shí)例
./bin/mongod --dbpath /home/m17 --logpath /home/mlog/m17.log --fork --port 27017 --replSet fmong --journal --smallfiles -storageEngine=mmapv1
--dbpath:指定數(shù)據(jù)庫路徑
--logpath:指定日志存放路徑
--fork:后臺(tái)運(yùn)行
--port:設(shè)置啟動(dòng)的端口
--replSet:設(shè)置同一個(gè)復(fù)制集,復(fù)制集的名稱自定義
--journal:32linux需要這個(gè)參數(shù)才能啟動(dòng),64位不需要這個(gè)參數(shù)
--smallfiles:?jiǎn)?dòng)時(shí)占用較小的空間,如果空間不是很缺少,一般不需要這個(gè)參數(shù)
-storageEngine:設(shè)置數(shù)據(jù)庫的引擎,由于不支持wiredTiger引擎,需要切換支持的引擎,64位系統(tǒng)不需要切換引擎。
三個(gè)數(shù)據(jù)實(shí)例啟動(dòng)成功截圖:
③、查看三個(gè)實(shí)例啟動(dòng)成功。
5、配置復(fù)制集文件,并初始化復(fù)制集
①、首先進(jìn)入任意一個(gè)實(shí)例的mongo客戶端命令模式
./bin/mongo
②、切換到admin
③、定義變量
var rsconf ={ _id:'fmong', members:[ { _id:0, host:'192.168.135.1:27017' }, { _id:1, host:'192.168.135.1:27018' }, { _id:2, host:'192.168.135.1:27019' } ] }
查看變量是否生成打印變量名稱: printjson(rsconf)
④、根據(jù)上面的配置做初始化:rs.initiate(rsconf)
⑤、查看初始化成功后,各個(gè)節(jié)點(diǎn)的狀態(tài):rs.status()
6、節(jié)點(diǎn)的增加與刪除操作
①、刪除節(jié)點(diǎn):rs.remove('子節(jié)點(diǎn)的host:port')
②、查看刪除節(jié)點(diǎn)后的復(fù)制集節(jié)點(diǎn)狀態(tài):rs.status()
③、增加節(jié)點(diǎn):rs.add('子節(jié)點(diǎn)的host:port')(注意:使用增加節(jié)點(diǎn)命令添加的host必須是上面配置復(fù)制集變量包含的host在內(nèi)的才可以添加,如果沒有包含的host是添加不進(jìn)去的。如果想添加沒有包含的host需要修改復(fù)制集變量,才可以添加。)
7、修改復(fù)制集的節(jié)點(diǎn)變量和初始化
①、修改之前的復(fù)制集變量,只需要修改里面的host子節(jié)點(diǎn)即可。例如:將三臺(tái)設(shè)備修改為兩臺(tái)設(shè)備。
②、修改完的變量,初始化要使用reconfig方法。
三、復(fù)制集添加數(shù)據(jù)
①、在主節(jié)點(diǎn)上添加一條數(shù)據(jù)。
②、退出主節(jié)點(diǎn),進(jìn)入子節(jié)點(diǎn)
③、查看子節(jié)點(diǎn)數(shù)據(jù),如果發(fā)現(xiàn)報(bào)錯(cuò)為
原因:子節(jié)點(diǎn)只能和主節(jié)點(diǎn)通信,別人不能操作,需要將slaveOK改為可操作。需要執(zhí)行如下命令:
rs.slaveOk()
查看數(shù)據(jù),已經(jīng)同步到27018子節(jié)點(diǎn)上。
四、模擬主節(jié)點(diǎn)宕機(jī),啟動(dòng)子節(jié)點(diǎn)為主節(jié)點(diǎn)
①、首先在主節(jié)點(diǎn)命令下,切換到admin數(shù)據(jù)庫,然后執(zhí)行關(guān)閉主節(jié)點(diǎn)。
②、登錄子節(jié)點(diǎn)
看完上述內(nèi)容,你們掌握什么是MongoDB復(fù)制集的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。