摘要:下一小節我會和大家分享如何在真實的生產環境中創建副本集。好了,中副本集的搭建我們就先說到這里,小伙伴們有問題歡迎留言討論。
我們之前的案例都是在單個節點上實現的,在生產環境中這種做法是有風險的,如果服務宕機、崩潰或者硬盤壞了都會對公司業務造成損失,因此我們需要數據備份。在MongoDB中我們可以通過副本集來實現這一需求,MongoDB副本集(Replica Set)是有自動故障恢復功能的主從集群,有一個Primary節點和一個或多個Secondary節點組成,如果Primary崩潰了,會自動從Secondary中選擇一個將其升級為新的主服務器,本文我們先來看看副本集環境的搭建。
本文是MongoDB系列的第十五篇文章,了解前面的文章有助于更好的理解本文:
1.Linux上安裝MongoDB
2.MongoDB基本操作
3.MongoDB數據類型
4.MongoDB文檔更新操作
5.MongoDB文檔查詢操作(一)
6.MongoDB文檔查詢操作(二)
7.MongoDB文檔查詢操作(三)
8.MongoDB查看執行計劃
9.初識MongoDB中的索引
10.MongoDB中各種類型的索引
11.MongoDB固定集合
12.MongoDB管道操作符(一)
13.MongoDB管道操作符(二)
14.MongoDB中MapReduce使用
我們在實際的生產環境中肯定是多臺服務器部署,但是在自己學習過程中,我們可以在一臺服務器上來模擬這個環境,這樣可以簡化我們的操作,讓小伙伴們快速上手。下一小節我會和大家分享如何在真實的生產環境中創建副本集。
好了,開始吧。
首先我們在Linux根目錄下創建/data/db目錄作為我們的數據保存目錄,然后執行如下命令啟動一個mongo shell:
mongo --nodb
--nodb表示啟動時不連接任何數據庫,然后通過如下命令創建一個副本集:
replicaSet=new ReplSetTest({nodes:3})
在創建的日志中,我們可以看到三個實例的端口號,我這里分別是20000、20001、20002,此時我們的副本集創建好了,但是并未啟動,接下來執行如下命令啟動三個mongodb實例:
replicaSet.startSet()
再執行如下命令配置復制功能:
replicaSet.initiate()
這樣環境基本就配好了,此時當前的shell不要關閉,我們重新打開一個Linux命令窗口,執行如下命令:
mongo 192.168.248.128:20000/sang_1
表示連接端口為20000的那個實例中的sang_1數據庫,連接成功后,我們可以執行如下命令查看當前實例的身份,如下:
db.isMaster()
返回的數據很多,其中有一條是"ismaster" : true,表示這是一個主節點,此時我們再分別打開兩個Linux窗口,分別執行如下兩條命令,進入另外兩個節點:
mongo 192.168.248.128:20001/sang_1 mongo 192.168.248.128:20002/sang_1
連接成功之后,依然可以通過db.isMaster()命令來查看備份節點的身份,我們發現此時"ismaster" : false,表示這是一個備份節點,此時我們可以先做個簡單的測試了,此時我在主節點(端口為20000)那個節點上寫一個文檔,寫完之后,我們看看其他副本集成員上是否有我剛才的寫的文檔的副本,執行命令順序如下:
主節點寫入數據:
db.collect1.insert({x:"hahaha"})
任意一個副本節點,先執行如下命令表示可以從備份節點讀取數據:
db.setSlaveOk()
然后再在備份節點中執行如下命令讀取數據:
db.collect1.find()
此時,我們發現數據已經備份成功了。
如果此時我們嘗試向備份節點中直接寫入文檔,會發現寫入失敗,這里需要注意備份節點中的數據都是備份來的,不可以直接寫入,想寫入,除非等它的身份轉為主節點才可以。
此時,我們嘗試通過如下命令關閉主節點:
use admin db.shutdownServer()
然后查看兩個備份節點的db.isMaster(),發現有一個備份節點自動上位成為了主節點。
最后如果想關閉副本集,可以回到第一個shell命令行中,輸入如下命令:
replicaSet.stopSet()多臺服務器模擬
OK,以上操作是我們單臺服務器模擬搭建副本集,方便我們做實驗,在生產環境中,我們可能有多個服務器,多臺服務器又要如何搭建副本集呢?各位看官繼續向下看。
首先準備好三臺裝好了MongoDB的服務器,地址分別如下:
192.168.248.128 192.168.248.135 192.168.248.136
修改每臺服務器的配置文件mongodb.conf,添加replSet=rs,表示副本集的名稱,修改后的配置文件內容如下:
dbpath=/opt/mongodb/db logpath=/opt/mongodb/logs/mongodb.log port=27017 fork=true replSet=rs
修改完成之后,分別啟動三臺服務器上的MongoDB,啟動成功之后,連接上任意一臺的shell,連接成功之后,先定義配置文件,如下:
config={_id:"rs",members:[{_id:0,host:"192.168.248.128:27017"},{_id:1,host:"192.168.248.135:27017"},{_id:2,host:"192.168.248.136:27017"}]}
id后面跟著的是副本集的名稱,也就是我們在mongodb.conf中定義的名稱,后面三個是副本集的成員,定義好之后,再執行如下命令初始化副本集:
rs.initiate(config)
初始化成功之后,我們就可以通過rs.status()來查看副本集的狀態,也可以看到每個服務器的角色,部分日志內容如下:
{ "members" : [ { "_id" : 0, "name" : "192.168.248.128:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", }, { "_id" : 1, "name" : "192.168.248.135:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "syncingTo" : "192.168.248.128:27017" }, { "_id" : 2, "name" : "192.168.248.136:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "syncingTo" : "192.168.248.128:27017", } ] }
我們可以看到每臺服務器的角色,有primary,也有secondary,secondary上還注明了從哪個服務器上同步數據。所有這些工作做好之后,我們就可以按照上文介紹的方式來測一下這里的副本集了,測試工作我就不再重復介紹了。
好了,MongoDB中副本集的搭建我們就先說到這里,小伙伴們有問題歡迎留言討論。
參考資料:
1.《MongoDB權威指南第2版》
更多資料請關注公眾號:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19147.html
摘要:搭建分片分區集群環境安裝三臺機器關閉防火墻主節點副節點仲裁仲裁主節點副節點副節點仲裁主節點端口分配下載并且安裝所有版本二進制文件自行下載改名分別在每臺機器建立六個目錄,因為不存儲數據,只需要建立日志文件目錄即可。 搭建 MongoDB分片(sharding) / 分區 / 集群環境 1. 安裝 MongoDB 三臺機器 關閉防火墻 systemctl stop firewalld.se...
摘要:我們可以在添加節點時指定優先級,如下也可以為已有的節點設置優先級好了,中副本集的配置我們就先說到這里,小伙伴們有問題歡迎留言討論。 上篇文章我們搭建了MongoDB副本集的環境,驗證了數據已經可以成功的復制,本文我們就來看看MongoDB副本集的其他操作。 本文是MongoDB系列的第十六篇文章,了解前面的文章有助于更好的理解本文: 1.Linux上安裝MongoDB 2.Mo...
摘要:復制一份,命名為,修改文件內容如下注意改為我們第一步創建的目錄,端口號改為這個隨意,只要該端口沒被占用即可,表示這是一個配置服務器,另外由于我們的配置服務器要做成備份集,所以要設置。 分片是指將數據拆分,拆分后存放在不同的機器上的過程,以此來降低單個服務器的壓力,同時也解決單個服務器硬盤空間不足的問題,讓我們可以用廉價的機器實現高性能的數據架構。有的小伙伴不理解分片和副本集的差異,一言...
摘要:集群搭建方式主從復制目前官方已不推薦使用副本集的副本集不同于以往的主從模式。分片是一種可以水平擴展的模式在數據量很大時特給力實際大規模應用一般會采用這種架構去構建。 mongodb集群搭建方式 1.master-slave 主從復制 目前官方已不推薦使用 2.Replica Sets 副本集 showImg(https://segmentfault.com/img/bVbsIpa?w=...
摘要:當一個原本運行正常的成員無法訪問到時,該成員就處于的狀態。成員被從副本集中移除時就變成這個狀態。表示當前服務器最后一次收到其他成員心跳的時間。表示同步的數據源。 副本集環境的搭建以及一些基本的操作我們都了解了,本文我們來看看這個數據復制到底是怎么實現的。 本文是MongoDB系列的第十七篇文章,了解前面的文章有助于更好的理解本文: 1.Linux上安裝MongoDB 2.Mon...
閱讀 3100·2021-09-22 15:54
閱讀 3988·2021-09-09 11:34
閱讀 1772·2019-08-30 12:48
閱讀 1164·2019-08-30 11:18
閱讀 3437·2019-08-26 11:48
閱讀 921·2019-08-23 17:50
閱讀 2123·2019-08-23 17:17
閱讀 1246·2019-08-23 17:12