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個參與選舉:增加選舉時間
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。