2015年5月12日

[Azure]在Azure上建立mongodb Replica Set

在大部分的情況下,使用者可以透過mongoLab在Azure上提供的SaaS服務使用mongoDB;或是透過這個ARM Template自動佈署mongodb replica set:https://github.com/Azure/azure-quickstart-templates/tree/master/mongodb-high-availability

如果你使用的是China Azure,或是有其他特殊需求,還是可以在Azure VM上架設

mongodb本身的官方文件已經有說明如何透過Azure VM建立mongodb replica set,但是文件本身已經有點久了,實際依照上面的步驟進行時,發現有一些小地方還是需要研究一下;這一篇文章紀載了我在依照文件安裝的過程以及遇到的一些狀況及解決方式。

在開始之前,這次的目的是希望驗證是否可能在Azure上透過Cross-VNet將兩個不同資料中心串起來,並在不同資料中心設定Cross-Region的replicate set。mongodb確實建議這樣的佈署方式:http://www.mongodb.com/presentations/deploying-mongodb-high-availability 我們希望透過實作在Azure上佈署起來。

參考資料:

步驟

  • 首先在Azure上建立兩個VNet
    • mongodbVnet-EA
      • IP Range:172.16.1.0 ~ 172.16.1.255
      • 東亞資料中心
    • mongodbVnet-SEA
      • IP Range:172.16.2.0 ~ 172.16.2.255
      • 單南亞資料中心
  • 建立完成後,依照這裡的方式,將兩個VNet透過S2S Tunnel連線:https://msdn.microsoft.com/en-us/library/azure/dn690122.aspx
  • 完成之後,應該要看到以下的狀態

image

  • 接著,在mongodbVNet-EA中建立兩台機器
    • mongodb-ea-01:
      • CentOS 6.5
      • 172.16.1.4
      • Endpoint:Public 27018/Private 27018
    • mongodb-ea-02:
      • CentOS 6.5
      • 172.16.1.5
      • Endpoint:Public 27019/Private 27019
  • 在mongodbVNet-SEA中建立一台機器
    • mongodb-sea-01
      • CentOS 6.5
      • 172.16.2.4
      • Endpoint:Public 27020/Private 27020
  • 將mongodb-ea-01與mongodb-ea-02加入同一個Availability Set以確保99.95 SLA

image

  • SSH到mongodb-ea-01,執行sudo yun update更新所有package
  • 修改/etc/hosts檔案,新增以下紀錄
127.0.0.1 mongodb-ea-01
  • 重複以上動作在mongodb-ea-02與mongodb-sea-01
    • /etc/hosts檔案中的內容須更改為mongodb-ea-02或mongodb-sea-01
  • 接著,在mongodb-ea-01上,建立或修改/etc/yum.repos.d/mongodb.repo這個檔案,其內容如下:
[mongodb]
name=MongoDB
Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=1
  • 執行以下指令安裝mongodb
sudo yum install mongo-10gen mongo-10gen-server
  • 等待安裝完成

image

  • 重複以上步驟在mongodb-ea-02與mongodb-sea-01上
  • 現在mongodb已經在三台機器上都安裝完成了,接著我們要設定mongodb replica set。此次佈署,我們會建置一台master與兩台slave
  • SSH到mongodb-ea-01
  • 修改/etc/mongod.conf檔案,修改以下的設定;其中:
    • dbpage與logpath為資料庫檔案與log檔案的位置,可以隨著實際上的路徑調整
    • replSet為這個replica set的名稱,可以視需要調整
    • port為此機器上的mongod所監聽的port

port = 27018
dbpath = /mnt/datadrive/data
logpath = /mnt/datadrive/mongod.log
replSet = mongors
bind_ip = 172.16.1.4

  • 存檔後,執行以下指令啟動mongodb:sudo mongod –-config /etc/mongod.conf
  • SSH到mongodb-ea-02
  • 修改/etc/mongod.conf檔案,修改以下的設定

port = 27018
dbpath = /mnt/datadrive/data
logpath = /mnt/datadrive/mongod.log
replSet = mongors
bind_ip = 172.16.1.5

  • 存檔後,執行以下指令啟動mongodb:sudo mongod –-config /etc/mongod.conf
  • SSH到mongodb-sea-01
  • 修改/etc/mongod.conf檔案,修改以下的設定

port = 27018
dbpath = /mnt/datadrive/data
logpath = /mnt/datadrive/mongod.log
replSet = mongors
bind_ip = 172.16.2.4

  • 存檔後,執行以下指令啟動mongodb:
sudo mongod –-config /etc/mongod.conf
  • 現在mongodb在三台機器上都已經啟動完成,接著我們要設定replica set,將mongodb-ea-02設為primary,其他兩台設為secondary
  • 以下的動作,只能在primary上執行
  • SSH到mongodb-ea-02
  • 執行以下的指令連線到mongodb console
mongo 172.16.1.5:27019
  • 在console輸入以下指令

conf = {
   _id : "mongors",
   members : [
     {_id:0, host:"172.16.1.5:27019"},
     {_id:1, host:"172.16.2.4:27020"},                                    {_id:2, host:"172.16.1.4:27018"}]}

image
  • 輸入rs.initiate(conf)初始化replica set
  • 接著可以透過rs.status()確認狀態

image

  • 試著新增一筆資料並查詢看看

image

  • 把mongodb-ea-02關機

image

  • 過一會,就會看到另一台機器成為primary了

image

沒有留言:

About Me