搭建mongodb叢集(複本集+分區)

來源:互聯網
上載者:User

標籤:root   prim   ble   檔案夾   進程   switch   comm   串連   person   

完整的搭建mongodb叢集(複本集+分區)的範例。。。

準備四台機器,各自是bluejoe1,bluejoe2,bluejoe3,以及bluejoe0

複本集及分區策略確定例如以下:

  • 將建立3個複本集,命名為shard1,shard2,shard3;
  • 以上3個複本集作為3個分區;
  • 每一個複本集包括3個副本(主、輔1、輔2);
  • 副本分開儲存,即shard1存在bluejoe1、bluejoe2、bluejoe3上各一份。。。

    以此類推

  • 將建立3個配置庫執行個體,一台機器一個
  • bluejoe0上配置一個mongos(mongos一般能夠配置在應用端)
畫了一個圖:


詳細操作過程例如以下:
  1. 在bluejoe1上下載mongdb安裝包。
  2. 解壓至/usr/local/mongdb(注意改名)。
  3. 建立data/db1,db2,db3檔案夾,啟動3個mongod執行個體,注意replSet的名字:
    mkdir /usr/local/mongodb/data/db1 /usr/local/mongodb/data/db2 /usr/local/mongodb/data/db3nohup /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/db1 --port 10001 --replSet db1 --logpath=/usr/local/mongodb/log/db1.log &nohup /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/db2 --port 10002 --replSet db2 --logpath=/usr/local/mongodb/log/db2.log &nohup /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/db3 --port 10003 --replSet db3 --logpath=/usr/local/mongodb/log/db3.log &

  4. 使用scp命令。將mongodb檔案夾複製至bluejoe2和bluejoe3機器,並依照第3步啟動每台機器上的3個執行個體;
  5. 初始化副本:
    mongo bluejoe1:10001use admindb.runCommand({"replSetInitiate":{"_id":"db1","members":[{"_id":1,"host":"bluejoe1:10001"},{"_id":2,"host":"bluejoe2:10001"},{"_id":3,"host":"bluejoe3:10001"}]}})mongo bluejoe1:10002use admindb.runCommand({"replSetInitiate":{"_id":"db2","members":[{"_id":1,"host":"bluejoe1:10002"},{"_id":2,"host":"bluejoe2:10002"},{"_id":3,"host":"bluejoe3:10002"}]}})mongo bluejoe1:10003use admindb.runCommand({"replSetInitiate":{"_id":"db3","members":[{"_id":1,"host":"bluejoe1:10003"},{"_id":2,"host":"bluejoe2:10003"},{"_id":3,"host":"bluejoe3:10003"}]}})

  6. 觀察複本集的即時複製特性
    1. 串連上bluejoe1:10001。看到db1:PRIMARY>的字樣,說明它是db1的主節點
    2. 建立一張新表。建立幾條測試記錄
    3. 串連上bluejoe3:10002。看到shard1:SECONDARY>的字樣,說明它是shard1的輔助節點
    4. 注意此時無法查詢前面新增的記錄,會報錯not master and slaveOk=false
    5. 回到bluejoe1:10001,設定slaveOk
      db.getMongo().setSlaveOk()
    6. 再回到bluejoe3:10002,就可以看到主節點寫入的記錄
  • 觀察複本集的容錯移轉特性
    1. 殺掉bluejoe1:10001的進程
    2. 再次串連上bluejoe3:10002。看到shard1:PRIMARY>的字樣,說明它已經變成shard1的主節點
    3. 假設這時再啟動bluejoe1:10001,則發現它已經變成shard1:SECONDARY>
  • 建立data/configdb。啟動配置庫執行個體:
    mkdir /usr/local/mongodb/data/configdbnohup /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/configdb --port 20000 --logpath=/usr/local/mongodb/log/configdb.log &

    假設須要關閉mongod服務,可使用--shutdown選項。如:
    /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/configdb --shutdown

    到如今為止應該有12個mongd執行個體。當中3個為配置庫執行個體,剩下的屬於3個複本集。
  • 接下來管理分區,在bluejoe0上啟動mongs:

    nohup /usr/local/mongodb/bin/mongos --port 30000 --configdb bluejoe1:20000,bluejoe2:20000,bluejoe3:20000 &
  • 串連上mongos,配置分區資訊:
    mongo bluejoe0:30000mongos> use adminswitched to db admindb.runCommand({"addShard":"db1/bluejoe1:10001"})db.runCommand({"addShard":"db2/bluejoe1:10002"})db.runCommand({"addShard":"db3/bluejoe1:10003"})
  • 查看分區情況:
    mongos>  db.runCommand({listshards:1}){"shards" : [{"_id" : "db1","host" : "db1/bluejoe1:10001,bluejoe2:10001,bluejoe3:10001"},{"_id" : "db2","host" : "db2/bluejoe1:10002,bluejoe2:10002,bluejoe3:10002"},{"_id" : "db3","host" : "db3/bluejoe1:10003,bluejoe2:10003,bluejoe3:10003"}],"ok" : 1}
    能夠看出,雖然注冊的時候僅僅是提供了複本集的主節點,但mongos已知曉了各輔助節點;

  • 對某個庫開啟分區功能:
    mongos> db.runCommand({"enablesharding":"test"}){ "ok" : 1 }mongos> db.runCommand({"shardcollection":"test.person","key":{_id:‘hashed‘}}){ "collectionsharded" : "test.person", "ok" : 1 }
  • 插入測試資料:
    mongos> for(var i=0;i<10;i++){db.person.insert({name:"bluejoe"+i});}WriteResult({ "nInserted" : 1 })
  • 查看資料分區儲存情況:
    [[email protected] ~]# mongo bluejoe3:10002MongoDB shell version: 2.6.5connecting to: bluejoe3:10002/testshard1:PRIMARY> db.person.find(){ "_id" : ObjectId("546ff1013a0d0ec68b42a914"), "name" : "bluejoe0" }{ "_id" : ObjectId("546ff1013a0d0ec68b42a915"), "name" : "bluejoe1" }{ "_id" : ObjectId("546ff1013a0d0ec68b42a91a"), "name" : "bluejoe6" }{ "_id" : ObjectId("546ff1013a0d0ec68b42a91b"), "name" : "bluejoe7" }{ "_id" : ObjectId("546ff1013a0d0ec68b42a91c"), "name" : "bluejoe8" }shard1:PRIMARY> exitbye[[email protected] ~]# mongo bluejoe2:10001MongoDB shell version: 2.6.5connecting to: bluejoe2:10001/testshard2:PRIMARY> db.person.find(){ "_id" : ObjectId("546ff1013a0d0ec68b42a918"), "name" : "bluejoe4" }shard2:PRIMARY> exitbye[[email protected] ~]# mongo bluejoe3:10001MongoDB shell version: 2.6.5connecting to: bluejoe3:10001/testshard3:PRIMARY> db.person.find(){ "_id" : ObjectId("546ff1013a0d0ec68b42a916"), "name" : "bluejoe2" }{ "_id" : ObjectId("546ff1013a0d0ec68b42a917"), "name" : "bluejoe3" }{ "_id" : ObjectId("546ff1013a0d0ec68b42a919"), "name" : "bluejoe5" }{ "_id" : ObjectId("546ff1013a0d0ec68b42a91d"), "name" : "bluejoe9" }shard3:PRIMARY> 

  • 搭建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.