中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MongoDB復制集部署和基本管理

發布時間:2020-07-17 05:40:08 來源:網絡 閱讀:16938 作者:xiaoyaokeyx 欄目:MongoDB數據庫

MongoDB復制集部署和基本管理

MongoDB復制集概述

復制集(Replica Sets)是額外的數據副本,是跨多個服務器同步數據的過程,復制集提供了冗余并增加了數據的可用性,通過復制集可以對硬件故障和中斷服務進行恢復。

復制集由下列優點:

  • 讓數據更安全
  • 高數據可用性(7*24)
  • 災難恢復
  • 無停機維護(如備份、索引重建、故障轉移)
  • 讀縮放(額外的副本讀取)
  • 副本集對應用程序是透明的

    復制集工作原理

    MongoDB的復制集至少需要兩個節點。其中一個節點是主節點(Primary),負責處理客戶端的請求,其余的都是從節點(Serondary),負責復制主節點上的數據。

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

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

MongoDB復制集部署

配置多個實例

在上一篇的博客中已經講解了MongoDB開啟多實例的方法,這里就不多贅述,我們用相同的方法創建了四個MongoDB實例。在啟動四個實例前,先要修改每個實例的配置文件,配置replSet參數值都為同一個值,這個值作為復制集的名稱,具體操作如下:

[root@localhost ~]# vim /usr/local/mongodb/bin/mongodb1.conf 
port=27017
dbpath=/data/mongodb1
logpath=/data/logs/mongodb/mongodb1.log
logappend=true
fork=true
maxConns=5000
replSet=kgcrs                     #配置復制集的名稱

在其他的三個實例的配置文件中最后一行,加上相同的一句代碼就行。開啟四個實例進程。

[root@localhost ~]# export PATH=$PATH:/usr/local/mongodb/bin/
#由于之前重啟過,重新設置環境變量
[root@localhost ~]# 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: 3751
child process started successfully, parent exiting
初始化配置并啟動復制集

啟動完4個MongoDB實例后,下面介紹如何配置并啟動MongoDB復制集。這里先配置包含3個節點的復制集(后面會再進行添加最后一個實例),Primary代表主節點。Secondary代表從節點

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

可以看到四個實例都已經啟動成功,對應的端口號都已經打開。然后進入到端口號為27017端口號的實例中。
MongoDB復制集部署和基本管理

[root@localhost 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()查看復制集的完整信息。

MongoDB復制集部署和基本管理
MongoDB復制集部署和基本管理
MongoDB復制集部署和基本管理
MongoDB復制集部署和基本管理

增加和刪除節點

配置啟動復制集后,還可以通過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的實例為主節點。
MongoDB復制集部署和基本管理

[root@localhost bin]# netstat -ntap| grep mongo
tcp        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 
[root@localhost bin]# kill -9 20055 #kill掉27017端口的進程
kgcrs:SECONDARY> rs.status()
#可以看到現在的主節點是端口為27019的實例

MongoDB復制集部署和基本管理
2、手動進行主從切換

首先要先進入到主節點的實例中,只有主節點才有權限進行主從節點切換。

[root@localhost bin]# mongo --port 27019
kgcrs: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) failed
2018-07-18T15:52:53.256+0800 I NETWORK  [thread1] reconnect 127.0.0.1:27019 (127.0.0.1) ok
kgcrs:SECONDARY> rs.status()

MongoDB復制集部署和基本管理

復制集的選舉原理

復制的原理

復制是基于操作日志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的實例,現在是主節點。
MongoDB復制集部署和基本管理

模擬主節點故障

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

[root@promote ~]# mongod -f /usr/local/mongodb/bin/mongodb2.conf --shutdown
2018-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: 9639
kgcrs:PRIMARY> rs.isMaster()

MongoDB復制集部署和基本管理
可以看到27017端口的實例已經成為主節點。

模擬所有標準節點都出現故障

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

[root@promote ~]# mongod -f /usr/local/mongodb/bin/mongodb1.conf --shutdown
2018-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: 9740
kgcrs:SECONDARY> rs.isMaster()

MongoDB復制集部署和基本管理

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴仁县| 东港市| 清水河县| 金川县| 西畴县| 黄梅县| 芜湖县| 海盐县| 新晃| 景德镇市| 元朗区| 鄄城县| 那坡县| 睢宁县| 乌拉特后旗| 丹凤县| 黔南| 白河县| 沈阳市| 建平县| 黎川县| 山东省| 汪清县| 通化县| 逊克县| 瑞安市| 湾仔区| 道孚县| 上杭县| 乌鲁木齐市| 凯里市| 松溪县| 鲜城| 壶关县| 乌恰县| 肃北| 德江县| 南和县| 岳阳县| 岚皋县| 图片|