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

mongodb-7.0.14分片副本集超详细部署

mongodb介绍:

是最常用的nosql数据库,在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群。

环境准备

系统系统 BC 21.10
三台服务器:192.168.123.247/248/249
安装包:
mongodb-linux-x86_64-rhel8-7.0.14.tgz (截止2024年10月11日星期五次新版)
mongosh-2.3.1-linux-x64.tgz

服务器规划

服务器247服务器248服务器249
mongosmongosmongos
config serverconfig serverconfig server
shard1主节点 shard1 副节点shard1 仲裁
shard2仲裁 shard2 主节点shard2 副节点
shard3副节点 shard3 仲裁shard3 主节点

端口规划

主机名IP组件mongos组件config server分片shard
server1192.168.123.247端口:27000端口:27017shard1:27001
server2192.168.123.248端口:27000端口:27017shard2:27002
server3192.168.123.249端口:27000端口:27017shard3:27003

时间同步

防火墙

集群部署

解压mongodb

官网下载,根据操作系统选择下载相应的版本。

Mongodb-download

在三台机器上执行解压

tar zxvf mongodb-linux-x86_64-rhel8-7.0.14.tgz  -C  /usr/local/mongodb

新建目录

三台机器建立config、mongos、shard1、shard2、shard3目录,包括子目录

mkdir -p /usr/local/mongodb/config/{conf,data,log,run}
mkdir -p /usr/local/mongodb/mongos/{conf,data,log,run}
mkdir -p /usr/local/mongodb/shard{1,2,3}/{conf,data,log}

目录结构概述

/usr/local/mongodb/config:

用途:存放配置服务器的相关文件。
子目录:

conf:存放配置服务器的配置文件(如 mongod.conf)。
data:存放配置服务器的数据文件。
log:存放配置服务器的日志文件。
run: 存储进程PID文件
/usr/local/mongodb/mongos:

用途:存放路由进程(Mongos)的相关文件。
子目录:

conf:存放路由进程的配置文件。
data:因为 Mongos 不持久化数据。(也可以不创建)
log:存放路由进程的日志文件。
run: 存储进程PID文件
/usr/local/mongodb/shard{1,2,3}

用途:存放分片服务器的相关文件。
子目录:

conf:存放分片服务器的配置文件。
data:存放分片服务器的数据文件。
log:存放分片服务器的日志文件。

配置环境变量

vim /etc/profile
export MONGODB_HOME=/usr/local/mongodb
export PATH=$MONGODB_HOME/bin:$PATH

使立即生效

source /etc/profile

安装依赖包,缺少就安装

yum install libcurl openssl xz-libs

创建用户,指定组标识符

groupadd mongo -g 777
useradd mongo -g 777 -M -s /sbin/nologin
id mongo

开机启动

cat  >  /etc/systemd/system/mongodb.service  << EOF
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target[Service]
Type=simple
ExecStart=/usr/local/mongodb/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf --shutdown
PrivateTmp=true[Install]
WantedBy=multi-user.target
EOF

三台config server配置:

cat > /usr/local/mongodb/config/conf/mongod.conf  <<  EOF
# 日志设置
systemLog:destination: file                # 日志写入文件path: /usr/local/mongodb/config/log/mongod.log # 日志文件路径logAppend: true                  # 追加日志logRotate: rename                # 日志轮转方式,支持 rename 或 reopen# 网络设置
net:port: 27017                     # MongoDB 默认端口bindIp: 0.0.0.0                 # 允许从所有 IP 访问,生产环境建议限制# 数据目录
storage:dbPath: /usr/local/mongodb/config/data  # 数据文件存放路径wiredTiger:engineConfig:cacheSizeGB: 1               # 根据情况配置内存# 进程设置
processManagement:fork: true                       # 以后台进程方式运行pidFilePath: /usr/local/mongodb/config/run/mongod.pid # PID 文件路径#复制集名称
replication:replSetName: "myconfigset"#作为配置服务
sharding:clusterRole: configsvrEOF

三台mongos配置

cat > /usr/local/mongodb/config/conf/mongod.conf  <<  EOF# 日志设置
systemLog:destination: file                # 日志写入文件path: /usr/local/mongodb/mongos/log/mongos.log # 日志文件路径logAppend: true                  # 追加日志logRotate: rename                # 日志轮转方式,支持 rename 或 reopen# 网络设置
net:port: 27000                    # MongoDB 默认端口bindIp: 0.0.0.0                 # 允许从所有 IP 访问,生产环境建议限制# 进程设置
processManagement:fork: true                       # 以后台进程方式运行pidFilePath: /usr/local/mongodb/mongos/run/mongos.pid # PID 文件路径#网络延迟阈值
replication:localPingThresholdMs: 15#关联配置服务
sharding:configDB: myconfigset/server1:27017,server2:27017,server3:27017EOF

启动三台config server (3台)

mongod --config /usr/local/mongodb/config/conf/mongod.conf

安装mongosh

安装好mongosh工具,方便初始化副本集使用,

# mongosh mongodb://server1:27017。成功登录如下图:默认的提示符是’test>’

在这里插入图片描述

大内存页 关闭 hugepage

echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag

初始化配置副本集(3台机器执行相同操作)

启动config server后,开始初始化副本集,登录任意一台开始初始化配置副本集

#7.0.14版本登录时在test>数据库下,切换到admin数据库
test> use admin
switched to db admin
admin>#执行以下config变量,注意myconfigset,要和mongod.conf里配置一致。
config={_id:"myconfigset",members:[ 
{_id:0,host:"server1:27017"}, 
{_id:1,host:"server2:27017"}, 
{_id:2,host:"server3:27017",}, 
]}

执行结果如下:
在这里插入图片描述

#再执行初始化
rs.initiate(config)

在这里插入图片描述

rs.status()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.9 配置分片副本集
每台shard1,shard2,shard3配置
Shard1

cat > /usr/local/mongodb/shard1/conf/shard1.conf  << EOF
# 日志设置
systemLog:destination: file                # 日志写入文件path: /usr/local/mongodb/shard1/log/shard1.log # 日志文件路径logAppend: true                  # 追加日志logRotate: rename                # 日志轮转方式,支持 rename 或 reopen# 网络设置
net:port: 27001                     # MongoDB shard1端口bindIp: 0.0.0.0                 # 允许从所有 IP 访问,生产环境建议限制# 数据目录
storage:dbPath: /usr/local/mongodb/shard1/data          # 数据文件存放路径wiredTiger:engineConfig:cacheSizeGB: 1                              # 根据情况配置内存# 进程设置
processManagement:fork: true                       # 以后台进程方式运行pidFilePath: /usr/local/mongodb/shard1/data/shard1.pid # PID 文件路径#复制集名称
replication:replSetName: "shard1"#慢查询
operationProfiling:slowOpThresholdMs : 100mode: "slowOp"#作为分片服务
sharding:clusterRole: shardsvrEOF

Shard2

cat > /usr/local/mongodb/shard2/conf/shard2.conf  << EOF# 日志设置
systemLog:destination: file                # 日志写入文件path: /usr/local/mongodb/shard2/log/shard2.log # 日志文件路径logAppend: true                  # 追加日志logRotate: rename                # 日志轮转方式,支持 rename 或 reopen# 网络设置
net:port: 27002                     # shard2端口bindIp: 0.0.0.0                 # 允许从所有 IP 访问,生产环境建议限制# 数据目录
storage:dbPath: /usr/local/mongodb/shard2/data          # 数据文件存放路径wiredTiger:engineConfig:cacheSizeGB: 1                              # 根据情况配置内存# 进程设置
processManagement:fork: true                       # 以后台进程方式运行pidFilePath: /usr/local/mongodb/shard2/data/shard2.pid # PID 文件路径#复制集名称
replication:replSetName: "shard2"#慢查询
operationProfiling:slowOpThresholdMs : 100mode: "slowOp"#作为分片服务
sharding:clusterRole: shardsvrEOF

Shard3

cat > /usr/local/mongodb/shard3/conf/shard3.conf  << EOF# 日志设置
systemLog:destination: file                # 日志写入文件path: /usr/local/mongodb/shard3/log/shard3.log # 日志文件路径logAppend: true                  # 追加日志logRotate: rename                # 日志轮转方式,支持 rename 或 reopen# 网络设置
net:port: 27003                     # MongoDB shard3 默认端口bindIp: 0.0.0.0                 # 允许从所有 IP 访问,生产环境建议限制# 数据目录
storage:dbPath: /usr/local/mongodb/shard3/data          # 数据文件存放路径wiredTiger:engineConfig:cacheSizeGB: 1                              # 根据情况配置内存# 进程设置
processManagement:fork: true                       # 以后台进程方式运行pidFilePath: /usr/local/mongodb/shard3/data/shard3.pid # PID 文件路径#复制集名称
replication:replSetName: "shard3"#慢查询
operationProfiling:slowOpThresholdMs : 100mode: "slowOp"#作为分片服务
sharding:clusterRole: shardsvrEOF

启动三台247,248,249服务器的shard1 server

 mongod --config  /usr/local/mongodb/shard1/conf/shard1.conf

在这里插入图片描述

初始化shard1分片副本集

登录任意一台,注意端口号

mongosh mongodb://server1:27001

初始化三台的shard1

#7.0.14版本登录时在test>数据库下,切换到admin数据库
test> use admin
switched to db admin
admin>

config={_id:“shard1”,members:[
{_id:0,host:“server1:27001”},
{_id:1,host:“server2:27001”},
{_id:2,host:“server3:27001”,arbiterOnly: true},
]}
在这里插入图片描述

#再执行初始化
rs.initiate(config)
在这里插入图片描述
rs.status()
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

启动三台247,248,249服务器的shard2 server

mongod --config  /usr/local/mongodb/shard2/conf/shard2.conf

登录任意一个节点,注意端口号,注意安装了mongosh

mongosh mongodb://server2:27002

初始化三台的shard2

#7.0.14版本登录时在test>数据库下,切换到admin数据库
test> use admin
switched to db admin
admin>config={_id:"shard2",members:[ 
{_id:0,host:"server1:27002",arbiterOnly: true}, 
{_id:1,host:"server2:27002"}, 
{_id:2,host:"server3:27002"}, 
]}#再执行初始化
rs.initiate(config)
rs.status()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.12.1 初始化三台的shard3

#7.0.14版本登录时在test>数据库下,切换到admin数据库
test> use admin;
switched to db admin
admin>config={_id:"shard3",members:[ 
{_id:0,host:"server1:27003"}, 
{_id:1,host:"server2:27003",arbiterOnly: true}, 
{_id:2,host:"server3:27003"}, 
]}#再执行初始化
rs.initiate(config)
rs.status()

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

启动mongos路由并分片

启动三台247,248,249服务器的mongos

mongos --config  /usr/local/mongodb/mongos/conf/mongos.conf

在这里插入图片描述
登录任意路由节点,注意端口号,注意安装了mongosh

mongosh mongodb://server1:27000

添加分片

#7.0.14版本登录时在test>数据库下,切换到admin数据库
test> use admin
switched to db admin
admin>db.adminCommand({  "setDefaultRWConcern" : 1,  "defaultWriteConcern" : {    "w" : 1  }}) 
admin>##添加分片
sh.addShard("shard1/server1:27001,server2:27001,server3:27001")
sh.addShard("shard2/server1:27002,server2:27002,server3:27002")
sh.addShard("shard3/server1:27003,server2:27003,server3:27003")
#
Admin> sh.status();

在这里插入图片描述

验证分片机制

指定分片生效:

db.runCommand({enablesharding:"testdb"})

哈希分片

db.runCommand({shardcollection:"testdb.table1",key:{id:"hashed"}})

插入1万个数据,测试

for (var i = 1; i <= 10000; i++){
db.table1.insertOne({id:i,"test1":"testval1"});

在这里插入图片描述
Shard1
在这里插入图片描述
Shard2
在这里插入图片描述
Shard3
在这里插入图片描述
汇总内容
在这里插入图片描述
验证已完成,可以看到数据分到3个分片,各自分片数量为:
shard1 “count” : 3366,
shard2 “count” : 3284,
shard3 “count” : 3350。
已经成功!

相关文章:

mongodb-7.0.14分片副本集超详细部署

mongodb介绍&#xff1a; 是最常用的nosql数据库&#xff0c;在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的mongodb&#xff08;分片副本&#xff09;集群。 环境准备 系统系统 BC 21.10 三台服务器&#xff1a;192.168.123.247/248/249 安装包&#xff1a…...

C++运算出现整型溢出

考虑如下代码&#xff1a; int aINT_MAX; int b 1; long c ab; 这段代码没有编过&#xff01; 原因是a和b都是int型&#xff0c;相加之后会溢出。 请记住&#xff0c;c语言没有赋值&#xff0c;只有表达式&#xff0c;右侧会存在一个暂存的int保存ab的值&#xff0c;而明…...

LeetCode岛屿数量

题目描述 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以假设该网…...

Karmada核心概念

以下内容为翻译&#xff0c;原文地址 Karmada 是什么&#xff1f; | karmada 一、Karmada核心概念 一&#xff09;什么是Karmada 1、Karmada&#xff1a;开放&#xff0c;多云&#xff0c;多集群Kubernetes业务流程 Karmada (Kubernetes Armada)是一个Kubernetes管理系统&…...

Rust 与生成式 AI:从语言选择到开发工具的演进

在现代软件开发领域&#xff0c;Rust 语言正在逐步崭露头角&#xff0c;尤其是在高性能和可靠性要求较高的应用场景。与此同时&#xff0c;生成式 AI 的崛起正在重新塑造开发者的工作方式&#xff0c;从代码生成到智能调试&#xff0c;生成式 AI 的应用正成为提升开发效率和质量…...

Python爬虫高效数据爬取方法

大家好!今天我们来聊聊Python爬虫中那些既简洁又高效的数据爬取方法。作为一名爬虫工程师,我们总是希望用最少的代码完成最多的工作。下面我ll分享一些在使用requests库进行网络爬虫时常用且高效的函数和方法。 1. requests.get() - 简单而强大 requests.get()是我们最常用的…...

C语言之扫雷小游戏(完整代码版)

说起扫雷游戏&#xff0c;这应该是很多人童年的回忆吧&#xff0c;中小学电脑课最常玩的必有扫雷游戏&#xff0c;那么大家知道它是如何开发出来的吗&#xff0c;扫雷游戏背后的原理是什么呢&#xff1f;今天就让我们一探究竟&#xff01; 扫雷游戏介绍 如下图&#xff0c;简…...

Spring WebFlux 响应式概述(1)

1、响应式编程概述 1.1、响应式编程介绍 1.1.1、为什么需要响应式 传统的命令式编程在面对当前的需求时的一些限制。在应用负载较高时&#xff0c;要求应用需要有更高的可用性&#xff0c;并提供低的延迟时间。 1、Thread per Request 模型 比如使用Servlet开发的单体应用&a…...

Unity游戏通用框架——事件的订阅和发布(观察者模式)

在游戏开发的基本思想中&#xff0c;逻辑与表现的分离极为重要&#xff0c;相互之间并不关心具体实现&#xff0c;只注册对应的事件&#xff0c;有事件发生时才调用相应的函数 事件管理器 using System.Collections; using System.Collections.Generic;public class event_ma…...

将 Ubuntu 系统中的 **swap** 空间从 2GB 扩展到 16GB

要将 Ubuntu 系统中的 swap 空间从 2GB 扩展到 16GB&#xff0c;可以按照以下步骤操作&#xff1a; 1. 关闭现有 Swap 文件 首先需要禁用当前的 swap 文件&#xff0c;以便重新调整其大小。 sudo swapoff -a2. 删除旧的 Swap 文件 假设当前的 swap 文件位于 /swapfile&…...

流程图 LogicFlow

流程图 LogicFlow 官方文档&#xff1a;https://site.logic-flow.cn/tutorial/get-started <script setup> import { onMounted, ref } from vue import { forEach, map, has } from lodash-es import LogicFlow, { ElementState, LogicFlowUtil } from logicflow/core …...

Mac通过键盘选取内容

问题&#xff1a; 我们在使用键盘的时候经常懒得动手去拿鼠标了&#xff0c;并且熟练使用键盘可以提高我们的工作效率&#xff0c;比如在我们需要复制内容的时候&#xff0c;可以仅仅通过键盘来选取想要的内容&#xff1b; 解决&#xff1a; 将鼠标光标移动到想要选取的内容…...

如何通过OpenCV实现图像融合拼接?

图像拼接的意义 2024年了&#xff0c;谈论图像拼接&#xff0c;不算新事物&#xff0c;我们这里探讨图像拼接&#xff0c;主要探讨图像拼接的意义、难点和大概的实现思路。图像拼接可以突破设备视野限制&#xff0c;通过拼接低分辨率图像获得高分辨率图像。 扩展视野&#xff…...

Qt5.14.2 安装详细教程(图文版)

Qt 是一个跨平台的 C 应用程序开发框架&#xff0c;主要用于开发图形用户界面&#xff08;GUI&#xff09;程序&#xff0c;但也支持非 GUI 程序的开发。Qt 提供了丰富的功能库和工具&#xff0c;使开发者能够在不同平台上编写、编译和运行应用程序&#xff0c;而无需修改代码。…...

深圳市步步精科技有限公司荣获发明专利,彰显技术研发实力

2024年8月13日&#xff0c;深圳市步步精科技有限公司&#xff08;BBJconn&#xff09;正式获得了其新开发的防水连接器专利&#xff0c;授权公告号为CN 118352837 B。这项技术的突破标志着公司在连接器领域的持续创新&#xff0c;进一步巩固了其行业领先地位。 专利技术概述 此…...

std::function的概念和使用方法

一、概念 std::function是 C 标准库中的一个模板类&#xff0c;定义在<functional>头文件中。它是一种通用的多态函数包装器&#xff0c;其实例能够对任何可调用对象进行存储、复制和调用操作&#xff0c;这些可调用对象包括普通函数、函数指针、成员函数指针、函数对象…...

OpenAI的Swarm是一个实验性质的多智能体编排框架

先上文档&#xff0c;然后解释&#xff0c;然后是代码 OpenAI的Swarm是一个实验性质的多智能体编排框架&#xff0c;旨在简化多智能体系统的构建、编排和部署。以下是对Swarm的详细介绍&#xff1a; 一、核心概念和特点 智能体&#xff08;Agent&#xff09;&#xff1a; Swar…...

简易STL实现 | Map 的实现

提供了键值对的存储机制&#xff0c;处理 具有唯一键的关联数据 1、特性 键值对存储&#xff1a;std::map 通过键值对的形式 存储数据&#xff0c;其中每个键 都是唯一的&#xff0c;并且 与一个值相关联 自动排序&#xff1a;std::map 内部 使用一种平衡二叉搜索树&#xf…...

`concurrent.futures` 是 Python 标准库中的一个模块

先来看文档 concurrent.futures 是 Python 标准库中的一个模块&#xff0c;它提供了一个高级接口来异步执行代码&#xff0c;使用线程或进程池来并行运行任务。这个模块提供了两种主要的池类型&#xff1a;ThreadPoolExecutor 和 ProcessPoolExecutor&#xff0c;以及一个通用的…...

PicoQuant GmbH公司Dr. Christian Oelsner到访东隆科技

昨日&#xff0c;德国PicoQuant公司的光谱和显微应用和市场专家Dr.Christian Oelsner莅临武汉东隆科技有限公司。会议上Dr. Christian Oelsner就荧光寿命光谱和显微技术的最新研究和应用进行了深入的交流与探讨。此次访问不仅加强了两家公司在高科技领域的合作关系&#xff0c;…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...