【Mongodb】 可複製集搭建

可複製集 replica set

概念圖
mongodb

可複製集須要至少3個以上的mongodb節點,其中有一個主節點promary,其他的爲副本節點secondary安全

可複製集有三個角色:服務器

  • 主要成員(Primary):主要接收全部寫操做。就是主節點。
  • 副本成員(Secondary):從主節點經過複製操做以維護相同的數據集,即備份數據,不可寫操做,但能夠讀操做(但須要配置)。是默認的一種從節點類型。
  • 仲裁者(Arbiter):不保留任何數據的副本,只具備投票選舉做用。固然也能夠將仲裁服務器維護爲副本集的一部分,即副本成員同時也能夠是仲裁者。也是一種從節點類型。

關於仲裁者:
若是主節點+副本節點是偶數推薦添加仲裁者,若是主節點+ 副本節點是奇數能夠不添加仲裁者。仲裁者將永遠是仲裁者,而主要人員可能會退出併成爲次要人員,而次要人員可能成爲選舉期間的主要人員。負載均衡

爲何要用可複製集?它有什麼重要性?

  1. 避免數據丟失,保障數據安全,提升系統安全性;
    (最少3節點,最大50節點)
  2. 自動化災備機制,主節點宕機後經過選舉產生新主機;提升系統健壯性;
    (7個選舉節點上限)
  3. 讀寫分離,負載均衡,提升系統性能;

搭建

準備三個mongodb節點

正準備三個mongodb節點,咱們先搭建一個主節點,2個副本節點的模式
修改配置mongo.conf性能

  • 第一個
systemLog:
  #MongoDB發送全部日誌輸出的目標指定爲文件 
  destination: file
  #mongod或mongos應向其發送全部診斷日誌記錄信息的日誌文件的路徑 
  path: "/home/amber/mongodb/mongodb-001/log/mongod.log" 
  #當mongos或mongod實例從新啓動時,mongos或mongod會將新條目附加到現有日誌文件的末尾。 
  logAppend: true
storage: 
  #mongod實例存儲其數據的目錄。storage.dbPath設置僅適用於mongod。 
  dbPath: "/home/amber/mongodb/mongodb-001/data/db" 
  journal:
    #啓用或禁用持久性日誌以確保數據文件保持有效和可恢復。 
    enabled: true
processManagement:
  #啓用在後臺運行mongos或mongod進程的守護進程模式。 
  fork: true 
  #指定用於保存mongos或mongod進程的進程ID的文件位置,其中mongos或mongod將寫入其PID 
  pidFilePath: "/home/amber/mongodb/mongodb-001/log/mongod.pid" 
net:
  #服務實例綁定全部IP,有反作用,副本集初始化的時候,節點名字會自動設置爲本地域名,而不是ip 
  #bindIpAll: true 
  #服務實例綁定的IP 
  bindIp: 0.0.0.0
  #bindIp 
  #綁定的端口 
  port: 27017
replication: 
  #副本集的名稱 
  replSetName: myrs
  • 第二個第三個配置
    把上述文件中的mongodb-001換成mongodb-002``mongodb-003
    端口分別換成27018 27019

而後分別在mongodb-00X的根目錄下執行啓動命令測試

./bin/mongod -f ./conf/mongod.conf

檢查進程命令行

ps -ef|grep mongod

設置主節點

進入27017的那個mongod的客戶端,而且執行3d

rs.initiate({
      _id: "myrs", //  須要和replSetName的名稱一致
      version: 1,
      members: [{ _id: 0, host : "192.168.xx.xx:27017" }]});

或者日誌

rs.initiate({})

執行結果code

提示:
1)「ok」的值爲1,說明建立成功。
2)命令行提示符發生變化,變成了一個從節點角色,此時默認不能讀寫。稍等片刻,回車,變成主節  點。

配置副本節點

再27017的mongod客戶端,也就是主節點上執行192.168.xx.xx:27018是副本節點的ip和端口

rs.add("192.168.xx.xx:27018")
rs.add("192.168.xx.xx:27019")

使用

rs.status()

就能夠看到members會有三個節點了

測試

再主節點插入一條數據

use article;
db.comment.insert({name: "amber"})

再從節點查看,結果

這是由於須要再從節點再次進行

rs.slaveok() // 確認當前節點是副本節點
db.comment.find(); // 查看當前數據

能夠看到已經有數據了,這樣一主二從的可複製成功了

若是關閉主節點,在從節點執行rs.status();
能夠看到原來的主節點的health變成了0

27018變成了新的主節點

相關文章
相關標籤/搜索