4.MongoDB sharding Cluster 分片集群
- MongoDB分片集群的介绍:
- 是MongoDB提供的一种可水平扩展的数据存储解决方案。
- 当单个MongoDB服务器无法满足数据存储需求或吞吐量要求时,可以使用分片集群来分散数据量和查询负载。
- 分片集群的结构组成:
- 1.分片(shards):
- 真正存储数据的服务器,以chunk为单位存数据。每个分片是单个的一个MongDB实例,也可以是一个复制集,用于提供数据冗余和高可用性
- 2.查询路由(mongs):
- 数据路由,和客户端打交道的模块。
- 查询路由器(通常使用mongos进程实现)是分片集群的入口,它负责将应用程序的请求路由到正确的分片
- 3.配置服务器(config Server):
- 所有存、取数据的方式,所有shard节点的信息,分片功能一些配置信息。可以理解为真实数据的元数据。
- 1.分片(shards):
- 实验准备环境:
- 10个mongodb实例,端口为:38017-38026
- 1.shard节点:
- 对应的实例:
- shard节点1:38021-23(一主两从,其中一个节点为arbiter)
- shard节点2:38024-26(一主两从,其中一个节点为arbiter)
- 对应的实例:
- 2.config server:
- 3台构成复制集(一主两从)
- 对应实例端口:38018-38020
- 3.查询路由(mongos):
- 路由节点,一台服务器:38017
- 实验步骤:
- 1.配置shard分片集:
- 创建多实例目录:
- mkdir -p /mongodb/38021/conf /mongodb/38021/log /mongodb/38021/data
- mkdir -p /mongodb/38022/conf /mongodb/38022/log /mongodb/38022/data
- mkdir -p /mongodb/38023/conf /mongodb/38023/log /mongodb/38023/data
- mkdir -p /mongodb/38024/conf /mongodb/38024/log /mongodb/38024/data
- mkdir -p /mongodb/38025/conf /mongodb/38025/log /mongodb/38025/data
- mkdir -p /mongodb/38026/conf /mongodb/38026/log /mongodb/38026/data
- 修改配置文件:
- shard分片集1:
- cat > /mongodb/38021/conf/mongodb.conf<<EOF
- systemLog:
- destination: file
- path: /mongodb/38021/log/mongodb.log
- logAppend: true
- storage:
- journal:
- enabled: true
- dbPath: /mongodb/38021/data
- directoryPerDB: true
- #engine: wiredTiger
- wiredTiger:
- engineConfig:
- cacheSizeGB: 1
- directoryForIndexes: true
- collectionConfig:
- blockCompressor: zlib
- indexConfig:
- prefixCompression: true
- net:
- bindIp: 192.168.8.5,127.0.0.1
- port: 38021
- replication:
- oplogSizeMB: 2048
- replSetName: sh1
- sharding:
- clusterRole: shardsvr
- processManagement:
- fork: true
- EOF
- cp /mongodb/38021/conf/mongodb.conf /mongodb/38022/conf/
- cp /mongodb/38021/conf/mongodb.conf /mongodb/38023/conf/
- sed 's#38021#38022#g' /mongodb/38022/conf/mongodb.conf -i
- sed 's#38021#38023#g' /mongodb/38023/conf/mongodb.conf -i
- shard分片集1:
- shard 分片集2:
- cat > /mongodb/38024/conf/mongodb.conf<<EOF
- systemLog:
- destination: file
- path: /mongodb/38024/log/mongodb.log
- logAppend: true
- storage:
- journal:
- enabled: true
- dbPath: /mongodb/38024/data
- directoryPerDB: true
- wiredTiger:
- engineConfig:
- cacheSizeGB: 1
- directoryForIndexes: true
- collectionConfig:
- blockCompressor: zlib
- indexConfig:
- prefixCompression: true
- net:
- bindIp: 192.168.8.5,127.0.0.1
- port: 38024
- replication:
- oplogSizeMB: 2048
- replSetName: sh2
- sharding:
- clusterRole: shardsvr
- processManagement:
- fork: true
- EOF
- cp /mongodb/38024/conf/mongodb.conf /mongodb/38025/conf/
- cp /mongodb/38024/conf/mongodb.conf /mongodb/38026/conf/
- sed 's#38024#38025#g' /mongodb/38025/conf/mongodb.conf -i
- sed 's#38024#38026#g' /mongodb/38026/conf/mongodb.conf -i
- 启动所有节点,搭建复制集:
- mongod -f /mongodb/38021/conf/mongodb.conf
- mongod -f /mongodb/38022/conf/mongodb.conf
- mongod -f /mongodb/38023/conf/mongodb.conf
- mongod -f /mongodb/38024/conf/mongodb.conf
- mongod -f /mongodb/38025/conf/mongodb.conf
- mongod -f /mongodb/38026/conf/mongodb.conf
- 登录shard节点1的主服务器,搭建复制集:
- mongo --port 38021 admin
- config = {_id: 'sh1', members: [
- {_id: 0, host: '192.168.8.5:38021'},
- {_id: 1, host: '192.168.8.5:38022'},
- {_id: 2, host: '192.168.8.5:38023',"arbiterOnly":true}]
- }
- rs.initiate(config)
- 登录shard节点2的主服务器,搭建复制集:
- mongo --port 38024 admin
- config = {_id: 'sh2', members: [
- {_id: 0, host: '192.168.8.5:38024'},
- {_id: 1, host: '192.168.8.5:38025'},
- {_id: 2, host: '192.168.8.5:38026',"arbiterOnly":true}]
- }
- rs.initiate(config)
- 创建多实例目录:
- 至此,整个集群中用于存储用户数据的分片集群已经搭建好了,接下来我们来搭建config server层,它主要用于存储元数据(数据信息)
- config节点配置:
- mkdir -p /mongodb/38018/conf /mongodb/38018/log /mongodb/38018/data
- mkdir -p /mongodb/38019/conf /mongodb/38019/log /mongodb/38019/data
- mkdir -p /mongodb/38020/conf /mongodb/38020/log /mongodb/38020/data
- 修改配置文件:
- cat > /mongodb/38018/conf/mongodb.conf <<EOF
- systemLog:
- destination: file
- path: /mongodb/38018/log/mongodb.conf
- logAppend: true
- storage:
- journal:
- enabled: true
- dbPath: /mongodb/38018/data
- directoryPerDB: true
- #engine: wiredTiger
- wiredTiger:
- engineConfig:
- cacheSizeGB: 1
- directoryForIndexes: true
- collectionConfig:
- blockCompressor: zlib
- indexConfig:
- prefixCompression: true
- net:
- bindIp: 192.168.8.5,127.0.0.1
- port: 38018
- replication:
- oplogSizeMB: 2048
- replSetName: configReplSet
- sharding:
- clusterRole: configsvr
- processManagement:
- fork: true
- EOF
- cp /mongodb/38018/conf/mongodb.conf /mongodb/38019/conf/
- cp /mongodb/38018/conf/mongodb.conf /mongodb/38020/conf/
- sed 's#38018#38019#g' /mongodb/38019/conf/mongodb.conf -i
- sed 's#38018#38020#g' /mongodb/38020/conf/mongodb.conf -i
- 启动节点,并配置复制集:
- mongod -f /mongodb/38018/conf/mongodb.conf
- mongod -f /mongodb/38019/conf/mongodb.conf
- mongod -f /mongodb/38020/conf/mongodb.conf
- 登录主节点:
- mongo --port 38018 admin
- config = {_id: 'configReplSet', members: [
- {_id: 0, host: '192.168.8.5:38018'},
- {_id: 1, host: '192.168.8.5:38019'},
- {_id: 2, host: '192.168.8.5:38020'}]
- }
- rs.initiate(config)
- config节点配置:
- 至此config server节点已经配置完毕,接下来我们配置mongos节点(查询路由),它负责与客户端建立连接,确定数据应该分布在那个分片,让整个集群看起来像一个简单的服务器。
- mongos节点配置:
- 创建实例目录:
- mkdir -p /mongodb/38017/conf /mongodb/38017/log
- 修改配置文件:
- cat > /mongodb/38017/conf/mongos.conf << EOF
- systemLog:
- destination: file
- path: /mongodb/38017/log/mongos.log
- logAppend: true
- net:
- bindIp: 192.168.8.5,127.0.0.1
- port: 38017
- sharding:
- configDB: configReplSet/192.168.8.5:38018,192.168.8.5:38019,192.168.8.5:38020
- processManagement:
- fork: true
- EOF
- 启动mongos:
- mongos -f /mongodb/38017/conf/mongos.conf
- 至此我们整个分片集群搭建完毕,接下来对分片集群进行操作。
- 创建实例目录:
- mongos节点配置:
- 分片集群操作:
- 连接mongos节点:
- mongo 192.168.8.10:38017/admin
- 添加分片:
- db.runCommand( { addshard : "sh1/192.168.8.5:38021,192.168.8.5:38022,192.168.8.5:38023",name:"shard1"} )
- db.runCommand( { addshard : "sh2/192.168.8.5:38024,192.168.8.5:38025,192.168.8.5:38026",name:"shard2"} )
- 列出分片:
- db.runCommand( { listshards : 1 }
- 连接mongos节点:
- 分片方法:
- Hash分片:
- 对hehe库下的大表进行hash
- 1.对hehe开启分片功能:
- mongo --port 38017 admin
- use admin
- admin> db.runCommand( { enablesharding : "hehe" } )
- 2.对hehe库下的t10w表建立hash索引:
- use hehe
- > db.t10w.ensureIndex( { id: "hashed" } )
- 3.开启分片:
- use admin
- sh.shardCollection( "hehe.t10w", { id: "hashed" } )
- 4.录入10w行数据测试:
- use hehe
- for(i=1;i<100001;i++){ db.t10w.insert({"id":i,"name":"lisi","age":30,"date":new Date()}); }
- 5.验证,在打开两个终端,分别登录俩个不同的shard分片复制集中,对t10w表,进行行数查看:
- su - mongod
- mongo --port 38021
- use hehe
- db.t10w.count();
- 发现数据分别在两个shard节点的复制集中存入,而不是仅仅存入到了一个shard节点中,这就是hash分片算法起到的作用
- su - mongod
- mongo --port 38024
- use hehe
- db.t10w.count();
- 分片集群当中,常用到的操作命令:
- 判断是否shard集群
- mongo --port 38017 admin
- admin> db.runCommand({ isdbgrid : 1})
- 6、列出所有分片信息
- admin> db.runCommand({ listshards : 1})
- 7、列出开启分片的数据库
- admin> use config
- config> db.databases.find( { "partitioned": true } )
- 或者:
- config> db.databases.find() //列出所有数据库分片情况
- 8、查看分片的片键
- config> db.collections.find().pretty()
- {
- "_id" : "test.t100w",
- "lastmodEpoch" : ObjectId("58a599f19c898bbfb818b63c"),
- "lastmod" : ISODate("1970-02-19T17:02:47.296Z"),
- "dropped" : false,
- "key" : {
- "id" : "hashed"
- },
- "unique" : false
- }
- 9、查看分片的详细信息
- admin> db.printShardingStatus()
- 或
- admin> sh.status() *****
- 10、删除分片节点(谨慎)
- (1)确认blance是否在工作
- sh.getBalancerState()
- (2)删除shard2节点(谨慎)
- mongos> use admin
- mongos> db.runCommand( { removeShard: "shard2" } )
- 注意:删除操作一定会立即触发blancer。
- 判断是否shard集群
- Hash分片:
- 1.配置shard分片集:
相关文章:
4.MongoDB sharding Cluster 分片集群
MongoDB分片集群的介绍: 是MongoDB提供的一种可水平扩展的数据存储解决方案。 当单个MongoDB服务器无法满足数据存储需求或吞吐量要求时,可以使用分片集群来分散数据量和查询负载。分片集群的结构组成: 1.分片(shards)…...

PDF转图片工具
背景: 今天有个朋友找我:“我有个文件需要更改,但是文档是PDF的,需要你帮我改下内容,你是搞软件的,这个对你应该是轻车熟路了吧,帮我弄弄吧”,听到这话我本想反驳,我是开…...

Day 19:419. 甲板上的战舰
Leetcode 419. 甲板上的战舰 给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 ‘X’ 或者是一个空位 ‘.’ ,返回在甲板 board 上放置的 战舰 的数量。 战舰 只能水平或者垂直放置在 board 上。换句话说ÿ…...
Web前端专科实习:技能提升、实践挑战与职业展望
Web前端专科实习:技能提升、实践挑战与职业展望 在数字化时代,Web前端技术作为连接用户与互联网世界的桥梁,其重要性日益凸显。作为一名Web前端专科实习生,我有幸在这个充满机遇和挑战的领域进行实践学习。接下来,我将…...

简单脉冲动画效果实现
简单脉冲动画效果实现 效果展示 CSS 知识点 CSS 变量的灵活使用CSS 动画使用 页面整体结构实现 <div class"pulse"><span style"--i: 1"></span><span style"--i: 2"></span><span style"--i: 3"…...

apache poi 插入“下一页分节符”并设置下一节纸张横向的一种方法
一、需求描述 我们知道,有时在word中需要同时存在不同的节,部分页面需要竖向、部分页面需要横向。本文就是用java调用apache poi来实现用代码生成上述效果。下图是本文实现的效果,供各位看官查阅,本文以一篇课文为例,…...
【React】useCallback和useMemo使用指南
useCallback和useMemo是React中两个用于优化性能的Hooks。以下是它们的使用指南,分点表示并归纳了关键信息: useCallback useCallback返回一个记忆化的回调函数,该回调函数只在它的依赖项发生改变时才会更新。这对于在组件渲染之间保持稳定的引用特别有用,可以防止不必要…...

XMind软件下载-详细安装教程视频
简介 XMind是一款实用的思维导图软件,简单易用、美观、功能强大,拥有高效的可视化思维模式,具备可扩展、跨平台、稳定性和性能,真正帮助用户提高生产率,促进有效沟通及协作。中文官方网站:http://www.x…...

一个小的画布Canvas页面,记录点的轨迹
Hello大家好,好久没有更新了,最近在忙一些其他的事,今天说一下画布canvas,下面是我的代码,实现了一个点从画布的(0,0)到(canvas.width,canvas.height)的一个实…...

docker-compose教程
1. docker-compose是什么? 1. 1 简介 compose、machine 和 swarm 是docker 原生提供的三大编排工具。 简称docker三剑客。Compose 项目是 Docker 官方的开源项目,定义和运行多个 Docker 容器的应用(Defining and running multi-container Do…...
结果出乎意料!MySQL和MariaDB谁快?MySQL 8.0比MySQL 5.6快吗?
MySQL和MariaDB哪个更快?MySQL 8.0的版本和早期MySQL 5.6的版本哪个更快?这儿有个第三方的测试报告回答了这两个大家关心的问题,姚远来和大家一起解读一下。https://smalldatum.blogspot.com/2024/04/sysbench-on-small-server-mariadb-and.h…...

Alienware外星人X17R2 原装Win11系统镜像下载 带SupportAssist OS Recovery一键恢复
装后恢复到您开箱的体验界面,包括所有原机所有驱动AWCC、Mydell、office、mcafee等所有预装软件。 最适合您电脑的系统,经厂家手调试最佳状态,性能与功耗直接拉满,体验最原汁原味的系统。 原厂系统下载网址:http://w…...

【NI国产替代】高速数据采集模块,最大采样率为 125 Msps,支持 FPGA 定制化
• 双通道高精度数据采集 • 支持 FPGA 定制化 • 双通道高精度采样率 最大采样率为 125 Msps12 位 ADC 分辨率 最大输入电压为 0.9 V -3 dB 带宽为 30 MHz 支持 FPGA 定制化 根据需求编程实现特定功能和性能通过定制 FPGA 实现硬件加速,提高系统的运算速度FPGA…...

【网络安全的神秘世界】2024.6.6 Docker镜像停服?解决最近Docker镜像无法拉取问题
🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 解决Docker镜像无法拉取问题 🙋♂️问题描述 常用镜像站:阿里云、科大、南大、上交等,全部挂掉 执行docker pull命…...
【Python入门与进阶】1基本输入和输出
基本输入输出 1.等号赋值 1.1 基本赋值 number_110number_1 1.2 多个赋值 number_2number_3number_420 number_2 number_3 number_4 1.3 多重赋值 number_5,number_6,number_730,35,40 number_5 number_6 number_7 1.4 下划线赋值 _50 _ 2.命名规则 注意:…...

CTF Show MISC做题笔记
MISCX 30 题目压缩包为misc2.rar,其中包含三个文件:misc1.zip, flag.txt, hint.txt。其中后两个文件是加密的。 先解压出misc1.zip, 发现其中包含两个文件:misc.png和music.doc。其中后面文件是加密的。 解压出misc.png,发现图片尾部有消息:flag{flag…...

【QT5】<总览二> QT信号槽、对象树及常用函数
文章目录 前言 一、QT信号与槽 1. 信号槽连接模型 2. 信号槽介绍 3. 自定义信号槽 二、QT的对象树 三、添加资源文件 四、样式表的使用 五、QSS文件的使用 六、常用函数与宏 前言 承接【QT5】<总览一> QT环境搭建、快捷键及编程规范。若存在版…...

Button按钮类
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 按钮是GUI界面中应用最为广泛的控件,它常用于捕获用户生成的单击事件,其最明显的用途是触发绑定到一个处理函数。 wxPython类…...

代码随想录-二叉树 | 111 二叉树的最小深度
代码随想录-二叉树 | 111 二叉树的最小深度 LeetCode 111 二叉树的最小深度解题思路代码难点总结 LeetCode 111 二叉树的最小深度 题目链接 代码随想录 题目描述 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说…...
PCA降维算法
decomposition.h #pragma once #include <arrayfire.h>namespace decomposition {class PCA{public:af::array zero_centred(af::array...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...