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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows中安装libreOffice最新版本24.2.4

windows中安装libreOffice最新版本24.2.4 一. 介绍二. 安装过程2.1 下载 LibreOffice2.2 安装过程2.3 页面展示 三. 参考文档 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 一. 介…

易基因:【表观遗传学基础】如何研究DNA甲基化

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 表观遗传学近几年取得的一系列研究进展&#xff0c;确实吸引着越来越多的关注&#xff01;为了帮大伙儿梳理一下表观遗传学的基本概念和研究方法&#xff0c;小编打算开一个系列专题&…

VBA实现关闭Excel自动计算,关闭屏幕刷新

Excel代码提速神器 涉及到提取表格大量数据操作&#xff0c;复制粘贴多个单元格时&#xff0c;尽量避免一个个单元格提取&#xff0c;或者一行行一列列提取数值&#xff0c;设计大量IO流操作非常浪费时间。尽量找出数据之间的规律&#xff0c;批量选中复制粘贴&#xff0c;找到…

第五十一天 | 1143.最长公共子序列

题目&#xff1a;1143.最长公共子序列718.最长重复子数组的区别是&#xff0c;子序列不要求连续&#xff0c;子数组要求连续。这一差异体现在dp数组含义和递推公式中&#xff0c;本题是子序列&#xff0c;那就要考虑上nums1[i - 1] ! nums2[j - 1]的情况。 本道题与 1.dp数组…

2024年你需要了解的仅有的10种防检测浏览器

在不断发展的互联网隐私和安全领域&#xff0c;要保持领先地位就必须使用最先进的工具和方法&#xff0c;包括VPN、密码管理器、防病毒软件、防火墙、广告拦截器等。在这些安全措施中&#xff0c;反侦测浏览器占有独特的地位&#xff0c;因为它们通过掩盖用户的数字足迹来增强网…

inBuilder 低代码平台新特性推荐 - 第二十一期

今天给大家带来的是inBuilder低代码平台新特性推荐第二十一期——inBuilder单点登录链接生成器 一、场景介绍 在系统间的集成对接过程中&#xff0c;普遍存在通过单点登录链接进入系统的场景。比如通过单点登录链接进入流程工作台&#xff0c;进入用户管理等功能。inBuilder单…

单点登录分析介绍

文章目录 1、单点登录解决方案1.1、后端保存登录状态1.2、token模式 2、user服务-登录接口2.1、UserController2.2、UserInfoServiceImpl2.3、载荷2.4、响应2.5、Redis Desktop Manager 1、单点登录解决方案 多个系统只有一个登录服务 1.1、后端保存登录状态 1.2、token模式 …

pdf书签怎么做?这三款软件轻松驾驭文档!

在数字化时代&#xff0c;PDF文件已成为我们工作、学习中的重要组成部分。然而&#xff0c;面对海量的PDF内容&#xff0c;如何快速定位关键信息&#xff0c;提高阅读效率呢&#xff1f;答案就是——制作PDF书签。今天&#xff0c;我将为大家介绍三款实用的软件&#xff0c;助你…

LangChain 与 Elastic 合作为 RAG 添加向量数据库和语义重排序

作者&#xff1a;来自 Elastic Max Jakob 在过去的一年中&#xff0c;我们看到了生成式人工智能领域的许多进展。许多新服务和库应运而生。LangChain 已成为使用大型语言模型 (LLM) 构建应用程序的最受欢迎的库&#xff0c;例如检索增强生成 (RAG) 系统。该库使原型设计和试验不…

大数据学习——安装hive

一. 安装准备 1. 打开虚拟机&#xff0c;启动配置了NameNode节点的虚拟机&#xff08;一般和mysql在同一台虚拟机&#xff09;并连接shell 二. 安装 1. 上传hive安装包 hive安装包 提取码&#xff1a;6666 切换到/opt/install_packages目录下 可以将之前解压的rpm文件删除…

C语言调用so/dll动态库

文章目录 windows系统linux系统windows 与 linux下 C 调用动态库的差异 C语言调用动态链接库 windows系统 windows系统下&#xff0c;C语言调用win下的动态库dll&#xff0c;使用头文件<windows.h>。 准备基础C代码 lauf.c #include <stdio.h>// 定义函数&#x…

算法课程笔记——线段树维护矩阵

算法课程笔记——线段树维护矩阵 2

前后端知识点汇总

springboot项目启动 springboot集成naocs和redis springboot集成mybatis springboot集成mybatisPlus 集成rabbitMq 集成sa-token satoken介绍 sa-token官网Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会…

【stm32】基于I2C协议的OLED显示(利用U82G库)

【stm32】基于I2C协议的OLED显示&#xff08;利用U82G库&#xff09; 一、实验目的二、探究任务三、原理探究3.1 I2C接口3.1.1 概述3.1.2 主要特点3.1.3 功能描述3.1.4 从模式3.1.5 主模式3.1.6 时序协议 3.2 OLED屏3.2.1 工作原理3.2.2 汉字点阵显示原理3.2.3 汉字点阵取模 四…

【后端开发】服务开发场景之高性能(CDN与负载均衡,数据库优化,消息队列)

【后端开发】服务开发场景之高性能&#xff08;CDN与负载均衡&#xff0c;数据库优化&#xff0c;消息队列&#xff09; 文章目录 1、内容分发网络&#xff08;CDN &#xff09; & 负载均衡算法CDN是什么&#xff1f;&#xff08;静态资源加速&#xff09;CDN的应用场景&am…

OV5647与树莓派bullseye 64bit的兼容性问题

OV5647与树莓派bullseye 64bit的兼容性问题 1. 源由2. 问题3. 分析方法一&#xff1a;使用 pyudev 库方法二&#xff1a;使用 v4l2-ctl 工具方法三&#xff1a;直接读取 /dev 目录方法四&#xff1a;使用 OpenCV方法五&#xff1a;使用 Picamera方法六&#xff1a;使用 libcame…

『原型资源』Axure自带图标库不够用,第三方经典图标库来袭

​今天小编为大家带来第三方经典图标库&#xff0c;己确认内容可用现推荐给大家。直接上手就可不用自己画哈~ 获取原型文档请与班主任联系&#xff01; 先睹为快&#xff0c;合适再拿走不谢&#xff1a; 图标太多&#xff0c;截取部分给大家参考o(*&#xffe3;︶&#xffe3;*…

Java最新面试题(全网最全、最细、附答案)

一、Java基础 1、基础概念与常识Java 语言有哪些特点? 简单易学&#xff08;语法简单&#xff0c;上手容易&#xff09;&#xff1b;面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff1b;平台无关性&#xff08; Java 虚拟机实现平台无关性&a…

OCP学习笔记-007 SQL语言之二:DML

2. DML - Data Manipulation Language 数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括insert、delete、udpate和select等。(增添改查) 事务:A transaction consists of a collection of DML statements that form a logi…

Vue 3获取DOM元素的大小以及相对于视口的位置的getBoundingClientRect属性

在Vue 3中&#xff0c;可以使用ref来获取DOM元素的getBoundingClientRect属性。 如果元素已挂载&#xff0c;我们使用 getBoundingClientRect 方法来获取元素的位置和大小信息。这个方法返回一个对象&#xff0c;其中包含了 left、top、right、bottom 等属性&#xff0c;这些属…