mongodb-分片集群-搭建

news2025/2/25 19:15:48

分片集群

高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上。

为了解决这些问题,有两个基本的方法: 垂直扩展和水平扩展。

垂直扩展:增加更多的CPU和存储资源来扩展容量。

水平扩展:将数据集分布在多个服务器上。水平扩展即分片。

原理介绍

分片(sharding)是MongoDB用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法。

例如,如果数据库1tb的数据集,并有4个分片,然后每个分片可能仅持有256 GB的数据。如果有40个分片,那么每个切分可能只有25GB的数据。

在这里插入图片描述

MongoDB中数据的分片是以集合为基本单位的,集合中的数据通过片键(Shard key)被分成多部分。其实片键就是在集合中选一个键,用该键的值作为数据拆分的依据。

一般片键采用范围或哈希的方式进行分片。

集群搭建

环境准备

先创建一个如下的目录结果:

  • 在root目录下创建mongodb目录。内部依次创建文件夹(node1,node2,node3)。
  • 在node1文件夹下创建:config-server1,mongos1,shard11,shard21文件夹
    • config-server1目录下创建backup,config,db文件夹
    • mongos1,shard11,shard21同上创建
  • 在node2和node3文件夹下创建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h5CAH9FB-1685004349951)(assets/image-20210829204356767.png)]

配置服务

创建容器

进入node1,node2,node3的config-serverx目录。执行docker命令创建并启动docker容器

配置服务1

#进入目录
cd /root/mongodb/node1/config-server1
#创建并启动容器。
docker run --restart=always --privileged=true -p 10021:27019 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --name pro-file-server-config1 mongo:4.0.0 -f /etc/mongod/config.conf --configsvr --replSet "rs-file-server-config-server" --bind_ip_all

配置服务2

#进入目录
cd /root/mongodb/node2/config-server2
#创建并启动容器。
docker run --restart=always --privileged=true -p 10022:27019 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --name pro-file-server-config2 mongo:4.0.0 -f /etc/mongod/config.conf --configsvr --replSet "rs-file-server-config-server" --bind_ip_all

配置服务2

#进入目录
cd /root/mongodb/node3/config-server3
#创建并启动容器。
docker run --restart=always --privileged=true -p 10023:27019 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --name pro-file-server-config3 mongo:4.0.0 -f /etc/mongod/config.conf --configsvr --replSet "rs-file-server-config-server" --bind_ip_all`
配置Mongo

将3个配置服务关联到一起

通过docker进入任意一台config-server配置三台服务器之间的联系

#进入pro-file-server-config1配置服务器
docker exec -it pro-file-server-config1 /bin/bash
#连接mongo 配置服务器暴露的默认端口为27019
mongo -port 27019
#执行配置内容
rs.initiate({
_id: "rs-file-server-config-server",
configsvr: true,
members: [
{ _id : 0,host : "192.168.136.163:10021" },
{ _id : 1,host : "192.168.136.163:10022" },
{ _id : 2, host : "192.168.136.163:10023" }
]
});
#查看状态
rs.status()

路由服务

创建容器

mongos1

#进入目录
cd /root/mongodb/node1/mongos1
#创建并启动容器。
docker run --restart=always --privileged=true -p 10011:27017 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --entrypoint mongos --name pro-file-server-mongos1 mongo:4.0.0 -f /etc/mongod/config.conf --configdb rs-file-server-config-server/192.168.50.100:10021,192.168.50.100:10022,192.168.50.100:10023 --bind_ip_all

mongos2

#进入目录
cd /root/mongodb/node2/mongos2
#创建并启动容器。
docker run --restart=always --privileged=true -p 10012:27017 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --entrypoint mongos --name pro-file-server-mongos2 mongo:4.0.0 -f /etc/mongod/config.conf --configdb rs-file-server-config-server/192.168.50.100:10021,192.168.50.100:10022,192.168.50.100:10023 --bind_ip_all

mongos3

#进入目录
cd /root/mongodb/node3/mongos3
#创建并启动容器。
docker run --restart=always --privileged=true -p 10013:27017 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --entrypoint mongos --name pro-file-server-mongos3 mongo:4.0.0 -f /etc/mongod/config.conf --configdb rs-file-server-config-server/192.168.50.100:10021,192.168.50.100:10022,192.168.50.100:10023 --bind_ip_all
配置Mongo

通过docker进入任意一台mongos配置三台服务器之间的联系

#进入pro-file-server-mongos1服务器
docker exec -it pro-file-server-mongos1 /bin/bash
#连接mongo
mongo -port 27018
#执行配置内容
sh.addShard("rs-file-server-shard1-server/192.168.136.163:10031,192.168.136.163:10032,192.168.136.163:10033")
sh.addShard("rs-file-server-shard2-server192.168.136.163:10041,192.168.136.163:10042,192.168.136.163:10043")

分片服务

创建容器

分片服务share11

cd /root/mongodb/node1/shard21
docker run --restart=always --privileged=true -p 10041:27018 -v $PWD/config:/etc/mongod -v $PWD/backup:/data/backup -v $PWD/db:/data/db -d --name pro-file-server-shard21 mongo:4.0.0 -f /etc/mongod/config.conf --shardsvr --replSet "rs-file-server-shard2-server" --bind_ip_all

分片服务share12

cd /root/mongodb/node2/shard22
docker run --restart=always --privileged=true -p 10042:27018 -v $PWD/config:/etc/mongod -v $PWD/backup:/data/backup -v $PWD/db:/data/db -d --name pro-file-server-shard22 mongo:4.0.0 -f /etc/mongod/config.conf --shardsvr --replSet "rs-file-server-shard2-server" --bind_ip_all

分片服务share13

cd /root/mongodb/node3/shard23
docker run --restart=always --privileged=true -p 10043:27018 -v $PWD/config:/etc/mongod -v $PWD/backup:/data/backup -v $PWD/db:/data/db -d --name pro-file-server-shard23 mongo:4.0.0 -f /etc/mongod/config.conf --shardsvr --replSet "rs-file-server-shard2-server" --bind_ip_all
配置Mongo

通过docker进入任意一台share配置三台服务器之间的联系

#进入pro-file-server-shard21服务器
docker exec -it pro-file-server-shard21 /bin/bash
#连接mongo
mongo -port 27018
#执行配置内容
`rs.initiate({
_id: "rs-file-server-shard2-server",
members: [
{ _id : 0, host : "192.168.136.163:10041" },
{ _id : 1, host : "192.168.136.163:10042" },
{ _id : 2, host : "192.168.136.163:10043" }
]
});`
#查看状态
rs.status()

分片配置

#mongodb客户端连接
mongo 192.168.136.163:10011

#创建分片数据库test
sh.enableSharding("test")

#将collection加入分片并设置分片字段
sh.shardCollection("test.user", {"_id": "hashed" })

服务器说明

路由服务

IP端口
192.168.136.16310011
192.168.136.16310012
192.168.136.16310013

配置服务

IP端口
192.168.136.16310021
192.168.136.16310022
192.168.136.16310023

分片服务

分片服务01分片服务02
192.168.136.163:10031192.168.136.163:10041
192.168.136.163:10032192.168.136.163:10042
192.168.136.163:10033192.168.136.163:10043

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

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

相关文章

嵌入式 QT 基于mplayer的音乐播放器

1、实现功能 2、音乐播放界面 2.1 界面程序 2.1.1 界面控制初始化 2.1.2 控件风格程序 3、 歌曲列表界面 3.1.1 在 widget.h 定义 QListWidge 对象指针 3.1.2 在 memberInit 函数中添加 QlistWidge 初始化 3.1.3 在 setMusicPlayStyle 函数中设置其风格 4、音乐播放功…

第四章 程序的控制结构

文章目录 第四章 程序的控制结构4.1 程序的三种控制结构4.1.1 程序流程图4.1.2 程序控制结构基础4.1.3 程序控制结构扩展 4.2 程序的多分支结构4.2.1 单分支结构:if4.2.2 二分支结构:if-else4.2.3 多分支结构:if-elif-else4.2.4 判断条件及组…

Github Copilot AI配对开发者编程,提升项目建设进度

Github Copilot是什么? GitHub Copilot 是结对编程的虚拟版本。结对编程是一种常见的敏捷软件开发技术 —— 即两个开发人员在同一个项目上并肩协作,轮流编写代码并检查合作伙伴的输出。 Copilot 可以支持十几种语言,与 Python、JavaScript、…

一文揭秘高效稳定的 Apache Doris 内存管理机制

作者:SelectDB 高级研发工程师、Apache Doris Committer 邹新一 背景 Apache Doris 作为基于 MPP 架构的 OLAP 数据库,数据从磁盘加载到内存后,会在算子间流式传递并计算,在内存中存储计算的中间结果,这种方式减少了频…

Vue2创建脚手架小案例

Vue CLI是一个官方提供的命令行工具,用于快速创建Vue.js项目和管理项目依赖项。下面是使用Vue CLI创建Vue.js项目的基本步骤: 首先,确保已安装Node.js和npm包管理器。可以在终端输入以下命令来检查它们的版本: node -v npm -v如…

MySQL备份

MySQL的备份方式有哪几种?分别如何实现? 目录 一、数据的备份类型 1、数据的备份类型根据其自身的特性主要分为以下几组: 二、MySQL备份数据的方式 三、常见的备份工具 1、一般情况下, 我们需要备份的数据分为以下几种 2、备份工具 3…

【2023 · CANN训练营第一季】昇腾AI入门课(TensorFlow)第三章——AI应用开发

1.具备编程经验 本课程中的示例代码、练习涉及C&C语言、Python语言的如下基础知识,建议您在学习本课程前先学习这部分内容 1.C&C语言 a.变量、基本数据类型、指针、引用、const限定符等 b,字符串和数组 c.表达式,包括赋值运算、条件…

回收站中怎么找回误删除的文件?这几种方法很实用

当我们在电脑上操作文件的时候,难免会有不小心删除文件的情况发生。这个时候,我们可以打开回收站来找回误删除的文件。但是,有时候我们也会误将回收站清空。那么,该怎样才能找回已经误删除的文件呢?在这里提供了回收站…

免费搭建个人stable-diffusion绘画(干货教程)

目前AI绘画主流的模型有Midjourney、Stable Diffusion、DALLE,最火的当属Midjorney和Stable Diffusion,但是由于Midjourney没有开源且要付费,我今天主要分享Stable Diffusion的部署和使用方法的分享。 大家应该面对的一个不可避免的问题&…

kubernetes-informer机制

一、概念 informer 是 client-go 中的核心工具包,在kubernetes中,各个组件通过HTTP协议跟 API Server 进行通信。如果各组件每次都直接和API Server 进行交互,会给API Server 和ETCD造成非常大的压力。在不依赖任何中间件的情况下&#xff0…

Git简单使用介绍

Git作用 版本控制(版本迭代),多人开发,没有版本控制,每修改一下文件就需要备份 常用的版本控制器:Git 和SVN 主要区别: SVN是集中式版本控制系统,版本库是集中放在中央服务器的&a…

半导体芯片划片机怎么使用

使用半导体芯片划片机的方法如下: 准备工作:清洁设备,核对晶圆数量和批次信息,确保晶圆完好无破损。 粘贴晶圆片:将待切割的晶圆片粘贴到蓝膜上,并将蓝膜框架放入划片机。 划片开始:实时清除划…

想劝大家别去外包,干了5年,彻底废了......

先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近5年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四…

什么是SQL Server 审核

IT 安全专业人员需要定期监视和审核 SQL Server 中的所有活动,以确保关键数据的完整性和机密性不会受到损害。手动监视服务器上的所有这些活动是一个忙碌的过程。为了使管理员的工作更轻松一些,Microsoft 提供了 SQL Server 审核功能来帮助管理员有效地审…

vue不同开发方式引用vue文件讲解

上面这个图是vue构建后dist目录的文件,这里面包含了各种开发环境所需要的vue文件 一、开发环境和生产环境 主要分为带有prod和不带prod的版本; 带有prod为生产环境版本并进行了代码压缩,没有运行中不会有警告、错误等详细的提示信息 不带pr…

《程序员面试金典(第6版)》面试题 02.07. 链表相交(查找节点操作,哈希表,双指针(先走n步法,交替遍历法))

题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 题目传输门:面试题 02.07. 链表相交 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结…

Python——openpyxl读取Excel表格(读取、单元格修改、单元格加底色)

首先python读取Excel的库有很多,包括xlwings,pandas,xlrd等等,我比较常用的是openpyxl,以及pandas,当然还有喜欢将数据量比较大的Excel转为csv格式再读取。 今天我们用openpyxl来读取excel文件&#xff0c…

【Python爬虫】urllib模块:强大的网络爬虫利器,让你轻松获取万千信息!

前言: Python爬虫是一种获取互联网信息的技术,它可以自动化地从网站上抓取数据并进行处理。Python爬虫的优点在于它可以快速地获取大量数据,并且可以自动化地进行数据处理和分析。在Python爬虫中,urllib模块是一个非常重要的模块&…

python---变量(3)

求字符串的长度 使用len来求字符串中有几个字符 字符串的拼接 此时是把a2字符串拼接到a1字符串的末尾,得到更大的字符串,对于原来的a1和a2是没有影响的! 不能把字符串和数字混合相加! 这个时候程序就会报错,不能…

深入理解Linux虚拟内存管理

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核(一) 深入理解 Linux 内核(二) Linux 设备驱动程序(一) Linux 设备驱动程序(二) Linux 设备驱动程序(三&#xf…