MongoDB 3.2.8 副本集搭建


記錄一下,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”);

注:新加入副本集的節點,會自動同步當前副本集已有權限及數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM