MongoDB的複本集Replica Set

來源:互聯網
上載者:User

mongodb不推薦主從複製,推薦建立複本集(Replica Set)來保證1個服務掛了,可以有其他服務頂上,程式正常運行,幾個服務的資料都是一樣的,後台自動同步

【要搭建一個穩定的mongodb工程,複本集是必須的,因為他可以當你的主伺服器掛掉後,根據選舉機制自動選舉出1個最適合的從伺服器來做主伺服器繼續運行】

 Replica Set使用的是n個mongod節點,構建具備自動的容錯功能(auto-failover),自動回復的(auto-recovery)的高可用方案。
 使用Replica Set來實現讀寫分離。通過在串連時指定或者在主庫指定slaveOk,由Secondary來分擔讀的壓力,Primary只承擔寫操作。
 對於Replica Set中的secondary 節點預設是不可讀的。
 

--------------------------------------------------------
 建立4個,3個MONGODB伺服器,1個仲裁伺服器
 步驟1【建立資料存放目錄】
 分別建立4個節點分配資料存放的位置空間
 $  mkdir -p /scmgt/data/r0
 $  mkdir -p /scmgt/data/r1
 $  mkdir -p /scmgt/data/r2
 $  mkdir -p /scmgt/data/r3
 

步驟2【開啟3個mondodb服務】
 後台開啟3個服務,查看連接埠是否暫用命令netstat -apn|grep 1000
 /scmgt/mongodb/mongodb/bin/mongod  --replSet gtSet --dbpath=/scmgt/data/r0 --logpath=/scmgt/mongodb/ro_log --logappend --port=9933 --fork
 /scmgt/mongodb/mongodb/bin/mongod  --replSet gtSet --rest --dbpath=/scmgt/data/r1 --logpath=/scmgt/mongodb/r1_log --logappend --port=9934 --fork
 /scmgt/mongodb/mongodb/bin/mongod  --replSet gtSet --dbpath=/scmgt/data/r2 --logpath=/scmgt/mongodb/r2_log --logappend --port=9935 --fork
 /scmgt/mongodb/mongodb/bin/mongod  --replSet gtSet --dbpath=/scmgt/data/r3 --logpath=/scmgt/mongodb/r3_log --logappend --port=9936 --fork
 
【-replSet gtSet:表示複本集的名字為“wzh”,這裡的名字可以任意取;】
 【--rest:是開啟web監控頁面,比如我們這裡監聽10001連接埠,則開啟http://10.1.49.225:9934/就可以看到這個mongodb資料庫進程的資訊】
 【啟動不起來,如果出現 child process failed, exited with error number 100報錯,請刪除data下面的mongod.lock】
 【查看logpath日誌,提示replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG),這是因為我們還沒有初始化這個set.沒有執行第三步】

步驟3【初始化SET】
 登陸mongodb後台:
 cd /scmgt/mongodb/mongodb/bin         
 ./mongo --port 9933
 把下面config寫入控制台
 config = {_id: 'gtSet', members: [
      {_id: 0, host: 'localhost:9933'},
      {_id: 1, host: 'localhost:9934'},
      {_id: 2, host: 'localhost:9935'},
      {_id: 3, host: 'localhost:9936',arbiterOnly:true}]
 }
  然後執行rs.initiate(config);
 
 【arbiterOnly(false):如果是true,則表示這個成員為仲裁節點,不接收資料;】
 【priority(1.0):權重,更高的權重會被選舉為主節點】
 查看日誌,如果出現
  rs.initiate(config); rs.initiate(config);
 {
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
 }表示將在1分鐘後初始化完畢
 

之後執行 rs.status(),查看詳細
 【這裡有個值"myState",如果這個值為1,說明是主控節點(master);如果是 2 ,說明是從屬節點(slave).】

----------------------搭建完畢,添加資料,來需要驗證的--------------------
 1:主從伺服器資料是否同步,從伺服器沒有讀寫權限
 a:向主伺服器寫入資料  ok  後台自動同步到從伺服器,從伺服器有資料
 b:向從伺服器寫入資料  false 從伺服器不能寫
 c:主伺服器讀取資料  ok
 d:從伺服器讀取資料  false 從伺服器不能讀 

 

2:關閉主伺服器,從伺服器是否能頂替
 kill -2 9933的pid
 mongo的命令列執行rs.status()  發現PRIMARY替換了主機了
 

3:關閉的伺服器,再恢複,以及主從切換
 a:直接啟動關閉的服務,rs.status()中會發現,原來掛掉的主伺服器重啟後變成從伺服器了
 b:額外刪除新的伺服器  rs.remove("localhost:9933"); rs.status()
 c:額外增加新的伺服器 rs.add({_id:0,host:"localhost:9933",priority:1});
 d:讓新增的成為主伺服器  rs.stepDown(),注意之前的 priority投票
     
 4:從伺服器讀寫
 db.getMongo().setSlaveOk();
 db.getMongo().slaveOk();//從庫唯讀,沒有寫入權限,這個方法java裡面不推薦了
 db.setReadPreference(ReadPreference.secondaryPreferred());//在複製集中優先讀secondary,如果secondary訪問不了的時候就從master中讀
 db.setReadPreference(ReadPreference.secondary());//只從secondary中讀,如果secondary訪問不了的時候就不能進行查詢
 

-------------------------------------------------------------------
 日誌查看
 MongoDB的Replica Set 架構是通過一個日誌來儲存寫操作的,這個日誌就叫做”oplog”,它存在於”local”資料庫中,oplog的大小是可以通過mongod的參數”—oplogSize”來改變oplog的日誌大小。
 

use local
 switched to db local
 db.oplog.rs.find()
 { "ts" : { "t" : 1342511269000, "i" : 1 }, "h" : NumberLong(0), "op" : "n", "ns" : "", "o" : { "msg" : "initiating set" } }
 

欄位說明:
 ts: 某個操作的時間戳記
 op: 操作類型,如下:
 i: insert
 d: delete
 u: update
 ns: 命名空間,也就是操作的collection name
 o: document的內容

 

MongoDB 的詳細介紹:請點這裡
MongoDB 的:請點這裡

MongoDB備份與恢複

CentOS編譯安裝MongoDB

CentOS 編譯安裝 MongoDB與mongoDB的php擴充

CentOS 6 使用 yum 安裝MongoDB及伺服器端配置

Ubuntu 13.04下安裝MongoDB2.4.3

如何在MongoDB中建立新資料庫和集合

MongoDB入門必讀(概念與實戰並重)

《MongoDB 權威指南》(MongoDB: The Definitive Guide)英文文字版[PDF]

聯繫我們

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