MongoDB複製集部署和基本管理

來源:互聯網
上載者:User

標籤:color   exit   就是   mongod   text   gap   檔案   conf   安全   

MongoDB複製集部署和基本管理MongoDB複製集概述

複製集(Replica Sets)是額外的資料副本,是跨多個伺服器同步資料的過程,複製集提供了冗餘並增加了資料的可用性,通過複製集可以對硬體故障和中斷服務進行恢複。

複製集由下列優點:

  • 讓資料更安全
  • 高資料可用性(7*24)
  • 災難恢複
  • 無停機維護(如備份、索引重建、容錯移轉)
  • 讀縮放(額外的副本讀取)
  • 複本集對應用程式是透明的複製集工作原理

    MongoDB的複製集至少需要兩個節點。其中一個節點是主節點(Primary),負責處理用戶端的請求,其餘的都是從節點(Serondary),負責複製主節點上的資料。

MongoDB各個節點常見的搭配方式為:一主一從或者一主多從。主節點記錄所有打操作到oplog中,從節點定期輪詢主節點擷取這些操作,然後對自己的資料副本執行這些操作。從而保證從節點的資料與主節點一致。如所示:

用戶端在主節點寫入資料,在主節點寫入資料,主節點與從節點進行資料互動保證資料的一致性。如果其中一個節點出現故障,其他節點馬上會將業務接過來,無需停機操作。

MongoDB複製集部署配置多個執行個體

在上一篇的部落格中已經講解了MongoDB開啟多執行個體的方法,這裡就不多贅述,我們用相同的方法建立了四個MongoDB執行個體。在啟動四個執行個體前,先要修改每個執行個體的設定檔,配置replSet參數值都為同一個值,這個值作為複製集的名稱,具體操作如下:

[[email protected] ~]# vim /usr/local/mongodb/bin/mongodb1.conf port=27017dbpath=/data/mongodb1logpath=/data/logs/mongodb/mongodb1.loglogappend=truefork=truemaxConns=5000replSet=kgcrs                     #配置複製集的名稱

在其他的三個執行個體的設定檔中最後一行,加上相同的一句代碼就行。開啟四個執行個體進程。

[[email protected] ~]# export PATH=$PATH:/usr/local/mongodb/bin/#由於之前重啟過,重新設定環境變數[[email protected] ~]# mongod -f /usr/local/mongodb/bin/mongodb1.conf#開啟連接埠號碼為27017的執行個體進程2018-07-17T10:33:29.835+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols ‘none‘about to fork child process, waiting until server is ready for connections.forked process: 3751child process started successfully, parent exiting
初始化配置並啟動複製集

啟動完4個MongoDB執行個體後,下面介紹如何配置並啟動MongoDB複製集。這裡先配置包含3個節點的複製集(後面會再進行添加最後一個執行個體),Primary代表主節點。Secondary代表從節點

[[email protected] bin]# mongod -f /usr/local/mongodb/bin/mongodb2.conf --smallfilesabout to fork child process, waiting until server is ready for connections.forked process: 20207child process started successfully, parent exiting[[email protected] bin]# mongod -f /usr/local/mongodb/bin/mongodb3.conf --smallfilesabout to fork child process, waiting until server is ready for connections.forked process: 20230child process started successfully, parent exiting[[email protected] bin]# mongod -f /usr/local/mongodb/bin/mongodb4.conf --smallfilesabout to fork child process, waiting until server is ready for connections.forked process: 20253child process started successfully, parent exiting

可以看到四個執行個體都已經啟動成功,對應的連接埠號碼都已經開啟。然後進入到連接埠號碼為27017連接埠號碼的執行個體中。

[[email protected] bin]# mongo   #預設就是連接埠號碼為27017的執行個體> cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.100.201:27017"},{"_id":1,"host":"192.168.100.201:27018"},{"_id":2,"host":"192.168.100.201:27019"}]}#這句代碼的意思就是向kgcrs的複製集中添加三個成員> rs.initiate(cfg){ "ok" : 1 }#對複製集進行初始化啟動複製集,啟動複製集後,可以通過rs.status()查看複製集的完整資訊。




增加和刪除節點

配置啟動複製集後,還可以通過rs.add()和rs.remove()命令方便地添加和刪除節點。

kgcrs:PRIMARY> rs.add("192.168.100.201:27020"){ "ok" : 1 }#可以看到27020連接埠的執行個體添加成功kgcrs:PRIMARY> rs.remove("192.168.100.201:27019"){ "ok" : 1 }#可以看到27019連接埠的執行個體被刪除了
MongoDB複製集切換

1、類比故障自動切換

通過kill命令可以停止複製集的當前節點,然後查看主節點會自動切換到其他節點上,可以看到當前連接埠為27017的執行個體為主節點。

[[email protected] bin]# netstat -ntap| grep mongotcp        0      0 0.0.0.0:27019           0.0.0.0:*               LISTEN      20230/mongod        tcp        0      0 0.0.0.0:27020           0.0.0.0:*               LISTEN      20253/mongod        tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      20055/mongod        tcp        0      0 0.0.0.0:27018           0.0.0.0:*               LISTEN      20207/mongod [[email protected] bin]# kill -9 20055 #kill掉27017連接埠的進程kgcrs:SECONDARY> rs.status()#可以看到現在的主節點是連接埠為27019的執行個體


2、手動進行主從切換

首先要先進入到主節點的執行個體中,只有主節點才有許可權進行主從節點切換。

[[email protected] bin]# mongo --port 27019kgcrs:PRIMARY> rs.freeze(30)   #暫停30s不參加選舉{ "ok" : 1 }kgcrs:PRIMARY> rs.stepDown(60,30)  #告訴主節點交出主節點位置,然後維持從節點狀態不少於60s,同時等待30s以使主節點和從節點日誌同步,再次查看狀態,發現主節點已經切換到另外一個執行個體中。2018-07-18T15:52:53.254+0800 I NETWORK  [thread1] trying reconnect to 127.0.0.1:27019 (127.0.0.1) failed2018-07-18T15:52:53.256+0800 I NETWORK  [thread1] reconnect 127.0.0.1:27019 (127.0.0.1) okkgcrs:SECONDARY> rs.status()

複製集的選舉原理複製的原理

複製是基於動作記錄oplog,相當於MySQL中的二進位日誌,只記錄發生改變的記錄。複製是將主機點的oplog日誌同步並應用到其他從節點的過程

選舉的原理

節點類型分為標準(host)節點,被動(passive)節點和仲裁(abriter)節點。

(1)只有標準節點可能被選舉為活躍(primary)節點,由選舉權。被動節點有完整副本,不可能成為活躍節點,有選舉權。仲裁節點不複製資料,不可能成為活躍節點,只有選舉權。

(2)標準節點與被動節點的區別:priority值高者是標準節點,低者則成為被動節點。

(3)選舉規則是票數高者獲勝,priority是優先權為0到1000的值,相當於額外增加0到1000的票數。選舉結果:票數高者獲勝;若票數相同,資料新者獲勝。

配置複製集的優先順序

重新設定4個節點的MongoDB複製集,設定兩個標準節點,喲個被動節點和一個仲裁節點。這個設定要在主節點上配置。

kgcrs:PRIMARY> > cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.58.131:27017","priority":100},{"_id":1,"host":"192.168.58.131:27018","priority":100},{"_id":2,"host":"192.168.58.131:27019","priority":0},{"_id":3,"host":"192.168.58.131:27020","arbiterOnly":true}]}#這句代碼分別設定了四個執行個體的屬性,優先順序kgcrs:PRIMARY> rs.reconfig(cfg){ "ok":1 }

可以看到現在連接埠27018的執行個體,現在是主節點。

類比主節點故障

如果主節點出現故障,另外一個標準節點將會被選舉為新的主節點。

[[email protected] ~]# mongod -f /usr/local/mongodb/bin/mongodb2.conf --shutdown2018-07-22T09:20:02.706+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols ‘none‘killing process with pid: 9639kgcrs:PRIMARY> rs.isMaster()


可以看到27017連接埠的執行個體已經成為主節點。

類比所有標準節點都出現故障

如果所有標準節點出現故障,被動節點和仲裁節點都不能成為主節點。

[[email protected] ~]# mongod -f /usr/local/mongodb/bin/mongodb1.conf --shutdown2018-07-22T09:24:08.290+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols ‘none‘killing process with pid: 9740kgcrs:SECONDARY> rs.isMaster()

MongoDB複製集部署和基本管理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.