標籤:lan 程式 port roc data size manual process members
記錄一下,MongoDB的角色建立及配置,以便以後使用
簡介
Replica Set,中文翻譯叫做複本集,不過我並不喜歡把英文翻譯成中文,總是感覺怪怪的。其實簡單來說就是叢集當中包含了多份資料,保證主節點掛掉了,備節點能繼續提供資料服務,提供的前提就是資料需要和主節點一致
Mongodb(M)表示主節點,Mongodb(S)表示備節點,Mongodb(A)表示仲裁節點。主備節點儲存資料,仲裁節點不儲存資料。用戶端同時串連主節點與備節點,不串連仲裁節點。
預設設定下,主節點提供所有增刪查改服務,備節點不提供任何服務。但是可以通過設定使備節點提供查詢服務,這樣就可以減少主節點的壓力,當用戶端進行資料查詢時,請求自動轉到備節點上。這個設定叫做Read Preference Modes,同時Java用戶端提供了簡單的配置方式,可以不必直接對資料庫進行操作。
仲裁節點是一種特殊的節點,它本身並不儲存資料,主要的作用是決定哪一個備節點在主節點掛掉之後提升為主節點,所以用戶端不需要串連此節點。這裡雖然只有一個備節點,但是仍然需要一個仲裁節點來提升備節點層級。我開始也不相信必須要有仲裁節點,但是自己也試過沒仲裁節點的話,主節點掛了備節點還是備節點,所以咱們還是需要它的。
介紹完了叢集方案,那麼現在就開始搭建了。
複本集搭建
1、準備設定檔
# mongod.conf# for documentation of all options, see:# http://docs.mongodb.org/manual/reference/configuration-options/# where to write logging data.systemLog: destination: file logAppend: true path: /home/dd/mongodb/logs/mongod.log #記錄檔存放目錄# Where and how to store data.storage: dbPath: /home/dd/mongodb/db #資料檔案存放目錄 journal: enabled: true# engine:# mmapv1:# wiredTiger:# how the process runsprocessManagement: fork: true #以精靈的方式啟用,即在後台運行 pidFilePath: /home/dd/mongodb/mongod.pid # location of pidfile# network interfacesnet: port: 27017 #連接埠 bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces.#security: #authorization: enabled #operationProfiling:replication:
replSetName: matchData1#sharding:## Enterprise-Only Options#auditLog:#snmp:
紅色標示出複本集的名稱,複本集以此名稱來識別是否屬於同一個叢集中
2、啟動準備好的一台Mongodb資料庫
bin/mongod –f mongo.conf
3、串連到Mongo的admin庫
bin/mongo ip:port/admin
4、增加使用者
use admindb.createUser({user:"root",pwd:"root",roles:["root"]})use balldb.createUser( { user: "basket", pwd: "basket", roles: [{role: "readWrite", db: "ballmatch"}] } )
5、產生keyFile檔案
在伺服器上執行
openssl rand –base64 753 > mongodb.keyfilechmod 600 keyFile
將keyFile配置到Mongo設定檔,同時開啟驗證
security: authorization: enabled keyFile:/home/dd/mongodb/mongodb.keyfile
沒有這個檔案的機器就無法加入複本集,開啟了keyFile,隱含就開啟了auth,這個時候串連複本集就需要進行認證了
6、重啟Mongo服務
7、拷貝到其他伺服器,修改對應得目錄
8、添加複本集配置
cfg={_id:"matchData1", members:[{_id:0, host:‘192.168.10.242:37017‘, priority:1},{_id:1, host:‘192.168.10.242:37018‘, priority:2}, {_id:2, host:‘192.168.10.242:37019‘, arbiterOnly:true}]};rs.initiate(cfg);
cfg:變數名,任意起
_id:”matchData1” 設定檔中配置的複本集名稱
host:Mongodb的ip+連接埠
priority:優先順序,數字越大優先順序越高(0-100),優先順序最高的會是初始的主節點,顯示為PRIMARY。如果不想讓某些成員在故障切換時成為primary,則將它們的優先順序設為0(為0永不會成為主節點)
當複本集切換失敗時,可用如下代碼重新設定:
rs.reconfig(cfg, {force:true});
9、複本集狀態
rs.status()"health" : 1, #代表機器正常 "stateStr" : "PRIMARY", #代表是主節點,可讀寫,其中有以下幾下狀態 1. STARTUP:剛加入到複製集中,配置還未載入 2. STARTUP2:配置已載入完,初始化; 3. RECOVERING:正在恢複,不適用讀 4. ARBITER: 仲裁者 5. DOWN:節點不可到達 6. UNKNOWN:未擷取其他節點狀態而不知是什麼狀態,一般發生在只有兩個成員的架構 7. REMOVED:移除複製集 8. ROLLBACK:資料復原,在復原結束時,轉移到RECOVERING或SECONDARY狀態 9. FATAL:出錯。查看日誌grep “replSet FATAL”找出錯原因,重新做同步 10. PRIMARY:主節點 11. SECONDARY:備份節點
10、維護
前提是這個ip:port必須是使用了同一個relpSet名稱的mongodb執行個體即可
添加副本,在登入到主節點下輸入
rs.add("ip:port");
刪除副本
rs.remove("ip:port");
新增仲裁節點
rs.addArb(“ip:port”);
註:新加入複本集的節點,會自動同步當前複本集已有許可權及資料
MongoDB 3.2.8 複本集搭建