記錄一下,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 runs processManagement: fork: true #以守護程序的方式啟用,即在后台運行 pidFilePath: /home/dd/mongodb/mongod.pid # location of pidfile # network interfaces net: 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 admin db.createUser({user:"root",pwd:"root",roles:["root"]}) use ball db.createUser( { user: "basket", pwd: "basket", roles: [{role: "readWrite", db: "ballmatch"}] } )
5、生成keyFile文件
在服務器上執行
openssl rand –base64 753 > mongodb.keyfile chmod 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”);
注:新加入副本集的節點,會自動同步當前副本集已有權限及數據