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 副本集與分片集區別

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535154.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535154.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535154.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

非關型數據庫之MongoDB

目錄 1 MongoDB簡介 1.1 初識MongoDB 1.2 MongoDB與傳統的關系型數據庫的區別 1.3 MongoDB存儲結構 1.4 BSON支持的數據類型 2 MongoDB Shell操作 3 MongoDB集群操作 1 MongoDB簡介 1.1 初識MongoDB MongoDB來源自英文單詞"Humongous”,譯為“龐大的”…

【手把手 腦把腦】教會你使用idea基于MapReduce的統計數據分析(從問題分析到代碼編寫)

目錄 1 編程前總分析 1.1 數據源 1.2 需要掌握的知識 1.2.1 Hadoop對比java的數據類型 1.2.2 MapReduce流程簡介 1.3.3 MapReduce流程細分 2 編碼階段 2.1 導入依賴 2.2 mapper 2.3 reducer 2.4 main 1 編程前總分析 1.1 數據源 英語,李沐,85,男,20 數學,李沐,54,男…

【細節拉滿】Hadoop課程設計項目,使用idea編寫基于MapReduce的學生成績分析系統(附帶源碼、項目文件下載地址)

目錄 1 數據源(學生成績.csv) 2 hadoop平臺上傳數據源 3 idea代碼 3.1 工程框架 3.2 導入依賴 3.3 系統主入口(menu) 3.4 六個mapreduce 3.4.1 計算每門成績的最高分、最低分、平均分(Mma) 3.4.2 計算每個學生的總分及平均成績并進行排序(Sas) 3.4.3 統計所有學生的信…

【單位換算】存儲單位(bit Byte KB MB GB TB PB EB ZB YB BB)時間單位(ms μs ns ps)長度單位(dm cm mm μm nm pm fm am zm ym)

存儲單位 相鄰單位相差2?,記憶時可以此類推 一字節等于八比特 1 Byte 8 bit 1KB 1024 B 2? B 1MB 1024 KB 2? B 1GB 1024 MB 2? B 1TB 1024 GB 2?? B 1PB 1024 TB 2?? B 1EB 1024 PB 2?? B 1ZB 1024 EB 2?? B 1YB 1024 ZB 2?? B 1B…

Git 的安裝、使用、分支、命令 一篇博客全都學會

目錄 1 版本控制 1.1 什么是版本控制 1.2 為什么需要版本控制 2 Git概述 2.1 Git的工作機制 2.2 分布式版本控制工具與集中式的區別 2.3 Git是如何誕生的 3 Git的安裝 4 Git常用命令 4.1 用戶簽名的設置和修改 4.2 查看用戶簽名的設置 4.3 初始化本地庫 4.4 添加、…

生成一個GitHub的token用于git推送本地庫至遠程庫

1 一步步選擇設置 2 使用鏈接直接跳轉到最后一步的設置頁 git push 的時候需要token,所以在GitHub上生成一個臨時的token 1 一步步選擇設置 2 使用鏈接直接跳轉到最后一步的設置頁 前提是你已經在這個瀏覽器上登陸了GitHub https://github.com/settings/tokens

都2021年了,還不會使用GitHub創建、推送、拉取、克隆遠程庫、團隊協作開發?

1 對自己的遠程庫操作 1.1 在GitHub上創建遠程庫 1.2 推送本地庫至遠程庫 1.3 拉取遠程庫到本地庫 1.4 克隆遠程倉庫到本地 2 對別人的遠程庫兩種操作方式 2.1 使用GitHub進行團隊內協作開發 2.2 使用GitHub進行跨團隊協作開發 眾所周知,GitHub是一個大型的國…

2021 最新 IDEA集成Gitee、Gitee遷移GitHub【圖文講解】

1 創建遠程庫 2 IDEA集成Gitee 2.1 安裝gitee插件并綁定賬號 2.2 IDEA推送本地庫至遠程庫的兩種方式 2.3 修改后推送本地庫至遠程庫 2.4 拉取遠程庫 2.5 使用IDEA克隆遠程庫 3 Gitee遷移GitHub的遠程庫的兩種方式 3.1 自己的賬戶之間遷移 3.2 使用鏈接進行遷移 3.3 強制刷…

只需五步學會Maven 3.6.1OR 3.6.3及其他版本的下載安裝與配置【圖文詳解】

第一步,下載并解壓縮包 ?第二步,配置兩個環境變量 ?第三步,測試是否安裝成功 ?第四步,指定本地倉庫的路徑 第五步,修改鏡像倉庫 第一步,下載并解壓縮包 Maven官方下載地址:https://mav…

只需四步完成java JDK1.8的下載安裝與配置【圖文詳解】

第一步,下載安裝包并安裝 第二步,安裝JDK 第三步,配置三個環境變量 第四步,測試是否安裝成功 第一步,下載安裝包并安裝 Oracle的官方下載地址:https://www.oracle.com/java/technologies/downloads/#ja…

從Maven中央倉庫網站下載jar包的兩種方式,將會伴隨java后端開發者的整個職業生涯

這個肥腸重要的網站就是:https://mvnrepository.com/ 下面我會以mysql-connector-java-8.0.26.jar為例,教會你使用兩種方式下載使用jar包資源 首先在搜索欄使用全稱或者是關鍵字對jar包進行搜索 選擇你想要的版本 方式一:導入pom文件依賴(…

2021 使用IDEA創建并編寫你的第一個Maven項目【圖文詳解】

1 使用IDEA創建你的第一個Maven項目 2 使用IDEA編寫一個Maven項目 1 使用IDEA創建你的第一個Maven項目 新建一個空白項目 File-->New-->Project-->Empty Project 在IDEA中配置JDK 在IDEA中配置Maven 新建一個Maven模塊 在test目錄下面新建一個resources文件夾 2 使…

能讓你的Intellij IDEA 起飛的幾個設置(設置背景 字體 快捷鍵 鼠標懸停提示 提示忽略大小寫 取消單行顯示)

1 設置主題(背景圖片) 2 設置字體 2.1 設置默認的字體及其大小、行間距**墻裂推薦** 2.2 設置字體大小可以隨意改變**墻裂推薦** 3 設置鼠標懸停提示 4 提示的時候忽略大小寫**墻裂推薦** ??5 取消單行顯示tabs**墻裂推薦** 6 修改類頭的文檔注釋信息 7 設置項目文…

控制臺:Unable to import maven project: See logs for details日志:Unable to create injector, see the follow

問題描述: 當我在使用IDEA 完成一個Maven項目的時候,在第一步的pom.xml文件導入依賴時就發生了這個問題,彈窗彈出Uable to import maven project 控制臺報 Unable to import maven project: See logs for details的異常。 既然人家都讓查看l…

Maven基礎教程

1 Maven簡介 2 Maven基礎概念 2.1 倉庫 2.2 坐標 3 依賴的相關知識點 4 生命周期與插件 5 使用Inteli idea完成第一個Maven項目 1 Maven簡介 Maven的本質就是一個項目管理工具,用于將項目開發和管理過程抽象成一個項目對象模型(project object model POM) Ma…

java實現編輯距離算法(levenshtein distance),計算字符串或者是文本之間的相似度【附代碼】

編輯距離算法其實就是,在規定的編輯操作(替換字符串、插入字符串、刪除字符串)中,經過幾步可以把一個字符串變成另一個字符串,而這個所需的步數就是你的編輯距離。 測試樣例: str1 abc str2 yabd 表里的每一個值都代表著將s…

【Java從入門到頭禿專欄 】(一)學在Java語法之前

目錄 1 初識Java 2 Java環境JDK 3 Java規范 1 初識Java Java是美國的sun(Stanford University Network)公司在1995年推出的一門計算機高級編程語言,雖然說當時參與開發Java的人員有好幾名,但是業內公認的Java之父是詹姆斯高斯林(James Gosling)。 Jav…

【Java從入門到頭禿專欄 】(二) 注釋 數據類型 變量 常量 關鍵字 標識符 運算符 輸入輸出

目錄 1 注釋 2 數據類型 3 變量與常量 4 關鍵字、標識符 5 運算符 6 鍵入值、輸出值 1 注釋 注釋就是寫在程序中對代碼進行解釋說明的文字,方便自己和其他人查看,以便大家更加容易理解程序。注釋雖然寫在程序中,但是并不參與程序的執行&#…

【Java從入門到頭禿專欄 】(三) 控制流程 Math Date DateFormat Calendar System BigDecimal Random

目錄 1 控制流程 2 Math類 3 Date類 4 DateFormat類 5 Calendar類(日歷類) 6 System類 7 BigDecimal類 8 Random類(隨機數) 1 控制流程 1.1 塊作用域 塊(即復合語句)就是指由若干條Java語句組成的語句,并用一條大括號括起來,并借此形式確定了變量…

IntelliJ IDEA最常用的一些快捷鍵,學會了室友還以為你在祖安對線

目錄 1 快速生成語句 1.1 main語句 1.2 輸出語句 1.3 流程控制語句 1.3.1 if判斷語句 1.3.2 while循環 1.3.3 for循環 1.3.4 數組、集合的循環操作 1.3.5 迭代器循環操作 1.4 對象實例化、定義變量 1.5 try-catch異常 2 快捷鍵 2.1 Ctrl系列 2.2 alt系列 2.2.1…