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...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...