使用副本集搭建MongoDB叢集

壹頁書發表於2014-05-15
MongoDB的副本集,我的理解就是自帶故障轉移的主從複製。

叢集的入口還是主節點,資料也是從主節點分發,這個和MySQL都是一致的。
和MySQL Master-Slave不一樣的是,副本集記錄各個節點的心跳資訊。
一旦主節點不可用,其餘的節點會推舉一個新的主節點,進行故障轉移,而這些操作對於應用是透明的。


mongodb新建副本集的時候,從節點必須是空庫,沒有任何資料。
測試環境如下
192.168.25.128 主節點
192.168.25.129 從節點
192.168.25.130 從節點
配置檔案如下(三個節點都是同樣的配置)
dbpath=/home/lihuilin/Desktop/data
smallfiles=true
replSet=mvbox
其中replSet是叢集的名稱

三個節點啟動之後,在主節點輸入叢集配置
  1. config = { _id:"mvbox", members:[
  2. {_id:0,host:"192.168.25.128:27017"},
  3. {_id:1,host:"192.168.25.129:27017"},
  4. {_id:2,host:"192.168.25.130:27017"}]
  5. }
  6. rs.initiate(config);
結果如下



檢視自己是否是主節點

檢視叢集狀態


使用JAVA程式測試MongoDB叢集
  1. import java.util.*;
  2. import com.mongodb.*;

  3. public class MongoTest {
  4.         public static void main(String[] args) {
  5.  
  6.                try {
  7.                      List<ServerAddress> addresses = new ArrayList<ServerAddress>();
  8.                      ServerAddress address1 = new ServerAddress("192.168.25.128" , 27017);
  9.                      ServerAddress address2 = new ServerAddress("192.168.25.129" , 27017);
  10.                      ServerAddress address3 = new ServerAddress("192.168.25.130" , 27017);
  11.                      addresses.add(address1);
  12.                      addresses.add(address2);
  13.                      addresses.add(address3);
  14.  
  15.                      MongoClient client = new MongoClient(addresses);
  16.                      DB db = client.getDB( "mvbox");
  17.                      DBCollection coll = db.getCollection( "song");
  18.  
  19.                      BasicDBObject object = new BasicDBObject();
  20.                      object.append( "s1", "test1" );
  21.  
  22.                      coll.insert(object);
  23.  
  24.                      DBCursor dbCursor = coll.find();
  25.  
  26.                       while (dbCursor.hasNext()) {
  27.                            DBObject dbObject = dbCursor.next();
  28.                            System. out.println(dbObject.toString());
  29.                      }
  30.  
  31.               } catch (Exception e) {
  32.                      e.printStackTrace();
  33.               }
  34.  
  35.        }
  36.  
  37. }
插入一條記錄


然後將主節點關機,模擬故障
原來129的從節點被選舉為新的主節點。


再次執行JAVA程式,
可以看到前端的JAVA程式不受影響.


參考:
http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html
http://www.cnblogs.com/huangxincheng/archive/2012/02/18/2356595.html
http://www.w3cschool.cc/mongodb/mongodb-tutorial.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1161835/,如需轉載,請註明出處,否則將追究法律責任。

相關文章