mongodb分片集群搭建

1.本次搭建使用三台centos7主机搭建伪集群,关闭防火墙和selinux服务

2.mongodb架构相当于9个分片节点,3个路由节点,3个配置节点,主机信息如下图所示

主机名称主机ip地址端口服务
A10.1.60.11420001,21001,22001,22002,22003shard1,shard2,shard3,config servers,mongos
B10.1.60.11520001,21001,22001,22002,22003shard1,shard2,shard3,config servers,mongos
C10.1.60.11820001,21001,22001,22002,22003shard1,shard2,shard3,config servers,mongos

3.从官网下载mongodb安装包(我这里下载的是6.0.5版本的tgz包)

Install MongoDB Community Kubernetes Operator | MongoDB

4.创建mongodb目录并将安装包放到目录下解压(以下所有操作没有特殊标明的都要在三台主机上执行)

mkdir /etc/mongodb

tar -zxvf /etc/mongodb/mongodb-linux-x86_64-rhel70-6.0.5.tgz /etc/mongodb/

mv /etc/mongodb/mongodb-linux-x86_64-rhel70-6.0.5 /etc/mongodb/mongodb

ls /etc/mongodb

 5.创建mongodb各项服务所需的目录

cd /etc/mongodb/mongodb

创建存放配置文件的目录

mkdir conf

创建存放config servers服务数据的目录

mkdir -p config/log

mkdir config/data

创建存放分片节点数据的目录(每台主机三个分片副本集节点)

mkdir -p shard1/data

mkdir shard1/log

mkdir -p shard2/data

mkdir shard2/log

mkdir -p shard3/data

mkdir shard3/log

创建存放mongos路由服务数据的目录

mkdir -p mongos/log

6. 创建mongodb各项服务的配置文件

编辑config servers服务配置文件

vi conf/config.conf 

pidfilepath=/etc/mongodb/mongodb/config/config_server.pid  #记录config服务的pid
dbpath=/etc/mongodb/mongodb/config/data/    #存放config服务数据的目录
logpath=/etc/mongodb/mongodb/config/log/config_server.log #记录config服务日志
logappend=true  #以追加写入的形式写入日志
bind_ip=0.0.0.0  #绑定ip地址
port=21001   #config服务使用的端口
fork=true  #后台启动服务
configsvr=true  #configsvr选项设置为true时,当前MongoDB实例将被配置为配置服务器,可以用于存储和管理分片集群的元数据信息,在这种情况下,MongoDB实例将会监听默认端口27019,并使用默认的数据目录/data/configdb存储配置服务器的数据文件
replSet=config_server #副本集名称
maxConns=20000  #最大连接数

编辑shard1服务配置文件

vi conf/shard1.conf

pidfilepath=/etc/mongodb/mongodb/shard1/shard1.pid
dbpath=/etc/mongodb/mongodb/shard1/data
logpath=/etc/mongodb/mongodb/shard1/log/shard1.log
logappend=true
bind_ip=0.0.0.0
port=22001
fork=true
directoryperdb=true #用于指定MongoDB实例是否使用独立的数据目录来存储每个数据库。当directoryperdb选项设置为true时,MongoDB实例将为每个数据库创建一个独立的数据目录,这样可以更好地管理和维护不同数据库之间的数据。如果directoryperdb选项设置为false,则MongoDB实例将使用单个数据目录来存储所有的数据库文件
replSet=shard1  #配置副本集名称
shardsvr=true  #用于指定MongoDB实例是否用作分片集群的分片节点。当shardsvr选项设置为true时,MongoDB实例将被配置为分片集群的分片节点,可以用于存储和管理分片集群的数据。在这种情况下,MongoDB实例将会监听默认端口27018,并使用默认的数据目录/data/db存储数据文件
maxConns=20000

编辑shard2服务配置文件

vi conf/shard2.conf

pidfilepath=/etc/mongodb/mongodb/shard2/shard2.pid
dbpath=/etc/mongodb/mongodb/shard2/data
logpath=/etc/mongodb/mongodb/shard2/log/shard2.log
logappend=true
bind_ip=0.0.0.0
port=22002
fork=true
directoryperdb=true
replSet=shard2
shardsvr=true
maxConns=20000

编辑shard3服务配置文件

vi conf/shard3.conf

pidfilepath=/etc/mongodb/mongodb/shard3/shard3.pid
dbpath=/etc/mongodb/mongodb/shard3/data
logpath=/etc/mongodb/mongodb/shard3/log/shard3.log
logappend=true
bind_ip=0.0.0.0
port=22003
fork=true
directoryperdb=true
replSet=shard3
shardsvr=true
maxConns=20000

编辑mongos服务配置文件

vi conf/mongos.conf

pidfilepath=/etc/mongodb/mongodb/mongos/mongos.pid
logpath=/etc/mongodb/mongodb/mongos/log/mongos.log
logappend=true
bind_ip=0.0.0.0
port=20001
fork=true
configdb=config_server/10.1.60.114:21001,10.1.60.115:21001,10.1.60.118:21001  #配置config服务副本集的所有节点,config_server之前在config配置文件中配置的副本集的名称
maxConns=20000

7.启用mongodb各项服务

cd /etc/mongodb/mongodb/

启动config servers服务

bin/mongod --config conf/config.conf

启动shard服务

bin/mongod --conf conf/shard1.conf

bin/mongod --config conf/shard2.conf

bin/mongod --config conf/shard3.conf

启动mongos服务

bin/mongos --config conf/mongos.conf

 8.安装mongosh服务(mongodb的6.0.5版本没有自带的客户端)

参考:安装mongodb客户端_Apex Predator的博客-CSDN博客

9.初始化各项服务副本集(此步骤在副本集中的任意一个节点主机上配置即可)

以下配置去掉注释后在一行一行的输入到mongodb的命令行中执行 

使用mongosh服务登录config服务初始化config servers服务副本集

mongosh --port 21001

rs.initiate({                          #初始化副本集

   _id:"config_server",       #此处需要填写config配置文件中设置的副本集名称

   members:[                    #副本集成员信息

             {_id:0,host:"10.1.60.114:21001"},

             {_id:1,host:"10.1.60.115:21001"},

             {_id:2,host:"10.1.60.118:21001"}

   ]

});

使用mongosh服务登录shard服务初始化shard服务副本集

mogosh --port 22001

rs.initiate({

   _id:"shard1",          #此处需要填写shard1配置文件中设置的副本集名称

   members:[

             {_id:0,host:"10.1.60.114:22001"},

             {_id:1,host:"10.1.60.115:22001"},

             {_id:2,host:"10.1.60.118:22001",arbiterOnly:true}        #配置此节点为副本集的仲裁节点

   ]

});

mogosh --port 22002

rs.initiate({

   _id:"shard2",          #此处需要填写shard2配置文件中设置的副本集名称

   members:[

             {_id:0,host:"10.1.60.114:22002"},

             {_id:1,host:"10.1.60.115:22002"},

             {_id:2,host:"10.1.60.118:22002",arbiterOnly:true}        #配置此节点为副本集的仲裁节点

   ]

});

mogosh --port 22003

rs.initiate({

   _id:"shard3",          #此处需要填写shard3配置文件中设置的副本集名称

   members:[

             {_id:0,host:"10.1.60.114:22003"},

             {_id:1,host:"10.1.60.115:22003"},

             {_id:2,host:"10.1.60.118:22003",arbiterOnly:true}        #配置此节点为副本集的仲裁节点

   ]

});

 使用mongosh服务登录mongos服务添加分片信息

mogosh --port 20001

注意MongoDB6以后直接在路由中加入分片信息会报错,需要先进行以下配置

use admin               #使用admin库,以下操作需要在admin库下执行

db.adminCommand({

   "setDefaultRWConcern" : 1,

   "defaultWriteConcern" : {

      "w" : 2      #其实设置为2不太严谨,建议使用更高的写关注级别,例如 w: "majority",以确保写操作在大多数节点上都已成功复制。这样可以提高数据的可用性和容错能力,以防止数据丢失或损坏

   }

});

添加分片副本集信息

db.runCommand({'addshard':'shard1/10.1.60.114:22001,10.1.60.115:22001.10.1.60.118:22001'});

db.runCommand({'addshard':'shard2/10.1.60.114:22002,10.1.60.115:22002.10.1.60.118:22002'});

db.runCommand({'addshard':'shard3/10.1.60.114:22003,10.1.60.115:22003.10.1.60.118:22003'});

查看集群状态

sh.status()

 可以看到已经是识别到了分片信息,仲裁节点是不显示的,所以shard副本集里就只显示两个节点

 10.测试mongodb集群分片存储

使用客户端连接mongos服务

mogosh --port 20001

创建测试库

use db

开启测试库分片,需要在admin库下执行命令

use admin

db.runCommand({enablesharding:'sj'})

 创建collection并开启分片

use sj 

db.user.ensureIndex({'id':'hashed'});       #在 user 集合中创建一个基于 id 字段的哈希索引,也可以不用执行创建索引命令

use admin

db.runCommand({shardcollection:'sj.user',key:{'id':'hashed'}})   #将 sj 数据库中的 user 集合分片,并使用 id 字段的哈希值作为分片键

 查看user集合是否开启分片

use sj

db.user.stats().sharded

写入数据测试查看分片情况

use sj

for(i=1;i<=20000;i++)db.user.insert({id:i,name:'linlin',sex:'boy'})

sh.status() 

查看数据分片情况

db.user.getShardDistribution()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 2019离线安装包获取和安装教程

摘要 介绍Visual Studio 2019离线安装方法和配置及注意事项 关键词 VS2019 离线安装 Visual Studio 2019版本与以往的2015、2013、2012版本不同&#xff0c;采用了新的模块化安装方法。微软官方也并未提供ISO镜像&#xff0c;根据官方提供的离线下载方案&#xff08;docs.mic…

JMeter开发web及手机APP自动化脚本练习

&#xff08;一&#xff09;开发web自动化脚本练习 一、打开浏览器代理服务器设置 我这里用的是360浏览器&#xff0c;打开浏览器代理服务器设置&#xff0c;端口要与jmeter中的端口设置保持一致哦。 二、JMeter设置代理 JMeter设置代理&#xff08;jmeter中的端口要与360浏览…

数据发送流程

在发送模式下&#xff0c;UART 的串行数据发送电路主要包括一个发送移位寄存器(TSR)&#xff0c;TSR 功能是将数据 逐个移位送出。待发数据必须先写到发送缓冲区中。 TXIFx 是发送中断标志位&#xff0c;可配置为发送缓冲区空或TSR 空。 数据的发送支持7bit 、8bit 或9bit 数据…

JAVA基础:Scanner类中next(), nextLine(), hasNext(), hasNextLine()

一、next() : 只读缓冲区中空格之前的数据,并且光标指向本行。二、nextLine() : 读取除回车以外的所有符号(整行内容)&#xff0c;光标定位在下一行三、hasNext() &#xff1a;检查下一个标记&#xff08;token&#xff09;&#xff0c;也就是以空格、制表符或换行符为分隔符的…

大数据技术之Kettle

目录 第1章 Kettle概述 1.1 ETL简介 1.2 Kettle简介1.2.1 Kettle是什么 1.2.2 Kettle的两种设计 1.2.3 Kettle的核心组件 1.2.4 Kettle特点 第2章 Kettle安装部署 2.1 Kettle下载 2.1.1 下载地址 2.1.2 Kettle目录说明 2.1.3 Kettle文件说明 2.2 Kettle安装部署 …

YonLinker连接集成平台构建新一代产业互联根基

近日&#xff0c;由用友公司主办的“2023用友BIP技术大会“在用友产业园&#xff08;北京&#xff09;盛大召开&#xff0c;用友介绍了更懂企业业务的用友BIP-iuap平台&#xff0c;并发布了全面数智化能力体系&#xff0c;助力企业升级数智化底座&#xff0c;加强加速数智化推进…

mysql数据库之索引

1.索引的相关知识 1.1 索引的简介 索引是一个排序的列表&#xff0c;在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址&#xff08;类似于c语言的链表通过指针指向数据记录的内存地址&#xff09;。使用索引后可以不用扫描全表来定位某行的数据&#xff0c;而是…

PCL学习六:Filtering-滤波

参考引用 Point Cloud Library黑马机器人 | PCL-3D点云 1. 点云滤波概述 1.1 背景 在获取点云数据时&#xff0c;由于设备精度、操作者经验、环境因素等带来的影响&#xff0c;以及电磁波衍射特性、被测物体表面性质变化和数据拼接配准操作过程的影响&#xff0c;点云数据中将…

大型数据库期末总复习【SQL server 2008 基础教程】

一、概述 1.Microsoft SQL Server系统的体系结构 Microsoft SQL Server 2008系统由4个主要部分组成。这4个部分被称为4个服务&#xff0c;这些服务分别是数据库引擎、分析服务、报表服务和集成服务。这些服务之间相互存在和相互应用&#xff0c;它们的关系示意图如图所示&…

“世界中医药之都” 亳州市医保局领导一行莅临万民健康交流指导

为进一步推进智慧医疗、智慧服务、智慧管理“三位一体”为主旨的“智慧中医、健康社区”项目建设。2023 年 5 月 3 日&#xff0c;“世界中医药之都” 亳州市医保局 局长 吴旭春 、 医保中心主任秦克靖 、 办公室主任徐伟 等一行 5 人莅临 万民健康交流 指导工作 &#xff0c…

JQuery实现自定义滚动条

在页面中虽然可以通过CSS修改滚动条的样式,但是部分属性是无法自己修改和设置的&#xff0c;而且不同浏览器存在兼容问题&#xff0c;因此通过JS来实现滚动条在自定义滚动条的环境下也是有必要的。 接下来&#xff0c;我们来实现上图两种情况下滚动条的实现。 一、页面搭建 1.…

白宫召见科技巨头 讨论AI潜在风险 以确保人们从创新中受益

ChatGPT的问世&#xff0c;被认为是通用人工智能发展的“奇点”和强人工智能即将到来的“拐点”&#xff0c;甚至有业内人士推测所有数字化系统和各个行业都可能被其重新“洗牌”。 乐观主义者表示&#xff0c;人工智能的核心是对人类大脑的模拟&#xff0c;其目的是延伸和增强…

mysql数据库之事务

1.事务的概念 事务是一种机制、一个操作序列&#xff0c;包含了一组数据库操作命令&#xff0c;并且把所有的命令作为一个 整体一起向系统提交或撤销操作请求&#xff0c;即这一组数据库命令要么都执行&#xff0c;要么都不执行。 事务是一个不可分割的工作逻辑单元&#xf…

ES6-Class类

ES6 提供了更接近传统语言的写法&#xff0c;引入了 Class &#xff08;类&#xff09;这个概念&#xff0c;作为对 象的模板。通过 class 关键字&#xff0c;可以定义类。基本上&#xff0c; ES6 的 class 可以看作只是 一个语法糖&#xff0c;它的绝大部分功能&…

代码随想录算法训练营第三十二天 | 利润题、覆盖范围题

122.买卖股票的最佳时机II 文档讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;贪心算法也能解决股票问题&#xff01;LeetCode&#xff1a;122.买卖股票最佳时机II_哔哩哔哩_bilibili 状态&#xff1a;根本做不出来&#xff0c;思路太巧了。 思路 想获…

DT7遥控DBUS协议解析

文章目录 运行环境&#xff1a;1.1 DBUS协议解析1)DT7遥控2)配置串口引脚3)配置串口接收DMA 2.1例程代码移植1)例程移动到 Inc 和 Src2)makefile添加.c文件 3.1核心代码解释4.1代码修改1)bsp_rc.c 和 remote_control.c2)调用代码 5.1调试1)硬件接线2)串口工具监视拨杆数据 运行…

【C++】哈希

一、unordered系列关联式容器 在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可达到 l o g 2 N log_2 N log2​N&#xff0c;即最差情况下需要比较红黑树的高度次&#xff0c;当树中的节点非常多时&#xff0c;查询效率也不理想。 …

Linux学习之Shell(一)

Shell概述 1&#xff09;Linux提供的Shell解析器有 [xiaominghadoop101 ~]$ cat /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin /bin/tcsh /bin/csh2&#xff09;bash和sh的关系 [xiaominghadoop101 bin]$ ll | grep bash -rwxr…

HTML <area> 标签

实例 带有可点击区域的图像映射: <img src="planets.jpg" border="0" usemap="#planetmap" alt="Planets" /><map name="planetmap" id="planetmap"><area shape="circle" coords=&q…

不用花一分钱!!!获得一个自己的网页版chatGPT

不用花一分钱&#xff01;&#xff01;&#xff01;获得一个自己的网页版chatGPT 当然还是需要一个chatGPT账号的&#xff0c;不会注册的同学可以看一下这篇文章 chatGPT到底要怎么注册 那就先让我们看一下效果吧 chatgpt-web介绍 github项目地址 https://github.com/Chanzha…