MongoDb的複本集搭建教程(個人操作筆記)

來源:互聯網
上載者:User

標籤:

很多公司都在用MongoDb ,一直沒有時間研究,最近好好的整了一下,做下筆記,直接上操作步驟,關於Mongodb的理論知識可以搜尋其他資料,也可以聯絡我索取

mongoDB官方已經不建議使用主從模式了,替代方案是採用複本集的模式,主從模式其實就是一個單副本的應用,沒有很好的擴充性和容錯性。而複本集具有多個副本保證了容錯性,就算一個副本掛掉了還有很多副本存在,並且解決了上面 第一個問題“主節點掛掉了,整個叢集內會自動切換”。難怪mongoDB官方推薦使用這種模式。我們來看看mongoDB複本集的架構圖:

 

由圖可以看到用戶端串連到整個複本集,不關心具體哪一台機器是否掛掉。主伺服器負責整個複本集的讀寫,複本集定期同步資料備份,一但主節點掛掉,副本節點就會選舉一個新的主伺服器,這一切對於應用伺服器不需要關心。我們看一下主伺服器掛掉後的架構:

複本集中的副本節點在主節點掛掉後通過心跳機制檢測到後,就會在叢集內發起主節點的選舉機制,自動選舉一位新的主伺服器。看起來很牛X的樣子,我們趕緊操作部署一下!
官方推薦的複本集機器數量為至少3個,那我們也按照這個數量配置測試。

1、準備兩台機器 192.168.176.129、192.168.176.130、192.168.176.131。 192.168.176.129 當作複本集主節點,192.168.176.130、192.168.176.131作為複本集副本節點

2、分別在每台機器上建立mongodb複本集測試檔案夾及Data目錄

  

3、分別啟動三台機器的MongoDB服務:

#cd /opt/soft/mongodb/mongodb-linux-x86_64-3.2.1/bin#啟動時指定資料檔案路徑 和複本集名稱#./mongod --dbpath /opt/soft/mongodb/data/ --replSet repset

4、初始化複本集  登入三台機器中的任意一台,比如:129這台

#/opt/soft/mongodb/mongodb-linux-x86_64-3.2.1/bin/mongo
........日誌資訊省略
#>>config = { _id:"repset", members:[ {_id:0,host:"192.168.176.129:27017"}, {_id:1,host:"192.168.176.130:27017"}, {_id:2,host:"192.168.176.131:27017"}] }

  列印資訊:

    {              "_id" : "repset",              "members" : [                      {                              "_id" : 0,                              "host" : "192.168.176.129:27017"                      },                      {                              "_id" : 1,                              "host" : "192.168.176.130:27017"                      },                      {                              "_id" : 2,                              "host" : "192.168.176.131:27017"                      }              ]      }  
#初始化複本集配置rs.initiate(config);

#如果成功了返回
{ "ok" : 1 }

#如果出現一下資訊,查看一下伺服器的防火牆
{
        "ok" : 0,
        "errmsg" : "replSetInitiate quorum check failed because not all proposed set members responded affirmatively: 192.168.176.129:27017 failed with No route to host, 192.168.176.131:27017 failed with No route to host",
        "code" : 74
}

5、查看叢集狀態

 

  

  到此整個複本集已經搭建完成。下面趕快測試一下吧

主節點負責寫操作,所以我們在130這台機器上執行寫操作

repset:PRIMARY> db.benxq.insert({"name":"zhangsan"})

在131機器上執行讀操作讀一下

repset:SECONDARY> db.benxq.find()
#mongodb預設是從主節點讀寫資料的,副本節點上不允許讀,需要設定副本節點可以讀。 Error: error: { "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 }

repset:SECONDARY> db.getMongo().setSlaveOk(); 

#可以看到資料已經複製到了複本集。
repset:SECONDARY> db.benxq.find();

6、容錯移轉測試

 我們將130這台主節點停掉模仿伺服器故障,在129上執行rs.status()

  

 

我們可以看到已經將131這台伺服器選舉為了新的主節點,這是我們重新啟動130,就會自動的成為了副節點。

 

 

  

 

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.