日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MongoDB副本集、分片集的伪分布式部署(保姆级教程)

發布時間:2025/3/8 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MongoDB副本集、分片集的伪分布式部署(保姆级教程) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1 集群架構(概念篇)

1.1 MongoDB核心組件

1.2?主從復制

1.3 副本集

1.4 分片集

2 集群搭建

2.1 部署副本集(偽分布式)

2.2 分片集部署(偽分布式)

2.3 副本集與分片集區別


1 集群架構(概念篇)

????????MongoDB有三種集群部署模式,分別是主從復制(Master-Slave)、副本集(ReplicaSet)、分片集(Sharding)。采用集群架構復制的目的:保證數據生產部署時的冗余和可靠性,采用不同的機器來保存副本,數據不會因為單點故障而丟失。讀寫分離,提高數據的讀取能力。故障轉移、故障恢復。

1.1 MongoDB核心組件

💥Mongod:?處理所有的數據請求、管理數據的增刪改查操作。默認的數據目錄/data/db,默認端口27017,默認主機地址localhost。

💥Mongo:MongoDB提供的一個Mongo shell客戶端便于用戶與MongoDB之間的交互。啟動Mongo默認連接到localhost:270127的test數據庫。

💥Mongos: 用于MongoDB分片集的路由選擇,對來自于應用層的查詢請求進行處理,平判斷所請求的數據位于分片集的哪個位置。

1.2?主從復制

? ? ? ? 1??主從復制模式的集群只能有一個主節點,主節點提供所有的增刪改查服務,從節點不提供服務,但是可以通過設置從節點提供查詢服務,這樣可以減少主節點的壓力。2??此外,每個從節點都要知道主節點的地址以及主節點的各個操作,從節點定期輪詢主節點獲取操作,并對自己的數據副本進行這些操作,從而保證主從節點數據的一致性。3??主節點出現故障,只能人工介入指定新的主節點,在此期間整個集群數據只能被讀而無法修改。

1.3 副本集

Primary主節點:與主從復制一樣,副本集中也只能有一個主節點,向外對客戶端提供數據讀寫的服務,執行的寫操作信息保存在oplog中。不同的是,副本集中的主節點發生故障時,仲裁節點觸發選舉,在所有的從節點中選出一個作為新的主節點,即使后續舊的主節點恢復正常,也會以從節點的身份加入到集群。

Secondary從節點:從節點只提供讀數據的服務,并且從節點定期輪詢oplog日志文件,根據日志內容同步更新自身的數據,使之保持與主節點一致。

Arbiter仲裁節點:仲裁節點不存儲任何數據,只記錄集群的節點數以及主節點發生故障時觸發選舉機制進行仲裁。仲裁節點和其他節點之間的唯一通信就是選舉期間的投票、心跳信息。

1.4 分片集

????????副本集可以解決主節點發生故障所導致的數據丟失或不可用的問題,但遇到需要存儲海量數據的情況,副本集就無法解決了。此時就用到了MongoDB的分片集操作,所謂分片就是將數據拆分并分散存儲在不同機器上的過程。

? ? ? ? 什么時間進行分片操作:1.單個節點的磁盤空間不足時。2.單個mongod已經不能滿足寫數據的性能要求,通過分片讓寫壓力分散到各個分片服務器上。3.把大量數據放到內存里提高性能,通過分片利用多臺分片服務器的內存資源。

Shard Server分片服務器:每一個分片服務器都是一個mongod進程,用于存儲實際的數據塊。實際生產中,一個分片服務器往往有多臺機器組成一個副本集來共同承擔,防止因主節點的單點故障而崩潰整個系統。

Config Server配置服務器:同樣是一個mongod進程,用來保存集群和分片的元數據,在集群啟動的最開始時建立。

Route Server路由服務器:是一個獨立的mongos進程(即不儲存數據的mongod進程),啟動時要從配置服務器加載集群信息到緩存中(分片集群要首先啟動配置服務器的原因),并將客戶端的請求路由給每個分片服務器,在各分片服務器返回結果后進行聚合并返回客戶端。

2 集群搭建

2.1 部署副本集(偽分布式)

建議開三個終端界面,分別操作三個節點,這樣操作比較直觀。

1??首先需要有三個節點或者說三個mongod進程

localhost:27017

localhost:27018

localhost:27019

2??創建并配置三個配置文件來開啟三個節點

/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

配置文件內容如下:

三個配置文件中的port端口為對應節點的端口,必須更改成

涉及到路徑的配置項path、dbpath里面的路徑目錄文件都必須創建,帶后綴的是文件不帶后綴的是目錄,別創建錯了

replSetName是副本集的名字,一個副本集里的三個節點的三個配置文件里都必須一樣。

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: true

3??使用配置文件開啟節點服務

開啟節點服務需要先進入配置文件所在目錄,開啟服務成功后才能連接節點

#開啟節點服務 sudo mongod --config rs_mongod1.conf#連接節點,進入shell操作界面 #mongo后面的是連接節點的ip和端口 mongo localhost:27017

4??主節點初始化

剛剛創建的三個節點默認都是從節點,從節點在未設置可讀之前無法讀取數據,故此時show dbs會報錯,這就需要初始化主節點,使其中的一個從節點成為主節點。

var rsconf={_id:"my_repl",members:[{_id:1,host:“localhost:27017"},{_id:2,host:“localhost:27018"},{_id:3,host:“localhost:27019"}]}rs.initiate(rsconf) #初始化Primary rs.status( ) #查看副本集狀態

此時,進行初始化操作的節點就會成為主節點。

5??從節點、仲裁節點設置

下面的三個操作都是在主節點的shell里完成的,主節點才有權對其他節點進行設置

#將該節點作為從節點加入集群中 rs.add("localhost:27019")#將節點設置成仲裁節點 rs.addArb("localhost:27019")#從集群中刪除節點 rs.remove("localhost:27019")

從節點設置為可讀

rs.slaveOK()

對哪個節點的操作就要在哪個節點的shell界面進行設置

💥💥💥副本集操作完成后不能直接關閉終端,必須必須必須使用兩次exit先退出shell再退出節點服務最后關閉虛擬機,否則下次再開啟節點服務時,會因為直接關閉終端或者虛擬機而導致服務異常關閉,從而無法正常開啟服務,處理起來會很麻煩。

2.2 分片集部署(偽分布式)

建議開三個終端界面,分別操作三個服務器副本集,這樣操作比較直觀。

?1??首先需要有三個服務器節點或者說兩個mongod、一個mongos進程

localhost:27017? ? ? ? 配置服務器(mongod)

localhost:27018? ? ? ? 路由服務器(mongos)

localhost:27019? ? ? ? 分片服務器(mongod)

2??創建并配置三個配置文件來完成分片集的主要架構

????????這里為了減少計算機部署分片集群的壓力,采用配置服務器單成員副本集,路由服務器,分片服務器單成員副本集。單成員模式的副本集,即只用一個節點作為主節點加入到副本集中,完成一個最簡單的副本集。若想要搭建更加完善的分片集群,只需多創建幾個節點并加入到副本集中即可。

💥配置服務器(Config Server)副本集

1.配置文件及其內容:

/user/local/mongodb4.4.1/conf/shard/configsvr.conf

配置文件中的port端口為對應節點的端口,必須更改

涉及到路徑的配置項path、dbpath里面的路徑目錄文件都必須創建,帶后綴的是文件不帶后綴的是目錄,別創建錯了

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_rs

2.初始化主節點:

開啟節點服務需要先進入配置文件所在目錄,開啟服務成功后才能連接節點

#開啟節點服務 sudo mongod --config configsvr.conf#連接節點,進入shell操作界面 mongo localhost:27017#主節點初始化 rs.initiate({_id: "configsvr_rs",configsvr: true,members: [{ _id : 0, host : “localhost:27017" },]})

💥路由服務器(Route Server)

1.配置文件及其內容

/user/local/mongodb4.4.1/conf/shard/mongos.conf

配置文件中的port端口為對應節點的端口,必須更改

涉及到路徑的文件都要創建有后綴是文件,無后綴是目錄

路由服務器不存儲數據故不需要dbPath(與其他兩個結點的區別)

systemLog:destination: filepath: /var/log/mongodb/shard/mongos.loglogAppend: true net:bindIp: localhost port: 27018 processManagement:fork: true sharding:configDB: configsvr_rs/localhost:27017

開啟節點服務需要先進入配置文件所在目錄,開啟服務成功后才能連接節點

sudo mongos --config mongos.config

💥分片服務器(Shard Server)副本集

1.配置文件及內容

/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_rs1

2.初始化主節點

#開啟節點服務 sudo mongod --config shardsvr.conf#連接節點,進入shell操作界面 mongo localhost:27019#主節點初始化 rs.initiate({_id : "shardsvr_rs1",members: [{ _id : 0, host : “localhost:27019" },]})

3??進入mongos shell界面操作整個分片集

進入mongos shell界面

mongo localhost:27018

添加分片服務器副本集到分片集群中

sh.addShard("shardsvr_rs1/localhost:27019,")

再創建一個分片服務器副本集并加入到分片集群

參照上文分片服務器副本集,先創建并配置一個節點的配置文件,使用配置文件開啟服務,進入shell界面初始化主節點,進入mongos的shell界面使用sh.addShard()將其添加入集群。

4??數據庫、集合分片操作?

💥💥💥分片集操作完成后同樣不能直接關閉終端,必須必須必須使用兩次exit先退出shell再退出節點服務最后關閉虛擬機,否則下次再開啟節點服務時,會因為直接關閉終端或者虛擬機而導致服務異常關閉,從而無法正常開啟服務,處理起來會很麻煩。

2.3 副本集與分片集區別

副本集是讓多臺服務器都擁有同樣的數據副本,每一臺服務器都是其他服務器的鏡像。然而分片集中的每一個分片都和其他分片擁有不同的數據子集,相當于分布式存儲。

總結

以上是生活随笔為你收集整理的MongoDB副本集、分片集的伪分布式部署(保姆级教程)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。