溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux下如何配置MongoDB副本集

發(fā)布時間:2022-01-26 10:24:02 來源:億速云 閱讀:213 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)Linux下如何配置MongoDB副本集的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

MongoDB復(fù)制是將數(shù)據(jù)同步在多個服務(wù)器的過程。復(fù)制提供了數(shù)據(jù)的冗余備份,并在多個服務(wù)器上存儲數(shù)據(jù)副本,提高了數(shù)據(jù)的可用性, 并可以保證數(shù)據(jù)的安全性。復(fù)制還允許您從硬件故障和服務(wù)中斷中恢復(fù)數(shù)據(jù)。

Linux下如何配置MongoDB副本集

配置環(huán)境

這個教程里,我們會配置一個包括一個主節(jié)點以及兩個副節(jié)點的副本集。

Linux下如何配置MongoDB副本集

為了達到這個目的,我們使用了3個運行在 VirtualBox 上的虛擬機。我會在這些虛擬機上安裝 Ubuntu 14.04,并且安裝 MongoDB 官方包。

我會在一個虛擬機實例上配置好所需的環(huán)境,然后將它克隆到其他的虛擬機實例上。因此,選擇一個名為 master 的虛擬機,執(zhí)行以下安裝過程。

首先,我們需要給 apt 增加一個 MongoDB 密鑰:

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

然后,將官方的 MongoDB 倉庫添加到 source.list 中:

$ sudo su# echo "deb http://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 -y mongodb-org

現(xiàn)在對 /etc/mongodb.conf 做一些更改

auth = truedbpath=/var/lib/mongodblogpath=/var/log/mongodb/mongod.loglogappend=truekeyFile=/var/lib/mongodb/keyFilereplSet=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)在我們對密鑰文件進行一些操作,讓它真正可用。

$ sudo cp keyFile /var/lib/mongodb$ sudo chown mongodb:nogroup keyFile$ sudo chmod 400 keyFile

接下來,關(guān)閉此虛擬機。將其 Ubuntu 系統(tǒng)克隆到其他虛擬機上。

Linux下如何配置MongoDB副本集

這是克隆后的副節(jié)點1和副節(jié)點2。確認你已經(jīng)將它們的MAC地址重新初始化,并且克隆整個硬盤。

Linux下如何配置MongoDB副本集

請注意,三個虛擬機示例需要在同一個網(wǎng)絡(luò)中以便相互通訊。因此,我們需要它們弄到“互聯(lián)網(wǎng)”上去。

這里推薦給每個虛擬機設(shè)置一個靜態(tài) IP 地址,而不是使用 DHCP。這樣它們就不至于在 DHCP 分配IP地址給他們的時候失去連接。

像下面這樣編輯每個虛擬機的 /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 這個文件,手工將主機名稱放到此文件中。

在主節(jié)點上:

127.0.0.1 localhost primary192.168.50.2 primary192.168.50.3 secondary1192.168.50.4 secondary2

在副節(jié)點1上:

127.0.0.1 localhost secondary1192.168.50.2 primary192.168.50.3 secondary1192.168.50.4 secondary2

在副節(jié)點2上:

127.0.0.1 localhost secondary2192.168.50.2 primary192.168.50.3 secondary1192.168.50.4 secondary2

使用 ping 命令檢查各個節(jié)點之間的連接。

$ ping primary$ ping secondary1$ ping secondary2

配置副本集

驗證各個節(jié)點可以正常連通后,我們就可以新建一個管理員用戶,用于之后的副本集操作。

在主節(jié)點上,打開 /etc/mongodb.conf 文件,將 auth 和 replSet 兩項注釋掉。

dbpath=/var/lib/mongodblogpath=/var/log/mongodb/mongod.loglogappend=true#auth = truekeyFile=/var/lib/mongodb/keyFile#replSet=myReplica

在一個新安裝的 MongoDB 上配置任何用戶或副本集之前,你需要注釋掉 auth 行。默認情況下,MongoDB 并沒有創(chuàng)建任何用戶。而如果在你創(chuàng)建用戶前啟用了 auth,你就不能夠做任何事情。你可以在創(chuàng)建一個用戶后再次啟用 auth。

修改 /etc/mongodb.conf 之后,重啟 mongod 進程。

$ sudo service mongod restart

現(xiàn)在連接到 MongoDB master:

$ mongo :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> show databases2015-05-10T03:09:24.131+0000 E 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 連接到整個副本集,你可以安裝如下命令。在副本集中的失敗切換是自動的。

$ mongo primary,secondary1,secondary2:27017/?replicaSet=myReplica

如果你使用其它驅(qū)動語言(例如,JavaScript、Ruby 等等),格式也許不同。

感謝各位的閱讀!關(guān)于“Linux下如何配置MongoDB副本集”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI