mongodb副本集

一、節點類型
standard:常規節點,它存儲一份完整的數據副本,參與選舉投票,有可能成爲活躍節點。
 
passive:存儲了完整的數據副本,參與投票,不能成爲活躍節點。
arbiter:仲裁節點,只參與投票,不接收復制的數據,也不能成爲活躍節點。
二、主從複製的集羣還是有兩點區別的。

      <1>:  該集羣沒有特定的主數據庫。

      <2>:  如果哪個主數據庫宕機了,集羣中就會推選出一個從屬數據庫作爲主數據庫頂上,這就具備了自動故障恢復功能

注:
1、不需要像mysql一樣複製完整數據過去,叢庫啓動會制動複製主庫完整數據。
2、叢庫自動配置爲只讀。
3、mongodb第一次啓動時間較長,需要注意等待。
4、管理命令多數都要在admin庫中執行use admin

三、創建副本集

  

1. 環境說明: 
     ip:192.168.1.228  (初始計劃設定其爲master)
     ip:192.168.1.227 (初始計劃設定其爲slave)
     ip:192.168.1.229 (初始計劃設定其爲arbiter ,即仲裁服務器)
 2. 爲副本集取名weijh
    配置229啓動文件:   
dbpath=/usr/data/mongodb/data/db
port=27017
logpath=/usr/data/mongodb/log/mongodb.log
logappend=true
journal=true
fork=true
replSet=weijh/192.168.1.228

配置228啓動文件:
dbpath=/usr/data/mongodb/data/db
port=27017
logpath=/usr/data/mongodb/log/mongodb.log
logappend=true
journal=true
fork=true
replSet=weijh/192.168.1.229

配置227啓動文件:
dbpath=/usr/data/mongodb/data/db
port=27017
logpath=/usr/data/mongodb/log/mongodb.log
logappend=true
journal=true
fork=true
replSet=weijh/192.168.1.228

配置結束後,重啓服務
 
3、 在瀏覽器打開鏈接
看到我們需要初始化節點
 
4、初始化節點
 
我們連接到其中一個節點上,並使用replSetInitiate命令進行初始化。此命令需要一個配置對象,指定設定的每個成員的名字。
在228節點上進行初始化(隨便連接一下哪個服務器都行,不過一定要進入admin集合)
1)執行命令:
   出現錯誤:
2)清除數據庫下所有新創建的數據庫信息
3)再次執行命令
 
5、查看狀態:
瀏覽器主節點查看:
 
09:57:02 [ReplSetHealthPollTask] replSet info 192.168.1.229:27017 is up
           09:57:02 [ReplSetHealthPollTask] replSet member 192.168.1.229:27017 STARTUP2
           09:57:02 [rs Manager] replSet info electSelf 1
           09:57:02 [rs Manager] replSet PRIMARY
           09:57:04 [initandlisten] connection accepted from 192.168.1.229:46257 #7
           09:57:04 [initandlisten] connection accepted from 192.168.1.229:46258 #8
           09:57:04 [conn8] end connection 192.168.1.229:46258
           09:57:04 [initandlisten] connection accepted from 192.168.1.229:46259 #9
           09:57:04 [conn9] end connection 192.168.1.229:46259
           09:57:04 [ReplSetHealthPollTask] replSet member 192.168.1.229:27017 RECOVERING
           09:57:04 [conn7] end connection 192.168.1.229:46257
           09:57:05 [initandlisten] connection accepted from 192.168.1.229:46260 #10
           09:57:06 [ReplSetHealthPollTask] replSet member 192.168.1.229:27017 SECONDARY
           09:57:06 [slaveTracking] building new index on { _id: 1 } for local.slaves

瀏覽器從節點關鍵信息查看:
09:57:03 [ReplSetHealthPollTask] replSet member 192.168.1.228:27017 PRIMARY
           09:57:04 [replica set sync] ******
           09:57:04 [replica set sync] replSet initial sync pending
           09:57:04 [replica set sync] replSet syncing to: 192.168.1.228:27017
           09:57:04 [replica set sync] building new index on { _id: 1 } for local.me
           09:57:04 [dur] lsn set 139505
           09:57:04 [replica set sync] done for 0 records 0.045secs
           09:57:04 [replica set sync] replSet initial sync drop all databases
           09:57:04 [replica set sync] dropAllDatabasesExceptLocal 1
           09:57:04 [replica set sync] replSet initial sync clone all databases
           09:57:04 [replica set sync] replSet initial sync cloning db: admin
           09:57:04 [replica set sync] replauthenticate: no user in local.system.users to use for authentication
replSet initial sync query minValid
           09:57:04 [replica set sync] replSet initial sync initial oplog application
           09:57:04 [replica set sync] replSet initial sync finishing up
           09:57:04 [replica set sync] replSet set minValid=52575ae3:1
           09:57:04 [replica set sync] building new index on { _id: 1 } for local.replset.minvalid
           09:57:04 [replica set sync] done for 0 records 0secs
           09:57:04 [replica set sync] replSet initial sync done
           09:57:05 [replica set sync] replSet SECONDARY

   
rs.status()
6、添加仲裁節點
   我們在admin集合中使用rs.addArb()追加即可
  
rs.addArb("192.168.1.227")
查看狀態:
該仲裁節點不參與數據的複製,只是參與投票選擇主節點而已
在該節點爲not reachable/healthy的狀態下是起不到投票主節點的作用的。刪除227服務琪上的db文件,重啓
查看狀態:
添加仲裁節點成功
 
7、在主節點添加數據:
 
從節點查看數據信息
 
在從節點228上可以同步到主節點的數據信息,但無法查看
 
8、228主幾點宕掉,查看229狀態
    
可以看到229 從secondary變味primary了
 
9、啓動228,但是228不再爲primary了,而爲secondary了
 
10、首先這是正常的,因爲SECONDARY是不允許讀寫的, 在寫多讀少的應用中,使用Replica Sets來實現讀寫分離。通過在連接時指定或者在主庫指定slaveOk,由Secondary來分擔讀的壓力,Primary只承擔寫操作。對於replica set 中的secondary 節點默認是不可讀的:
weijh:SECONDARY> use testCp
switched to db testCp
weijh:SECONDARY> show collections
Fri Oct 11 10:09:36 uncaught exception: error: { "$err" : "not master and slaveok=false", "code" : 13435 }
若需要SECONDARY可以執行讀的操作,在SECONDARY執行slaveok方法
weijh:SECONDARY> db.getMongo()
connection to 127.0.0.1
weijh:SECONDARY> db.getMongo().setSlaveOk()
not master and slaveok=false

執行查詢操作測試:

 
參考資料網頁:
發佈了23 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章