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