Ubuntu下Mongodb叢集搭建:relica sets(複本集配置)

來源:互聯網
上載者:User
一、寫在前面的話

MongoDB支援不同服務之間的非同步資料複製,來實現failover(容錯移轉,故障切換,故障恢複) and redundancy(資料冗餘)。同一時間,只有一個服務節點(primary或者master)支援寫入。MongoDB支援兩種複製的模式:

Master/Slave,主從複製,角色包括master和slave。Replica Set,複製集複製,角色包括primary和secondary。

mongoDB官方推薦使用Replica Set模式,複本集就是有自動故障恢複功能的主從叢集。主從叢集和複本集最為明顯的區別就是複本集沒有固定的主節點:整個叢集會選舉出一個主節點,當其不能工作時,則變更到其它節點。複本集總會有一個活躍節點和一個或多個備份節點。複本集最好的優點就是全自動化的。 二、複本集及叢集介紹

1、節點類型
standard:常規節點,它儲存一份完整的資料副本,參與選舉投票,有可能成為primary節點。
passive:儲存了完整的資料副本,參與投票,不能成為primary節點。
arbiter:仲裁節點,只參與投票,不接收複製的資料,也不能成為primary節點。
一個repica sets節點數量最好為奇數(odd)。
2、參數
用於replica set的參數有兩個:
–replSet ,複製集的名稱。
–oplogSize ,動作記錄的大小,單位為MB。
3、叢集三節點分布
兩個standard節點(這兩個節點直接可以互切primary secondary)。
一個arbiter節點,它手中握著一張選票,決定上面兩個standard節點中的哪一個可以成為primay。 三、配置步驟

1、參照上一篇博文(http://blog.csdn.net/u012859691/article/details/44680249),將三個節點中mongodb.conf的內容修改如下:

port=10001dbpath=data/logpath=log/mongodb.loglogappend=truereplSet=shard1

說明: port=10001,代表連接埠號碼,如果不指定則預設為 27017
replSet=shard1(複製集的名字),一個replica sets中的每個節點的這個參數要一致
logappend=true,記錄檔自動累加,而不是覆蓋
2、啟動第一個standard節點 (ip:192.168.58.135)

hadoop@h1:~/mongodb$ bin/mongod -f mongodb.confall output going to: /home/hadoop/mongodb/log/mongodb.log

啟動第一個standard節點 (ip:192.168.58.136)

hadoop@h2:~/mongodb$ bin/mongod -f mongodb.confall output going to: /home/hadoop/mongodb/log/mongodb.log

3、初始化複本集
在任意一個standard節點上登入mongdb,我們這裡選擇h1(ip:192.168.58.135)
hadoop@h1:~/mongodb$ bin/mongo localhost:10001
並執行如下命令:

cfg={_id:'shard1',members:[ {_id:0,host:'192.168.58.135:10001'}, {_id:1,host:'192.168.58.136:10001'}] }rs.initiate(cfg) 

出現下面的提示資訊就代表成功了

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

4、查看replica set的狀態

hadoop@h1:~/mongodb$ bin/mongo localhost:10001MongoDB shell version: 2.4.6connecting to: localhost:10001/testshard1:SECONDARY> rs.status(){    "set" : "shard1",    "date" : ISODate("2015-03-27T11:24:23Z"),    "myState" : 2,    "syncingTo" : "192.168.58.136:10001",    "members" : [        {            "_id" : 0,            "name" : "192.168.58.135:10001",            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",            "uptime" : 468,            "optime" : Timestamp(1427446232, 1),            "optimeDate" : ISODate("2015-03-27T08:50:32Z"),            "self" : true        },        {            "_id" : 1,            "name" : "192.168.58.136:10001",            "health" : 1,            "state" : 1,            "stateStr" : "PRIMARY",            "uptime" : 258,            "optime" : Timestamp(1427446232, 1),            "optimeDate" : ISODate("2015-03-27T08:50:32Z"),            "lastHeartbeat" : ISODate("2015-03-27T11:24:23Z"),            "lastHeartbeatRecv" : ISODate("2015-03-27T11:24:22Z"),            "pingMs" : 0        }    ],    "ok" : 1}

在replica set的資訊中,其中重要的是:
myState,如果是1代表當前登入的是primary;如果是2代表當前登入的是secondary。
成員資訊中比較重要的是
state:1表示該host是當前可以進行讀寫,2:不能讀寫
health:1表示該host目前是正常的,0:異常

5、測試複本集資料複製功能
(1)登入primary的mongod,插入一條資料

hadoop@h2:~/mongodb$ bin/mongo localhost:10001MongoDB shell version: 2.4.6connecting to: localhost:10001/testshard1:PRIMARY> db.book.insert({'title':'computer'})

(2)登入secondary查看是否有資料

shard1:SECONDARY> use testswitched to db testshard1:SECONDARY> db.book.find()error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

發現報錯了,沒有關係,在secondary讀取資料還需要我們做最後的一步,在需要讀取資料的secondary上執行

shard1:SECONDARY> db.getMongo().setSlaveOk()shard1:SECONDARY> db.book.find(){ "_id" : ObjectId("55153fd08ebbb2c6f1ad3a11"), "title" : "computer" }

ok,測試成功了。
6、增加一個仲裁節點,只負責仲裁,不做資料存放區

shard1:PRIMARY> rs.addArb("192.168.58.137:10001");{ "ok" : 1 }

7、查看現有環境

shard1:PRIMARY> rs.conf(){    "_id" : "shard1",    "version" : 3,    "members" : [        {            "_id" : 0,            "host" : "192.168.58.135:10001"        },        {            "_id" : 1,            "host" : "192.168.58.136:10001"        },        {            "_id" : 2,            "host" : "192.168.58.137:10001",            "arbiterOnly" : true        }    ]}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.