如何配置 MongoDB 複本集

來源:互聯網
上載者:User

標籤:

MongoDB 已經成為市面上最知名的 NoSQL 資料庫。MongoDB 是面向文檔的,它的無模式設計使得它在各種各樣的WEB 應用當中廣受歡迎。最讓我喜歡的特性之一是它的複本集(Replica Set),複本集將同一資料的多份拷貝放在一組 mongod 節點上,從而實現資料的冗餘以及高可用性。

這篇教程將向你介紹如何配置一個 MongoDB 複本集。

複本集的最常見配置需要一個主節點以及多個副節點。這之後啟動的複製行為會從這個主節點到其他副節點。複本集不止可以針對意外的硬體故障和停機事件對資料庫提供保護,同時也因為提供了更多的節點從而提高了資料庫用戶端資料讀取的輸送量。

 

配置環境

這個教程裡,我們會配置一個包括一個主節點以及兩個副節點的複本集。

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

我會在一個虛擬機器執行個體上配置好所需的環境,然後將它複製到其他的虛擬機器執行個體上。因此,選擇一個名為 master 的虛擬機器,執行以下安裝過程。

 

首先,我們需要給 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

現在對 /etc/mongodb.conf 做一些更改

auth = true

dbpath=/var/lib/mongodb

logpath=/var/log/mongodb/mongod.log

logappend=true

keyFile=/var/lib/mongodb/keyFile

replSet=myReplica

 

第一行的作用是表明我們的資料庫需要驗證才可以使用。keyfile 配置用於 MongoDB 節點間複製行為的密鑰檔案。replSet 為複本集設定一個名稱。

接下來我們建立一個用於所有執行個體的密鑰檔案。

$ echo -n "MyRandomStringForReplicaSet" | md5sum > keyFile

這將會建立一個含有 MD5 字串的密鑰檔案,但是由於其中包含了一些噪音,我們需要對他們清理後才能正式在 MongoDB 中使用。

$ echo -n "MyReplicaSetKey" | md5sum|grep -o "[0-9a-z]\+" > keyFile

grep 命令的作用的是把將空格等我們不想要的內容過濾掉之後的 MD5 字串列印出來。

現在我們對密鑰檔案進行一些操作,讓它真正可用。

$ sudo cp keyFile /var/lib/mongodb

$ sudo chown mongodb:nogroup keyFile

$ sudo chmod 400 keyFile

 

接下來,關閉此虛擬機器。將其 Ubuntu 系統複製到其他虛擬機器上。

這是複製後的副節點1和副節點2。確認你已經將它們的MAC地址重新初始化,並且複製整個硬碟。

請注意,三個虛擬機器樣本需要在同一個網路中以便相互連訊。因此,我們需要它們弄到“互連網"上去。

這裡推薦給每個虛擬機器設定一個靜態 IP 位址,而不是使用 DHCP。這樣它們就不至於在 DHCP 分配IP地址給他們的時候失去串連。

像下面這樣編輯每個虛擬機器的 /etc/networks/interfaces 檔案。

在主節點上:

auto eth1

    iface eth1 inet static

    address 192.168.50.2

    netmask 255.255.255.0

在副節點1上:

auto eth1

    iface eth1 inet static

    address 192.168.50.3

    netmask 255.255.255.0

在副節點2上:

auto eth1

    iface eth1 inet static

    address 192.168.50.4

netmask 255.255.255.0

 

由於我們沒有 DNS 服務,所以需要設定設定一下 /etc/hosts 這個檔案,手工將主機名稱放到此檔案中。

在主節點上:

127.0.0.1 localhost primary

192.168.50.2 primary

192.168.50.3 secondary1

192.168.50.4 secondary2

在副節點1上:

127.0.0.1 localhost secondary1

192.168.50.2 primary

192.168.50.3 secondary1

192.168.50.4 secondary2

在副節點2上:

127.0.0.1 localhost secondary2

192.168.50.2 primary

192.168.50.3 secondary1

192.168.50.4 secondary2

使用 ping 命令檢查各個節點之間的串連。

$ ping primary

$ ping secondary1

$ ping secondary2

 

配置複本集

驗證各個節點可以正常連通後,我們就可以建立一個管理使用者,用於之後的複本集操作。

在主節點上,開啟 /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 行。預設情況下,MongoDB 並沒有建立任何使用者。而如果在你建立使用者前啟用了 auth,你就不能夠做任何事情。你可以在建立一個使用者後再次啟用 auth。

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

$ sudo service mongod restart

現在串連到 MongoDB master:

$ mongo <master-ip-address>:27017

串連 MongoDB 後,建立管理使用者。

> use admin

> db.createUser({

user:"admin",

pwd:"

})

重啟 MongoDB:

$ sudo service mongod restart

再次串連到 MongoDB,用以下命令將 副節點1 和副節點2節點添加到我們的複本集中。

> use admin

> db.auth("admin","myreallyhardpassword")

> rs.initiate()

> rs.add ("secondary1:27017")

> rs.add("secondary2:27017")

 

現在複本集到手了,可以開始我們的項目了。參照 官方驅動文檔 來瞭解如何串連到複本集。如果你想要用 Shell 來請求資料,那麼你需要串連到主節點上來插入或者請求資料,副節點不行。如果你執意要嘗試用複本集操作,那麼以下錯誤資訊就蹦出來招呼你了。

myReplica:SECONDARY>

myReplica:SECONDARY> show databases

2015-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

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

 

希望這篇教程能對你有所協助。你可以使用Vagrant來自動完成你的本地環境配置,並且加速你的代碼。

免費領取兄弟連IT教育原創雲端運算培訓視頻/細說linux教程,詳情諮詢官網客服:http://www.lampbrother.net/linux/ 或者勾搭Q2430675018~

歡迎加入linux交流群 478068715

 


如何配置 MongoDB 複本集

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.