MongoDB副本集、分片集的伪分布式部署(保姆级教程)
目錄
1 集群架構(gòu)(概念篇)
1.1 MongoDB核心組件
1.2?主從復(fù)制
1.3 副本集
1.4 分片集
2 集群搭建
2.1 部署副本集(偽分布式)
2.2 分片集部署(偽分布式)
2.3 副本集與分片集區(qū)別
1 集群架構(gòu)(概念篇)
????????MongoDB有三種集群部署模式,分別是主從復(fù)制(Master-Slave)、副本集(ReplicaSet)、分片集(Sharding)。采用集群架構(gòu)復(fù)制的目的:保證數(shù)據(jù)生產(chǎn)部署時的冗余和可靠性,采用不同的機器來保存副本,數(shù)據(jù)不會因為單點故障而丟失。讀寫分離,提高數(shù)據(jù)的讀取能力。故障轉(zhuǎn)移、故障恢復(fù)。
1.1 MongoDB核心組件
💥Mongod:?處理所有的數(shù)據(jù)請求、管理數(shù)據(jù)的增刪改查操作。默認的數(shù)據(jù)目錄/data/db,默認端口27017,默認主機地址localhost。
💥Mongo:MongoDB提供的一個Mongo shell客戶端,便于用戶與MongoDB之間的交互。啟動Mongo默認連接到localhost:270127的test數(shù)據(jù)庫。
💥Mongos: 用于MongoDB分片集的路由選擇,對來自于應(yīng)用層的查詢請求進行處理,平判斷所請求的數(shù)據(jù)位于分片集的哪個位置。
1.2?主從復(fù)制
? ? ? ? 1??主從復(fù)制模式的集群只能有一個主節(jié)點,主節(jié)點提供所有的增刪改查服務(wù),從節(jié)點不提供服務(wù),但是可以通過設(shè)置從節(jié)點提供查詢服務(wù),這樣可以減少主節(jié)點的壓力。2??此外,每個從節(jié)點都要知道主節(jié)點的地址以及主節(jié)點的各個操作,從節(jié)點定期輪詢主節(jié)點獲取操作,并對自己的數(shù)據(jù)副本進行這些操作,從而保證主從節(jié)點數(shù)據(jù)的一致性。3??主節(jié)點出現(xiàn)故障,只能人工介入指定新的主節(jié)點,在此期間整個集群數(shù)據(jù)只能被讀而無法修改。
1.3 副本集
Primary主節(jié)點:與主從復(fù)制一樣,副本集中也只能有一個主節(jié)點,向外對客戶端提供數(shù)據(jù)讀寫的服務(wù),執(zhí)行的寫操作信息保存在oplog中。不同的是,副本集中的主節(jié)點發(fā)生故障時,仲裁節(jié)點觸發(fā)選舉,在所有的從節(jié)點中選出一個作為新的主節(jié)點,即使后續(xù)舊的主節(jié)點恢復(fù)正常,也會以從節(jié)點的身份加入到集群。
Secondary從節(jié)點:從節(jié)點只提供讀數(shù)據(jù)的服務(wù),并且從節(jié)點定期輪詢oplog日志文件,根據(jù)日志內(nèi)容同步更新自身的數(shù)據(jù),使之保持與主節(jié)點一致。
Arbiter仲裁節(jié)點:仲裁節(jié)點不存儲任何數(shù)據(jù),只記錄集群的節(jié)點數(shù)以及主節(jié)點發(fā)生故障時觸發(fā)選舉機制進行仲裁。仲裁節(jié)點和其他節(jié)點之間的唯一通信就是選舉期間的投票、心跳信息。
1.4 分片集
????????副本集可以解決主節(jié)點發(fā)生故障所導(dǎo)致的數(shù)據(jù)丟失或不可用的問題,但遇到需要存儲海量數(shù)據(jù)的情況,副本集就無法解決了。此時就用到了MongoDB的分片集操作,所謂分片就是將數(shù)據(jù)拆分并分散存儲在不同機器上的過程。
? ? ? ? 什么時間進行分片操作:1.單個節(jié)點的磁盤空間不足時。2.單個mongod已經(jīng)不能滿足寫數(shù)據(jù)的性能要求,通過分片讓寫壓力分散到各個分片服務(wù)器上。3.把大量數(shù)據(jù)放到內(nèi)存里提高性能,通過分片利用多臺分片服務(wù)器的內(nèi)存資源。
Shard Server分片服務(wù)器:每一個分片服務(wù)器都是一個mongod進程,用于存儲實際的數(shù)據(jù)塊。實際生產(chǎn)中,一個分片服務(wù)器往往有多臺機器組成一個副本集來共同承擔(dān),防止因主節(jié)點的單點故障而崩潰整個系統(tǒng)。
Config Server配置服務(wù)器:同樣是一個mongod進程,用來保存集群和分片的元數(shù)據(jù),在集群啟動的最開始時建立。
Route Server路由服務(wù)器:是一個獨立的mongos進程(即不儲存數(shù)據(jù)的mongod進程),啟動時要從配置服務(wù)器加載集群信息到緩存中(分片集群要首先啟動配置服務(wù)器的原因),并將客戶端的請求路由給每個分片服務(wù)器,在各分片服務(wù)器返回結(jié)果后進行聚合并返回客戶端。
2 集群搭建
2.1 部署副本集(偽分布式)
建議開三個終端界面,分別操作三個節(jié)點,這樣操作比較直觀。
1??首先需要有三個節(jié)點或者說三個mongod進程
localhost:27017
localhost:27018
localhost:27019
2??創(chuàng)建并配置三個配置文件來開啟三個節(jié)點
/user/local/mongodb4.4.1/conf/rs_mongod1.conf
/user/local/mongodb4.4.1/conf/rs_mongod2.conf
/user/local/mongodb4.4.1/conf/rs_mongod3.conf
配置文件內(nèi)容如下:
三個配置文件中的port端口為對應(yīng)節(jié)點的端口,必須更改成
涉及到路徑的配置項path、dbpath里面的路徑目錄文件都必須創(chuàng)建,帶后綴的是文件不帶后綴的是目錄,別創(chuàng)建錯了
replSetName是副本集的名字,一個副本集里的三個節(jié)點的三個配置文件里都必須一樣。
systemLog:destination: filepath: /var/log/mongodb/rs_mongod1.loglogAppend: true storage:dbPath: /usr/local/mongodb4.4.1/data/rs_mongod1journal:enabled: true processManagement:fork: true net:bindIp: localhostport: 27017 replication:oplogSizeMB: 100replSetName: my_repl enableMajorityReadConcern: true3??使用配置文件開啟節(jié)點服務(wù)
開啟節(jié)點服務(wù)需要先進入配置文件所在目錄,開啟服務(wù)成功后才能連接節(jié)點
#開啟節(jié)點服務(wù) sudo mongod --config rs_mongod1.conf#連接節(jié)點,進入shell操作界面 #mongo后面的是連接節(jié)點的ip和端口 mongo localhost:270174??主節(jié)點初始化
剛剛創(chuàng)建的三個節(jié)點默認都是從節(jié)點,從節(jié)點在未設(shè)置可讀之前無法讀取數(shù)據(jù),故此時show dbs會報錯,這就需要初始化主節(jié)點,使其中的一個從節(jié)點成為主節(jié)點。
var rsconf={_id:"my_repl",members:[{_id:1,host:“l(fā)ocalhost:27017"},{_id:2,host:“l(fā)ocalhost:27018"},{_id:3,host:“l(fā)ocalhost:27019"}]}rs.initiate(rsconf) #初始化Primary rs.status( ) #查看副本集狀態(tài)此時,進行初始化操作的節(jié)點就會成為主節(jié)點。
5??從節(jié)點、仲裁節(jié)點設(shè)置
下面的三個操作都是在主節(jié)點的shell里完成的,主節(jié)點才有權(quán)對其他節(jié)點進行設(shè)置
#將該節(jié)點作為從節(jié)點加入集群中 rs.add("localhost:27019")#將節(jié)點設(shè)置成仲裁節(jié)點 rs.addArb("localhost:27019")#從集群中刪除節(jié)點 rs.remove("localhost:27019")從節(jié)點設(shè)置為可讀
rs.slaveOK()對哪個節(jié)點的操作就要在哪個節(jié)點的shell界面進行設(shè)置
💥💥💥副本集操作完成后不能直接關(guān)閉終端,必須必須必須使用兩次exit先退出shell再退出節(jié)點服務(wù)最后關(guān)閉虛擬機,否則下次再開啟節(jié)點服務(wù)時,會因為直接關(guān)閉終端或者虛擬機而導(dǎo)致服務(wù)異常關(guān)閉,從而無法正常開啟服務(wù),處理起來會很麻煩。
2.2 分片集部署(偽分布式)
建議開三個終端界面,分別操作三個服務(wù)器副本集,這樣操作比較直觀。
?1??首先需要有三個服務(wù)器節(jié)點或者說兩個mongod、一個mongos進程
localhost:27017? ? ? ? 配置服務(wù)器(mongod)
localhost:27018? ? ? ? 路由服務(wù)器(mongos)
localhost:27019? ? ? ? 分片服務(wù)器(mongod)
2??創(chuàng)建并配置三個配置文件來完成分片集的主要架構(gòu)
????????這里為了減少計算機部署分片集群的壓力,采用配置服務(wù)器單成員副本集,路由服務(wù)器,分片服務(wù)器單成員副本集。單成員模式的副本集,即只用一個節(jié)點作為主節(jié)點加入到副本集中,完成一個最簡單的副本集。若想要搭建更加完善的分片集群,只需多創(chuàng)建幾個節(jié)點并加入到副本集中即可。
💥配置服務(wù)器(Config Server)副本集
1.配置文件及其內(nèi)容:
/user/local/mongodb4.4.1/conf/shard/configsvr.conf
配置文件中的port端口為對應(yīng)節(jié)點的端口,必須更改
涉及到路徑的配置項path、dbpath里面的路徑目錄文件都必須創(chuàng)建,帶后綴的是文件不帶后綴的是目錄,別創(chuàng)建錯了
storage:dbPath: /usr/local/mongodb4.4.1/data/configsvr journal:enabled: true systemLog:destination: filepath: /var/log/mongodb/shard/configsvr.loglogAppend: true net:bindIp: localhost port: 27017 processManagement:fork: true sharding:clusterRole: configsvr replication:replSetName: configsvr_rs2.初始化主節(jié)點:
開啟節(jié)點服務(wù)需要先進入配置文件所在目錄,開啟服務(wù)成功后才能連接節(jié)點
#開啟節(jié)點服務(wù) sudo mongod --config configsvr.conf#連接節(jié)點,進入shell操作界面 mongo localhost:27017#主節(jié)點初始化 rs.initiate({_id: "configsvr_rs",configsvr: true,members: [{ _id : 0, host : “l(fā)ocalhost:27017" },]})💥路由服務(wù)器(Route Server)
1.配置文件及其內(nèi)容
/user/local/mongodb4.4.1/conf/shard/mongos.conf
配置文件中的port端口為對應(yīng)節(jié)點的端口,必須更改
涉及到路徑的文件都要創(chuàng)建有后綴是文件,無后綴是目錄
路由服務(wù)器不存儲數(shù)據(jù)故不需要dbPath(與其他兩個結(jié)點的區(qū)別)
systemLog:destination: filepath: /var/log/mongodb/shard/mongos.loglogAppend: true net:bindIp: localhost port: 27018 processManagement:fork: true sharding:configDB: configsvr_rs/localhost:27017開啟節(jié)點服務(wù)需要先進入配置文件所在目錄,開啟服務(wù)成功后才能連接節(jié)點
sudo mongos --config mongos.config💥分片服務(wù)器(Shard Server)副本集
1.配置文件及內(nèi)容
/user/local/mongodb4.4.1/conf/shard/shardsvr.conf
storage:dbPath: /usr/local/mongodb4.4.1/data/shardsvr journal:enabled: true systemLog:destination: filepath: /var/log/mongodb/shard/shardsvr.loglogAppend: true net:bindIp: localhostport: 27019 processManagement:fork: true sharding:clusterRole: shardsvr replication:replSetName: shardsvr_rs12.初始化主節(jié)點
#開啟節(jié)點服務(wù) sudo mongod --config shardsvr.conf#連接節(jié)點,進入shell操作界面 mongo localhost:27019#主節(jié)點初始化 rs.initiate({_id : "shardsvr_rs1",members: [{ _id : 0, host : “l(fā)ocalhost:27019" },]})3??進入mongos shell界面操作整個分片集
進入mongos shell界面
mongo localhost:27018添加分片服務(wù)器副本集到分片集群中
sh.addShard("shardsvr_rs1/localhost:27019,")再創(chuàng)建一個分片服務(wù)器副本集并加入到分片集群
參照上文分片服務(wù)器副本集,先創(chuàng)建并配置一個節(jié)點的配置文件,使用配置文件開啟服務(wù),進入shell界面初始化主節(jié)點,進入mongos的shell界面使用sh.addShard()將其添加入集群。
4??數(shù)據(jù)庫、集合分片操作?
💥💥💥分片集操作完成后同樣不能直接關(guān)閉終端,必須必須必須使用兩次exit先退出shell再退出節(jié)點服務(wù)最后關(guān)閉虛擬機,否則下次再開啟節(jié)點服務(wù)時,會因為直接關(guān)閉終端或者虛擬機而導(dǎo)致服務(wù)異常關(guān)閉,從而無法正常開啟服務(wù),處理起來會很麻煩。
2.3 副本集與分片集區(qū)別
副本集是讓多臺服務(wù)器都擁有同樣的數(shù)據(jù)副本,每一臺服務(wù)器都是其他服務(wù)器的鏡像。然而分片集中的每一個分片都和其他分片擁有不同的數(shù)據(jù)子集,相當(dāng)于分布式存儲。
總結(jié)
以上是生活随笔為你收集整理的MongoDB副本集、分片集的伪分布式部署(保姆级教程)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python在浏览器运行一片空白_Web
- 下一篇: css 涟漪,CSS3水波涟漪动画定位样