MongoDB已經(jīng)成為市面上最知名的 NoSQL 數(shù)據(jù)庫(kù)。MongoDB是面向文檔的,它的無(wú)模式設(shè)計(jì)使得它在各種各樣的WEB 應(yīng)用當(dāng)中廣受歡迎。最讓我喜歡的特性之一是它的副本集(Replica Set),副本集將同一數(shù)據(jù)的多份拷貝放在一組 mongod 節(jié)點(diǎn)上,從而實(shí)現(xiàn)數(shù)據(jù)的冗余以及高可用性。
成都創(chuàng)新互聯(lián)是專(zhuān)業(yè)的埇橋區(qū)網(wǎng)站建設(shè)公司,埇橋區(qū)接單;提供網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行埇橋區(qū)網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!這篇教程將向你介紹如何配置一個(gè) MongoDB 副本集。
副本集的最常見(jiàn)配置需要一個(gè)主節(jié)點(diǎn)以及多個(gè)副節(jié)點(diǎn)。這之后啟動(dòng)的復(fù)制行為會(huì)從這個(gè)主節(jié)點(diǎn)到其他副節(jié)點(diǎn)。副本集不止可以針對(duì)意外的硬件故障和停機(jī)事件對(duì)數(shù)據(jù)庫(kù)提供保護(hù),同時(shí)也因?yàn)樘峁┝烁嗟墓?jié)點(diǎn)從而提高了數(shù)據(jù)庫(kù)客戶(hù)端數(shù)據(jù)讀取的吞吐量。
配置環(huán)境
這個(gè)教程里,我們會(huì)配置一個(gè)包括一個(gè)主節(jié)點(diǎn)以及兩個(gè)副節(jié)點(diǎn)的副本集。
為了達(dá)到這個(gè)目的,我們使用了3個(gè)運(yùn)行在 VirtualBox 上的虛擬機(jī)。我會(huì)在這些虛擬機(jī)上安裝 Ubuntu 14.04,并且安裝 MongoDB 官方包。
我會(huì)在一個(gè)虛擬機(jī)實(shí)例上配置好所需的環(huán)境,然后將它克隆到其他的虛擬機(jī)實(shí)例上。因此,選擇一個(gè)名為 master 的虛擬機(jī),執(zhí)行以下安裝過(guò)程。
首先,我們需要給 apt 增加一個(gè) MongoDB 密鑰:
$ sudo apt-key adv--keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
然后,將官方的 MongoDB 倉(cāng)庫(kù)添加到 source.list 中:
$ sudo su
# echo "debhttp://repo.mongodb.org/apt/ubuntu "$(lsb_release-sc)"/mongodb-org/3.0 multiverse" | sudo tee/etc/apt/sources.list.d/mongodb-org-3.0.list
接下來(lái)更新 apt 倉(cāng)庫(kù)并且安裝 MongoDB。
$ sudo apt-get update
$ sudo apt-get install -ymongodb-org
現(xiàn)在對(duì) /etc/mongodb.conf 做一些更改
auth = true
dbpath=/var/lib/mongodb
logpath=/var/log/mongodb/mongod.log
logappend=true
keyFile=/var/lib/mongodb/keyFile
replSet=myReplica
第一行的作用是表明我們的數(shù)據(jù)庫(kù)需要驗(yàn)證才可以使用。keyfile配置用于 MongoDB 節(jié)點(diǎn)間復(fù)制行為的密鑰文件。replSet為副本集設(shè)置一個(gè)名稱(chēng)。
接下來(lái)我們創(chuàng)建一個(gè)用于所有實(shí)例的密鑰文件。
$ echo -n"MyRandomStringForReplicaSet" | md5sum > keyFile
這將會(huì)創(chuàng)建一個(gè)含有 MD5 字符串的密鑰文件,但是由于其中包含了一些噪音,我們需要對(duì)他們清理后才能正式在 MongoDB 中使用。
$ echo -n"MyReplicaSetKey" | md5sum|grep -o "[0-9a-z]\+" >keyFile
grep命令的作用的是把將空格等我們不想要的內(nèi)容過(guò)濾掉之后的 MD5 字符串打印出來(lái)。
現(xiàn)在我們對(duì)密鑰文件進(jìn)行一些操作,讓它真正可用。
$ sudo cp keyFile/var/lib/mongodb
$ sudo chown mongodb:nogroupkeyFile
$ sudo chmod 400 keyFile
接下來(lái),關(guān)閉此虛擬機(jī)。將其 Ubuntu 系統(tǒng)克隆到其他虛擬機(jī)上。
這是克隆后的副節(jié)點(diǎn)1和副節(jié)點(diǎn)2。確認(rèn)你已經(jīng)將它們的MAC地址重新初始化,并且克隆整個(gè)硬盤(pán)。
請(qǐng)注意,三個(gè)虛擬機(jī)示例需要在同一個(gè)網(wǎng)絡(luò)中以便相互通訊。因此,我們需要它們弄到“互聯(lián)網(wǎng)"上去。
這里推薦給每個(gè)虛擬機(jī)設(shè)置一個(gè)靜態(tài) IP 地址,而不是使用 DHCP。這樣它們就不至于在 DHCP 分配IP地址給他們的時(shí)候失去連接。
像下面這樣編輯每個(gè)虛擬機(jī)的 /etc/networks/interfaces文件。
在主節(jié)點(diǎn)上:
auto eth2
iface eth2 inet static
address 192.168.50.2
netmask 255.255.255.0
在副節(jié)點(diǎn)1上:
auto eth2
iface eth2 inet static
address 192.168.50.3
netmask 255.255.255.0
在副節(jié)點(diǎn)2上:
auto eth2
iface eth2 inet static
address 192.168.50.4
netmask 255.255.255.0
由于我們沒(méi)有 DNS 服務(wù),所以需要設(shè)置設(shè)置一下 /etc/hosts 這個(gè)文件,手工將主機(jī)名稱(chēng)放到此文件中。
在主節(jié)點(diǎn)上:
127.0.0.1 localhost primary
192.168.50.2 primary
192.168.50.3 secondary1
192.168.50.4 secondary2
在副節(jié)點(diǎn)1上:
127.0.0.1 localhostsecondary1
192.168.50.2 primary
192.168.50.3 secondary1
192.168.50.4 secondary2
在副節(jié)點(diǎn)2上:
127.0.0.1 localhostsecondary2
192.168.50.2 primary
192.168.50.3 secondary1
192.168.50.4 secondary2
使用 ping 命令檢查各個(gè)節(jié)點(diǎn)之間的連接。
$ ping primary
$ ping secondary1
$ ping secondary2
配置副本集
驗(yàn)證各個(gè)節(jié)點(diǎn)可以正常連通后,我們就可以新建一個(gè)管理員用戶(hù),用于之后的副本集操作。
在主節(jié)點(diǎn)上,打開(kāi) /etc/mongodb.conf文件,將 auth 和 replSet 兩項(xiàng)注釋掉。
dbpath=/var/lib/mongodb
logpath=/var/log/mongodb/mongod.log
logappend=true
#auth = true
keyFile=/var/lib/mongodb/keyFile
#replSet=myReplica
在一個(gè)新安裝的 MongoDB 上配置任何用戶(hù)或副本集之前,你需要注釋掉 auth 行。默認(rèn)情況下,MongoDB 并沒(méi)有創(chuàng)建任何用戶(hù)。而如果在你創(chuàng)建用戶(hù)前啟用了 auth,你就不能夠做任何事情。你可以在創(chuàng)建一個(gè)用戶(hù)后再次啟用 auth。
修改 /etc/mongodb.conf 之后,重啟 mongod 進(jìn)程。
$ sudo service mongod restart
現(xiàn)在連接到 MongoDB master:
$ mongo
連接 MongoDB 后,新建管理員用戶(hù)。
> use admin
> db.createUser({
user:"admin",
pwd:"
})
重啟 MongoDB:
$ sudo service mongod restart
再次連接到 MongoDB,用以下命令將副節(jié)點(diǎn)1 和副節(jié)點(diǎn)2節(jié)點(diǎn)添加到我們的副本集中。
> use admin
>db.auth("admin","myreallyhardpassword")
> rs.initiate()
> rs.add("secondary1:27017")
>rs.add("secondary2:27017")
現(xiàn)在副本集到手了,可以開(kāi)始我們的項(xiàng)目了。參照 官方驅(qū)動(dòng)文檔 來(lái)了解如何連接到副本集。如果你想要用 Shell 來(lái)請(qǐng)求數(shù)據(jù),那么你需要連接到主節(jié)點(diǎn)上來(lái)插入或者請(qǐng)求數(shù)據(jù),副節(jié)點(diǎn)不行。如果你執(zhí)意要嘗試用副本集操作,那么以下錯(cuò)誤信息就蹦出來(lái)招呼你了。
myReplica:SECONDARY>
myReplica:SECONDARY> showdatabases
2015-05-10T03:09:24.131+0000E QUERY Error: listDatabases failed:{"note" : "from execCommand", "ok" : 0,"errmsg" : "not master" }
at Error ()
at Mongo.getDBs(src/mongo/shell/mongo.js:47:15)
at shellHelper.show(src/mongo/shell/utils.js:630:33)
at shellHelper(src/mongo/shell/utils.js:524:36)
at (shellhelp2):1:1 at src/mongo/shell/mongo.js:47
如果你要從 shell 連接到整個(gè)副本集,你可以安裝如下命令。在副本集中的失敗切換是自動(dòng)的。
$ mongoprimary,secondary1,secondary2:27017/?replicaSet=myReplica
如果你使用其它驅(qū)動(dòng)語(yǔ)言(例如,JavaScript、Ruby 等等),格式也許不同。
希望這篇教程能對(duì)你有所幫助。你可以使用Vagrant來(lái)自動(dòng)完成你的本地環(huán)境配置,并且加速你的代碼。
免費(fèi)領(lǐng)取兄弟連IT教育原創(chuàng)云計(jì)算培訓(xùn)視頻/細(xì)說(shuō)linux教程,詳情咨詢(xún)官網(wǎng)客服:http://www.lampbrother.net/linux/或者勾搭Q2430675018~
歡迎加入linux交流群 478068715
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。