mongodb的分布式叢集(2、複本集),mongodb叢集副本

來源:互聯網
上載者:User

mongodb的分布式叢集(2、複本集),mongodb叢集副本
概述

       複本集是主從複製的一種,是一種內建容錯移轉功能的主從複製,解決了上述主從複製的缺點,實現主伺服器發生故障後,不需人為介入,系統自動從新選舉一個新的主伺服器的功能。


部署圖        

       圖是copy別人的,有興趣的可以查看該人的部落格,寫的非常的棒


複本集配置
<strong>   </strong> //啟動伺服器(登入每台伺服器)    mongod --dbpath d:/data/ --replSet repset    //初始化複本集(登入任意一台伺服器)    config = { _id:"repset", members:[                          //_id值 == replSet參數        {_id:0, host:"192.168.1.136:27017"},        {_id:1, host:"192.168.1.137:27017", priority:10},        {_id:2, host:"192.168.1.138:27017", priority:20},        //仲裁節點:僅用於投票,防止選不出主節點,仲裁和非仲裁(僅能在初始化設定)        {_id:3, host:"192.168.1.139:27017", arbiterOnly:true}]        }    rs.initiate(config);
       複本集的配置也是非常的簡單,如上面的配置就可以實現,在複本集中涉及到很多不同類型的節點,大家可以看相應的注釋,有不明的可以再查一下,下面是一些關於複本集的其它方面的操作,大家可以嘗試一下
節點操作    rs.status();                        //查看叢集節點狀態(登入任意一台伺服器)    rs.add("192.168.1.140:27017");      //添加副本節點    rs.remove("192.168.1.140:27017");   //刪除節點節點屬性操作(登入主節點伺服器)    cfg=rs.conf();    //隱藏節點:可投票,可備份資料,不可被用戶端使用(不作主節點)    cfg.members[1].priority=0;    cfg.members[1].hidden=1;    //延遲複製節點:用於備份,延遲從主節點同步資料,避免使用者錯誤    cfg.members[2].priority=0;    cfg.members[2].slaveDelay=3600;    //永副本節點:防止效能不高的節點成為主節點    cfg.members[3].priority=0;    //純備份副本節點:無投票    cfg.members[4].votes=0;    rs.reconfig(cfg);讀寫分離    //設定副本節點可讀(副本節點伺服器)    db.getMongo().setSlaveOk();
       配置好複本集後,我們是無法讀取副本節點伺服器的內容,需要我們進行如下設定,才可以實現讀寫分離,當然,上篇的主從伺服器不需要進行這個設定就可以實現主從複製
    讀寫分離    //設定副本節點可讀(副本節點伺服器)    db.getMongo().setSlaveOk();<strong></strong>

Java用戶端操作       要想實現複本集的讀寫分離,我們需要在java的用戶端上進行相應的設定,下面是java用戶端的核心代碼,當然,首先,我們需要做的是下載相應的mongodb的java驅動
<span style="font-size:18px;">    //分布式叢集(配置多個伺服器,只要有一個可運行就行)    List<ServerAddress> serverAddressList = new ArrayList<ServerAddress>();    serverAddressList.add(new ServerAddress("192.168.24.1", 10000));    serverAddressList.add(new ServerAddress("192.168.24.2", 10000));    MongoClient mongoClient = new MongoClient(serverAddressList);</span>

<span style="font-size:18px;">    //設定讀寫分離    ReadPreference readPreference = ReadPreference.secondaryPreferred();    database.setReadPreference(readPreference);    primary:預設參數,只從主節點上進行讀取操作    primaryPreferred:大部分從主節點上讀取資料,只有主節點不可用時從secondary節點讀取資料    secondary:只從secondary節點上進行讀取操作,存在的問題是secondary節點的資料會比primary節點資料“舊”    secondaryPreferred:優先從secondary節點進行讀取操作,secondary節點不可用時從主節點讀取資料    nearest:不管是主節點、secondary節點,從網路延遲最低的節點上讀取資料。</span>
       上面的代碼不是完整的代碼,是一些比較核心的代碼,如果大家想要實現這個,可以先從單個伺服器讀寫操作的寫起,下面給出一個但伺服器的簡單的java用戶端的實現例子,大家有興趣的可以下載下來看一下。執行個體代碼。該執行個體代碼實現了對mongodb的固定集合和檔案的操作。


複本集的優缺點        優點

              讀寫分離:主節點資料讀寫,預設副本節點無法直接讀寫(可設定唯讀)

              資料備份:副本節點讀取主節點的oplog(動作記錄),執行

              容錯移轉:主節點宕機,系統會自動重選主節點(優先順序0—100越大,備選機會越大)

       缺點

              只有叢集,沒有分布式


說明

  複本集節點數

     最好為奇數:避免選舉不了主節點

    最多12個:複製成本高

    最多7個參與選舉:增加選舉時間


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

相關文章

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.