MongoDB整理筆記のReplica Sets

來源:互聯網
上載者:User

標籤:

    MongoDB支援在多個機器中通過非同步複製達到容錯移轉和實現冗餘。多機器中同一時刻只有一台機器是用於寫操作,正因為如此,MongoDB提供了資料一致性的保障。而擔當primary角色的機器,可以把讀的操作分發給slave。

    MongoDB高可用分兩種:

    Master-Slave 主從複製

    只需要在某一個服務啟動時加上–master 參數,而另一個服務加上–slave 與–source 參數,即可實現同步。MongoDB 的最新版本已不再推薦此方案。

    Replica Sets 複製集

    MonoDB在1.6版本上開發了新功能Replica Sets,這比之前的replication功能要強大一些,增加了故障自動切換和自動修複成員節點,各個DB之間資料完全一致,大大降低了維護成本。auto shard 已經明確說明不支援replication paris,建議使用replica set。

    

    Replica Sets的結構非常類似一個叢集。是的,你完全可以把它當作一個叢集,因為它實現的功能和叢集是一樣的,其中一個節點如果出現故障,其它節點馬上會將業務接過來,而無需停機操作。

    節點的類型:

    standard:常規節點,它儲存一份完整的資料副本,參與選舉投票,有可能成為primary節點。

    passive:儲存了完整的資料副本,參與投票,不能成為primary節點。

    arbiter:仲裁節點,只參與投票,不接收複製的資料,也不能成為primary節點。

    一個repica sets節點數量最好為奇數(odd)。

    配置執行個體(三節點)

    兩個standard節點(這兩個節點直接可以互切primary secondary)。

    一個arbiter節點,它手中握著一張選票,決定上面兩個standard節點中的哪一個可以成為primay。

    圖例:

    

    配置步驟:

    1、啟動三個節點

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

/mongodb/bin/mongod --dbpath=/mongodb/mongodb_date --logpath=/mongodb/mongodb_log/mongod.log --port 27017 --replSet test/192.168.0.12:27017 --maxConns=2000  --logappend

     啟動第二個standard節點 (ip:192.168.0.12)

/mongodb/bin/mongod --dbpath=/mongodb/mongodb_date --logpath=/mongodb/mongodb_log/mongod.log --port 27017 --replSet test/192.168.0.11:27017 --maxConns=2000  --logappend

     啟動arbiter節點,也就是仲裁節點 (ip:192.168.0.13)。注意!--replSet test/後面寫的是兩個standard節點的ip和連接埠

/mongodb/bin/mongod --dbpath=/mongodb/mongodb_date --logpath=/mongodb/mongodb_log/mongod.log --port 27017 --replSet test/192.168.0.11:27017,192.168.0.12:27017  --logappend

    參數說明:  

          --dbpath   資料檔案路徑

          --logpath  記錄檔路徑

          --port        連接埠號碼,預設是27017.我這裡使用的也是這個連接埠號碼.

          --replSet   複製集的名字,一個replica sets中的每個節點的這個參數都要用一個複製集名字,這裡是test.

          --replSet test/  這個後面跟的是其他standard節點的ip和連接埠

          --maxConns   最大串連數

          --fork       後台運行

          --logappend   記錄檔迴圈使用,如果記錄檔已滿,那麼新日誌覆蓋最久日誌。

    2、很關鍵的一步,配置完上面,下面開始初始化各個節點。在第二個啟動的節點上,運行mongo

 db.runCommand({"replSetInitiate" : {    "_id" : "test",    "members" : [    {    "_id" : 0,    "host" : "192.168.0.11:27017"    },    {    "_id" : 1,    "host" : "192.168.0.12:27017"    }    ]}})
View Code

    3、加入arbiter節點

PRIMARY> rs.addArb("192.16.0.13:27017");

    注意!!!

    添加新節點前,一定要配置好防火牆,開放對應的IP及PORT.

    添加普通資料節點:

PRIMARY> rs.add("ip:port")

    刪除節點

PRIMARY> rs.remove("ip:port")

    顯示當前誰是primary

PRIMARY> rs.isMaster()

    將一個普通資料節點修改為passive節點

    除了仲裁節點,其他每個節點都有個優先權,我們可以通過設定優先權來決定誰的成為primay的權重最大。MongoDB replica sets中通過設定priority的值來決定優先權的大小,這個值的範圍是0--100,值越大,優先權越高。如果值是0,那麼不能成為primay。 

    1、通過rs.conf()命令查看出節點列表

 PRIMARY> rs.conf()    {    "_id" : "test",    "version" : 22,    "members" : [    {    "_id" : 3,    "host" : "192.168.22.36:27017"    },    {    "_id" : 5,    "host" : "192.168.22.10:27017"    },    {    "_id" : 6,    "host" : "192.168.22.12:27017",    "priority" : 0,    "arbiterOnly" : true    },    {    "_id" : 7,    "host" : "192.168.22.115:27017"    }    ]    }
View Code

    2、將上面紅色的192.168.22.10節點的priority值修改成0,讓它只接收資料,不參與成為primary的競爭。

    命令格式如下:

 cfg = rs.conf() cfg.members[0].priority = 0.5 cfg.members[1].priority = 2 cfg.members[2].priority = 2 rs.reconfig(cfg)

    紅色中括弧中的數字是執行rs.conf()得出的節點順序,第一個節點在這裡寫0,第二個節點寫1,依次類推。

    執行命令

 cfg = rs.conf() cfg.members[1].priority = 0 rs.reconfig(cfg)

    3.查看結果,192.168.22.10的優先權變為0.

 PRIMARY> rs.conf()    {    "_id" : "test",    "version" : 22,    "members" : [    {    "_id" : 3,    "host" : "192.168.22.36:27017"    },    {    "_id" : 5,    "host" : "192.168.22.10:27017"    "priority" : 0    },    {    "_id" : 6,    "host" : "192.168.22.12:27017",    "priority" : 0,    "arbiterOnly" : true    },    {    "_id" : 7,    "host" : "192.168.22.115:27017"    }    ]    }
View Code

MongoDB整理筆記のReplica Sets

聯繫我們

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