搭建高可用MongoDB叢集 副本

來源:互聯網
上載者:User

標籤:

工作中使用到了mongo,就自己研究了一下,總結了一下,會遇到的一些問題,有不對的地方還請各位牛人指導。

簡單說一下

複本集具有多個副本保證了容錯性,就算一個副本掛掉了還有很多副本存在

主節點掛掉了,整個叢集內會自動切換

複本集中的副本節點在主節點掛掉後通過心跳機制檢測到後,就會在叢集內發起主節點的選舉機制,自動選舉一位新的主伺服器

 

我們來看看mongoDB複本集的架構圖:(註:此圖是網上切下來的,比我畫的好)

 

主伺服器掛掉後的架構如:

 

 

 如下是我的布署操作

 

我用的是VMware 11虛擬機器

系統是CentOS-6.3-x86_64 系統

使用的資料庫是 mongodb-linux-x86_64-2.0.4

用了三個虛擬系統

ip 192.168.216.128 192.168.216.129 192.168.216.130 

用到的端品分別是 10001 10002 10003

192.168.216.128當複本集主節點  其它做為複本集副本節點

 

開始布署

1、 分別在每個系統中使用 su切換使用者身份如:

2、切記一定要在每個系統中關閉系統防火牆,因為在後面配置複本集時,這三台系統會互相求請,如果未關防火牆,配置是通不過的,這也是我在配置時遇到的問題

命令:   service iptables stop

 

3,把你下載的mongodb的安裝程式包上傳到每個系統然後解壓

 

4.  分別在每個系統下棄置站台集檔案夾

如何該命令執行不了請檢查許可權

 

 mkdir -p replSet/data

 

5.分別在每個系統上啟動mongodb 並使用  ps -aux|grep mongod 命令查看是否啟動

mongodb-linux-x86_64-2.0.4/bin/mongod --replSet application --dbpath replSet/data/ --port 10001 -logpath replSet/replSet.log -fork

mongodb-linux-x86_64-2.0.4/bin/mongod --replSet application --dbpath replSet/data/ --port 10002 --logpath replSet/replSet.log -fork

mongodb-linux-x86_64-2.0.4/bin/mongod --replSet application --dbpath replSet/data/ --port 10003 --logpath replSet/replSet.log -fork

 

如其中一個切圖:

 

6.初始化複本集

在其中一個系統中登陸mongodb

命令  mongodb-linux-x86_64-2.0.4/bin/mongo 192.168.216.128:10001

使用admin資料庫

如:

 

定義複本集組態變數,這裡的 _id:”application” 和上面命令參數“ –replSetapplication” 要保持

 config ={_id:"application",members:[{_id:0,host:"192.168.216.128:10001"},{_id:1,host:"192.168.216.129:10002"},{_id:2,host:"192.168.216.130:10003"}]}

命令和輸出

 

初始化副本配置

命令: rs.initiate(config);

輸出結果:

{
 "info" : "Config now saved locally.  Should come online in about a minute.",
 "ok" : 1
}

如果輸出如下:表示192.168.216.129:10002連接埠訪問不到請檢查該系統下10002連接埠的mongodb是否啟動

rs.initiate(config);
{
 "errmsg" : "couldn‘t initiate : need all members up to initiate, not ok : 192.168.216.129:10002",
 "ok" : 0
}

 

查看叢集節點的狀態

 命令: rs.status(); 輸出結果如

 

此時整個複本集已經搭建成功

7.開始測試

在主節點上串連到資料庫

命令:mongodb-linux-x86_64-2.0.4/bin/mongo 192.168.216.128:10001

 

建立test 資料庫。

命令: use test; 往testdb表插入資料。 命令: db.testdb.insert({"mongodb":"mongodbtest"})   在副本節點 192.168.216.129 192.168.216.130 上串連到mongodb查看資料是否複製過來。 如我在130上查看命令如下   mongodb-linux-x86_64-2.0.4/bin/mongo 192.168.216.130:10003   進入後輸入如下命令進入test資料庫 use test 執行 db.testdb.find()查看錶 報如下錯: error: { "$err" : "not master and slaveok=false", "code" : 13435 } 解決辦法如下 輸入   rs.slaveOk(); 然後再執行如上查看錶操作 #輸出如下 { "_id" : ObjectId("55bb3495ce19b28f7ea77e81"), "mongodb" : "mongodbtest" }   操作如下切圖  

8.測試複本集容錯移轉功能,也就是主節點掛掉後,副節點變為主節點

   先停落主節點 128

  我是直接kill 掉

在主節點系統上:

  命令: ps -aux|grep mongod  查出mongodb啟動的連接埠並殺掉

     我查出的連接埠是 25305

     命令 : kill -9 25305

 

 

串連到其它兩個系統進入mongodb資料庫,會有其中一個變為主節點,辨認是否為主機點  如:出現primary表示為主節點

 

如下查看示範例子

 

查看整個叢集的狀態,可以看到128為狀態不可達。

mongodb-linux-x86_64-2.0.4/bin/mongo 192.168.216.129:10002

rs.status();

輸出如下

 

{
 "set" : "application",
 "date" : ISODate("2015-07-31T09:04:00Z"),
 "myState" : 1,
 "syncingTo" : "192.168.216.128:10001",
 "members" : [
  {
   "_id" : 0,
   "name" : "192.168.216.128:10001",
   "health" : 0,
   "state" : 8,
   "stateStr" : "(not reachable/healthy)",
   "uptime" : 0,
   "optime" : {
    "t" : 1438332053000,
    "i" : 1
   },
   "optimeDate" : ISODate("2015-07-31T08:40:53Z"),
   "lastHeartbeat" : ISODate("2015-07-31T09:00:17Z"),
   "pingMs" : 0,
   "errmsg" : "socket exception"
  },
  {
   "_id" : 1,
   "name" : "192.168.216.129:10002",
   "health" : 1,
   "state" : 1,
   "stateStr" : "PRIMARY",
   "optime" : {
    "t" : 1438332053000,
    "i" : 1
   },
   "optimeDate" : ISODate("2015-07-31T08:40:53Z"),
   "self" : true
  },
  {
   "_id" : 2,
   "name" : "192.168.216.130:10003",
   "health" : 1,
   "state" : 2,
   "stateStr" : "SECONDARY",
   "uptime" : 2044,
   "optime" : {
    "t" : 1438332053000,
    "i" : 1
   },
   "optimeDate" : ISODate("2015-07-31T08:40:53Z"),
   "lastHeartbeat" : ISODate("2015-07-31T09:03:59Z"),
   "pingMs" : 0
  }
 ],
 "ok" : 1
}

 

再啟動原主節點128 發現變為  SECONDARY

此不再錄入代碼自己可以試試

 

 至此複本集搭建好了

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

搭建高可用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.