当前位置: 首页 > news >正文

4.MongoDB sharding Cluster 分片集群

  • MongoDB分片集群的介绍:
    • 是MongoDB提供的一种可水平扩展的数据存储解决方案。
    • 当单个MongoDB服务器无法满足数据存储需求或吞吐量要求时,可以使用分片集群来分散数据量和查询负载。
  • 分片集群的结构组成:
    • 1.分片(shards):
      • 真正存储数据的服务器,以chunk为单位存数据。每个分片是单个的一个MongDB实例,也可以是一个复制集,用于提供数据冗余和高可用性
    • 2.查询路由(mongs):
      • 数据路由,和客户端打交道的模块。
      • 查询路由器(通常使用mongos进程实现)是分片集群的入口,它负责将应用程序的请求路由到正确的分片
    • 3.配置服务器(config Server):
      • 所有存、取数据的方式,所有shard节点的信息,分片功能一些配置信息。可以理解为真实数据的元数据。
  • 实验准备环境:
    • 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 分片集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 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节点:
        • 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 }
    • 分片方法:
      • 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。

相关文章:

4.MongoDB sharding Cluster 分片集群

MongoDB分片集群的介绍&#xff1a; 是MongoDB提供的一种可水平扩展的数据存储解决方案。 当单个MongoDB服务器无法满足数据存储需求或吞吐量要求时&#xff0c;可以使用分片集群来分散数据量和查询负载。分片集群的结构组成&#xff1a; 1.分片&#xff08;shards&#xff09;…...

PDF转图片工具

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

Day 19:419. 甲板上的战舰

Leetcode 419. 甲板上的战舰 给你一个大小为 m x n 的矩阵 board 表示甲板&#xff0c;其中&#xff0c;每个单元格可以是一艘战舰 ‘X’ 或者是一个空位 ‘.’ &#xff0c;返回在甲板 board 上放置的 战舰 的数量。 战舰 只能水平或者垂直放置在 board 上。换句话说&#xff…...

Web前端专科实习:技能提升、实践挑战与职业展望

Web前端专科实习&#xff1a;技能提升、实践挑战与职业展望 在数字化时代&#xff0c;Web前端技术作为连接用户与互联网世界的桥梁&#xff0c;其重要性日益凸显。作为一名Web前端专科实习生&#xff0c;我有幸在这个充满机遇和挑战的领域进行实践学习。接下来&#xff0c;我将…...

简单脉冲动画效果实现

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

apache poi 插入“下一页分节符”并设置下一节纸张横向的一种方法

一、需求描述 我们知道&#xff0c;有时在word中需要同时存在不同的节&#xff0c;部分页面需要竖向、部分页面需要横向。本文就是用java调用apache poi来实现用代码生成上述效果。下图是本文实现的效果&#xff0c;供各位看官查阅&#xff0c;本文以一篇课文为例&#xff0c;…...

【React】useCallback和useMemo使用指南

useCallback和useMemo是React中两个用于优化性能的Hooks。以下是它们的使用指南,分点表示并归纳了关键信息: useCallback useCallback返回一个记忆化的回调函数,该回调函数只在它的依赖项发生改变时才会更新。这对于在组件渲染之间保持稳定的引用特别有用,可以防止不必要…...

XMind软件下载-详细安装教程视频

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

一个小的画布Canvas页面,记录点的轨迹

Hello大家好&#xff0c;好久没有更新了&#xff0c;最近在忙一些其他的事&#xff0c;今天说一下画布canvas&#xff0c;下面是我的代码&#xff0c;实现了一个点从画布的&#xff08;0,0&#xff09;到&#xff08;canvas.width&#xff0c;canvas.height&#xff09;的一个实…...

docker-compose教程

1. docker-compose是什么&#xff1f; 1. 1 简介 compose、machine 和 swarm 是docker 原生提供的三大编排工具。 简称docker三剑客。Compose 项目是 Docker 官方的开源项目&#xff0c;定义和运行多个 Docker 容器的应用&#xff08;Defining and running multi-container Do…...

结果出乎意料!MySQL和MariaDB谁快?MySQL 8.0比MySQL 5.6快吗?

MySQL和MariaDB哪个更快&#xff1f;MySQL 8.0的版本和早期MySQL 5.6的版本哪个更快&#xff1f;这儿有个第三方的测试报告回答了这两个大家关心的问题&#xff0c;姚远来和大家一起解读一下。https://smalldatum.blogspot.com/2024/04/sysbench-on-small-server-mariadb-and.h…...

Alienware外星人X17R2 原装Win11系统镜像下载 带SupportAssist OS Recovery一键恢复

装后恢复到您开箱的体验界面&#xff0c;包括所有原机所有驱动AWCC、Mydell、office、mcafee等所有预装软件。 最适合您电脑的系统&#xff0c;经厂家手调试最佳状态&#xff0c;性能与功耗直接拉满&#xff0c;体验最原汁原味的系统。 原厂系统下载网址&#xff1a;http://w…...

【NI国产替代】高速数据采集模块,最大采样率为 125 Msps,支持 FPGA 定制化

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

【网络安全的神秘世界】2024.6.6 Docker镜像停服?解决最近Docker镜像无法拉取问题

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 解决Docker镜像无法拉取问题 &#x1f64b;‍♂️问题描述 常用镜像站&#xff1a;阿里云、科大、南大、上交等&#xff0c;全部挂掉 执行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.命名规则 注意&#xff1a…...

CTF Show MISC做题笔记

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

【QT5】<总览二> QT信号槽、对象树及常用函数

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

Button按钮类

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

代码随想录-二叉树 | 111 二叉树的最小深度

代码随想录-二叉树 | 111 二叉树的最小深度 LeetCode 111 二叉树的最小深度解题思路代码难点总结 LeetCode 111 二叉树的最小深度 题目链接 代码随想录 题目描述 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说…...

PCA降维算法

decomposition.h #pragma once #include <arrayfire.h>namespace decomposition {class PCA{public:af::array zero_centred(af::array...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...