mongodb集群之分片集群

目錄

  • 1. 適用場景
  • 2. 集群搭建
    • 如何搭建
    • 搭建實例
      • Linux搭建實例(待定)
      • Windows搭建實例
        • 1.資源規劃
        • 2. 配置conf文件
        • 3. 按順序啟動不同角色的mongodb實例
        • 4. 初始化config、shard集群信息
        • 5. 通過router進行分片配置

1. 適用場景

  • 數據量大影響性能

數據量大概達到千萬級或億級的時候,數據庫相關的操作效率可能會下降,這時候可以考慮分片,減小壓力

  • 部分數據遷移
    想要把當前數據庫中某幾個集合的一部分遷移出去時,可以借助分片的效果實現。這個需求一般優先考慮其他方法,因為搭建分片需要一點時間,而且事后需要恢復到原來的模式。所以建議只當成一種可選或備用方案,或者其他方案效率更低或者不可以用時可以考慮使用這個方法。

說明:上面僅為工作中遇到的場景,還有其他場景。

2. 集群搭建

如何搭建

1.資源規劃
1)節點規劃
官網介紹中mongodb分片式集群架構包含了router、config、shard三種不同類型的節點,他們之間的聯系如下圖:
 圖片源:https://www.mongodb.com/zh-cn/docs/manual/sharding/
圖片源:https://www.mongodb.com/zh-cn/docs/manual/sharding/

在官方文檔中,給出了不同環境下節點個數的建議。對于正式環境,官方推薦方案如圖,也就是說config、shard都要配置成副本集模式,且節點最好為3個以上,即推薦至少10個節點,其中,config為3個節點以上的副本集群,shard1為3個節點以上的副本集群,shard2為3個節點以上的副本集群,router至少1個。
在這里插入圖片描述
對于測試的話,至少需要三個節點,即router、config、shards各一個節點。
在這里插入圖片描述

說明:configs、shards如果只配置一個節點也必須配置成副本集,如果不配置成副本集無法啟動對應實例為configs、shards。

關于配置幾個分片,官方也給了建議:
在這里插入圖片描述

2)服務器資源規劃
跟副本集一樣,考慮服務器、端口、相關文件位置(一般會需要數據、日志、配置、pid等文件,數據和配置是必須的,其他的根據自己的需求),方便后續操作和運維。

  • 服務器:如果是遷移用可以根據實際情況選擇,如果是業務用,一般選擇多個服務器,而不是同一臺服務器
  • 端口:一般使用默認端口27017,但有的時候為了安全或者端口已經被占用的情況,就需要根據實際需求和情況另選
  1. 配置conf文件
  2. 按順序啟動不同角色的mongodb實例
  3. 初始化config、shard集群信息
  4. 通過router進行分片配置

搭建實例

Linux搭建實例(待定)

Windows搭建實例

1.資源規劃

1)節點規劃:一個router、一個config集群(3個節點)、兩個分片集群(每個集群3個節點)
2)服務器資源規劃
以單臺服務器為例進行測試
在這里插入圖片描述
對應物理文件結構如下面的圖,分別用于對應mongo實例的數據、配置文件、日志文件位置。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
因為每個shard和config都使用了3個節點的集群,所以節點數量比較多,配置也相對較多。

2. 配置conf文件

這一步既是區分是否是集群,也是區分是什么集群的關鍵。在分片模式,router、config、shard的配置稍有差別,具體如下:
shard1配置文件

#mongodb端口
port=37027#綁定ip,只有這個ip才可以訪問上mongodb;0.0.0.0表示所有的都可以訪問,如果要做安全管控可以限制ip
bind_ip=0.0.0.0# 日志文件的路徑
logpath=D:\mysoftware\MongoDB\zone\ser1\log\mongodb37027.log# 數據文件的目錄
dbpath=D:\mysoftware\MongoDB\zone\ser1\data0-1#日志以追加的方式存在
logappend=true# fork=true linux以后臺方式啟動,在window上沒有用# 此參數較大比較好,單位是 MB,默認是磁盤可用空間的 5%
oplogSize=1024# 復制集的名稱,同一個復制集的名稱必須要相同
replSet=myreplace1

shard2只需要把replSet=myreplace1中的myreplace1換成對應副本集名稱以及對應實例的端口、文件位置即可。
說明:這里對于充當shard的配置參數可以寫在配置文件中,也可以在啟動時加在啟動命令上。
yml格式的配置:

sharding:
# 指定當前節點在分片集群中的角色(shardsvr代表分片節點)clusterRole: shardsvr

啟動命令指定:

mongod.exe --shardsvr --config "D:\mysoftware\MongoDB\zone\ser1\data0-1\s1config1.conf"

非yml格式如何配置
說明:這個還沒試過,不確定對不對,要驗證一下。

sharding.clusterRole = shardsvr

config集群配置文件:

bind_ip=0.0.0.0
port=27027
dbpath=D:\mysoftware\MongoDB\zone\config\c1
logpath=D:\mysoftware\MongoDB\zone\config\log\config1.log
logappend=true
replSet=config# 這里加入configsvr參數配置,表名用于充當config
configsvr=trueoplogSize=1024

router配置文件:
router的配置中并沒有dbpath,因為它只充當一個轉發角色,并不實際存儲數據,實際數據是來源于分片。

bind_ip=0.0.0.0
port=17017# mongos.log 需要提前在 los 中建好
logpath=D:\mysoftware\MongoDB\zone\router\log\mongos17017.log
logappend=true
#這里使用的是config的ip和端口,所以可以先配置config的,再配router,不容易混亂
configdb=config/localhost:27027,localhost:27028,localhost:27029
3. 按順序啟動不同角色的mongodb實例

啟動順序:config、shard、router
啟動config:

mongod.exe  --config "D:\mysoftware\MongoDB\zone\config\c1\config1.conf"

啟動shard:

mongod.exe --shardsvr --config "D:\mysoftware\MongoDB\zone\ser1\data0-1\s1config1.conf"

注意事項:如果配置文件中沒有配置是否充當shard,需要加上–shardsvr參數

啟動router:

mongos.exe  --config "D:\mysoftware\MongoDB\zone\router\17017.conf"

注意事項:啟動router的時候使用的是mongos而不是mongod,否則報錯:

Error parsing INI config file: unrecognised option ‘configdb‘
4. 初始化config、shard集群信息

shard1集群

mongosh.exe --port 37027
rs.initiate({_id : "myreplace1",members : [{_id : 0,host : "localhost:37027","priority":10},{_id : 1,host : "localhost7:37028"},{_id : 2,host : "localhost:37029"}]
});

shard2集群

mongosh.exe --port 47027
rs.initiate({_id : "myreplace2",members : [{_id : 0,host : "localhost:47027","priority":10},{_id : 1,host : "localhost:47028"},{_id : 2,host : "localhost7:47029"}]
});

config集群

mongosh.exe --port 27027
rs.initiate({_id : "config",members : [{_id : 0,host : "localhost:27027","priority":10},{_id : 1,host : "localhost:27028"},{_id : 2,host : "localhost:27029"}]
});
5. 通過router進行分片配置

進入router:

mongosh.exe --port 17017

添加分片1:

sh.addShard("myreplace1/localhost:37027,localhost:37028,localhost:37029")

添加分片2:

sh.addShard("myreplace2/localhost:47027,localhost:47028,localhost:47029")

說明:配置到spring boot中的話,直接配置router的信息就行,如果單獨想用某個分片的,也可以配置對應分片的信息,都是連接的。

參考教程:
主要參考:https://www.cnblogs.com/niCong/p/17071290.html
這個主要參考通過conf文件配置實例角色:https://new-coder.com/pc/post/c48555c9362b

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

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

相關文章

DEEPSEEK幫寫的STM32消息流函數,直接可用.已經測試

#include "main.h" #include "MessageBuffer.h"static RingBuffer msgQueue {0};// 初始化隊列 void InitQueue(void) {msgQueue.head 0;msgQueue.tail 0;msgQueue.count 0; }// 檢查隊列狀態 type_usart_queue_status GetQueueStatus(void) {if (msgQ…

華為歐拉系統中部署FTP服務與Filestash應用:實現高效文件管理和共享

華為歐拉系統中部署FTP服務與Filestash應用:實現高效文件管理和共享 前言一、相關服務介紹1.1 Huawei Cloud EulerOS介紹1.2 Filestash介紹1.3 華為云Flexus應用服務器L實例介紹二、本次實踐介紹2.1 本次實踐介紹2.2 本次環境規劃三、檢查云服務器環境3.1 登錄華為云3.2 SSH遠…

React---day5

4、React的組件化 組件的分類: 根據組件的定義方式,可以分為:函數組件(Functional Component )和類組件(Class Component);根據組件內部是否有狀態需要維護,可以分成:無狀態組件(Stateless Component )和…

測試策略:AI模型接口的單元測試與穩定性測試

測試策略:AI模型接口的單元測試與穩定性測試 在構建支持AI能力的系統中,開發者不僅要關注業務邏輯的正確性,也必須保障AI模型接口在各種環境下都能穩定運行。這就要求我們在開發階段制定清晰的測試策略,從功能驗證到性能保障,逐步推進系統可用性、可維護性與可擴展性的提…

UniApp 生產批次管理模塊技術文檔

UniApp 生產批次管理模塊技術文檔 1. 運行卡入站頁面 (RunCardIn) 1.1 頁面結構 <template><!-- 頁面容器 --><view class"runCardIn" :style"{ paddingTop: padding }"><!-- 頁頭組件 --><pageHeader :title"$t(MENU:…

針對Helsinki-NLP/opus-mt-zh-en模型進行雙向互翻的微調

引言 ?題目聽起來有點怪怪的&#xff0c;但是實際上就是對Helsinki-NLP/opus-mt-en-es模型進行微調。但是這個模型是單向的&#xff0c;只支持中到英的翻譯&#xff0c;反之則不行。這樣的話&#xff0c;如果要做中英雙向互翻就需要兩個模型&#xff0c;那模型體積直接大了兩倍…

Object轉Map集合

對象與 Map 轉換詳解&#xff1a; Object.entries() 和 Object.fromEntries() 1&#xff0c;Object.fromEntries() 的主要用途就是將鍵值對集合&#xff08;如 Map&#xff09;轉換為普通對象。 2&#xff0c;Object.entries() 返回一個二維數組&#xff0c;其中每個子數組包…

優先隊列用法

第 5 行定義了一個隊首是最大值的優先隊列,第 10 行的輸出如下: 27 - wuhan 21 - shanghai 11 - beijing 第 13 行定義了一個隊首是最小值的優先隊列,第 19 行的輸出如下: 11 - beijing 21 - shanghai 27 - wuhan #include <bits/stdc.h> using namespace std; int…

Spring Boot3.4.1 集成redis

Spring Boot3.4.1 集成redis 第一步 引入依賴 <!-- redis 緩存操作 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- pool 對象池 …

Replacing iptables with eBPF in Kubernetes with Cilium

source: https://archive.fosdem.org/2020/schedule/event/replacing_iptables_with_ebpf/attachments/slides/3622/export/events/attachments/replacing_iptables_with_ebpf/slides/3622/Cilium_FOSDEM_2020.pdf 使用Cilium&#xff0c;結合eBPF、Envoy、Istio和Hubble等技術…

英一真題閱讀單詞筆記 05年

2005 年 Text 1 第一段 序號 單詞 音標 詞義 1 fat [ft] a. 豐厚的&#xff0c;巨額的&#xff1b;肥胖的 2 pay [pe?] n. 薪水 3 rise [ra?z] n. 上漲&#xff0c;增加&#xff1b;斜坡 4 pleasure [ple??(r)] n. 快樂&#xff1b;樂事 5 pleasure a…

FastAPI集成APsecheduler的BackgroundScheduler+mongodb(精簡)

項目架構&#xff1a; FastAPI(folder) >app(folder) >core(folder) >models(folder) >routers(folder) >utils(folder) main.py(file) 1 utils文件夾下新建schedulers.py from apscheduler.schedulers.background import BackgroundScheduler from apschedu…

聊一聊接口測試中耗時請求如何合理安排?

目錄 一、異步處理與輪詢機制 輪詢檢查機制 二、 并行化測試執行 三、模擬與樁技術&#xff08;Mock/Stub&#xff09; 四、動態超時與重試策略 五、測試架構設計優化 分層測試策略 并行化執行 網絡優化 六、測試用例分層管理 金字塔策略 七、 緩存與數據復用 響應…

深入詳解DICOMweb:WADO與STOW-RS的技術解析與實現

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家、CSDN平臺優質創作者&#xff0c;高級開發工程師&#xff0c;數學專業&#xff0c;10年以上C/C, C#, Java等多種編程語言開發經驗&#xff0c;擁有高級工程師證書&#xff1b;擅長C/C、C#等開發語言&#xff0c;熟悉Java常用開…

Splunk Validated Architecture (SVA):構建企業級可觀測性與安全的基石

Splunk Validated Architecture (SVA) 是 Splunk 官方提供的一套經過嚴格測試、性能驗證和最佳實踐指導的參考架構藍圖。它并非單一固定方案&#xff0c;而是根據企業數據規模、性能需求、高可用性目標和合規要求&#xff0c;提供一系列可落地的部署模型。SVA 的核心價值在于為…

Armv7l或樹莓派32位RPI 4B編譯faiss

pip3 install faiss-cpu當然找不到預編譯的包 手動下載 git clone https://github.com/facebookresearch/faiss.git cd faiss #能需要切換到特定版本標簽&#xff0c;例如 v1.7.1&#xff0c;這個版本Cmake 3.18可以過&#xff0c;因為apt install安裝的cmake只更新到這里&am…

C++之string的模擬實現

string 手寫C字符串類類的基本結構與成員變量一、構造函數與析構函數二、賦值運算符重載三、迭代器支持四、內存管理與擴容機制五、字符串操作函數六、運算符重載總結 手寫C字符串類 從零實現一個簡易版std::string 類的基本結構與成員變量 namespace zzh { class string { …

修改Docker鏡像源

配置文件位置&#xff1a; sudo vim /etc/docker/daemon.json Docker 或 containerd 的鏡像加速器配置&#xff0c;旨在提高從 Docker Hub 拉取鏡像的速度。 { "features": { "buildkit": true, "containerd-snapshotter": true }, …

服務器帶寬線路的區別(GIA、CN2、BGP、CMI等)

服務器帶寬線路的區別&#xff08;GIA、CN2、BGP、CMI等&#xff09; 一、BGP線路 1. 定義與技術特點 BGP&#xff08;Border Gateway Protocol&#xff0c;邊界網關協議&#xff09;是一種用于不同自治系統&#xff08;AS&#xff09;之間交換路由信息的協議&#xff0c;屬…

從0到1搭建AI繪畫模型:Stable Diffusion微調全流程避坑指南

從0到1搭建AI繪畫模型&#xff1a;Stable Diffusion微調全流程避坑指南 系統化學習人工智能網站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目錄 從0到1搭建AI繪畫模型&#xff1a;Stable Diffusion微調全流程避坑指南摘要引言一、數據集構…