MongoDB 扩缩容实战:涵盖节点配置、服务启动与移除操作
#作者:任少近
文章目录
- 一、扩容
- 在245节点上配置
- 配置config server:
- 配置mongos
- 启动config server
- 安装工具mongosh
- 添加245新节点到副本集
- 配置分片副本集
- 启动路由并分片
- 二、缩容
- Conf server上去掉server4
- shard上去掉server4
- mongos上去掉server4
一、扩容
在原三台247,248,249上集群上,扩容一台245节点。
| 服务器247 | 服务器248 | 服务器249 | 服务器245 |
|---|---|---|---|
| mongos | mongos | mongos | mongos |
| config server | config server | config server | config server |
| shard1 主节点 | shard1 副节点 | shard1 仲裁 | shard1 副节点 |
| shard2 仲裁 | shard2 主节点 | shard2 副节点 | shard2 副节点 |
| shard3 副节点 | shard3 仲裁 | shard3 主节点 | shard3 副节点 |
环境配置参考mongodb部署安装
新建目录:
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}
在245节点上配置
配置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
sharding:
configDB: 此处要增加server4:27017
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:27017,server4:27017EOF
注:原247,248,249的工作mongos上要新增配置:
#关联配置服务
sharding:configDB: myconfigset/server1:27017,server2:27017,server3:27017,server4:27017
启动config server
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
添加245新节点到副本集
启动config server后,登录到主节点上进行操作。
#7.0.14版本登录时在test>数据库下,切换到admin数据库
test> use admin
switched to db admin
admin>

rs.status()

已新增
配置分片副本集
增加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: 5 # 根据情况配置内存# 进程设置
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: 5 # 根据情况配置内存# 进程设置
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: 5 # 根据情况配置内存# 进程设置
processManagement:fork: true # 以后台进程方式运行pidFilePath: /usr/local/mongodb/shard3/data/shard3.pid # PID 文件路径#复制集名称
replication:replSetName: "shard3"#慢查询
operationProfiling:slowOpThresholdMs : 100mode: "slowOp"#作为分片服务
sharding:clusterRole: shardsvrEOF
启动shard server
mongod --config /usr/local/mongodb/shard1/conf/shard1.conf
mongod --config /usr/local/mongodb/shard2/conf/shard2.conf
mongod --config /usr/local/mongodb/shard3/conf/shard3.conf
登录主节点,注意端口号,注意安装了mongosh
mongosh mongodb://server1:27001
mongosh mongodb://server2:27002
mongosh mongodb://server3:27003
登录主shard1节点,添加新shard1到分片副本集中
#7.0.14版本登录时在test>数据库下,切换到admin数据库
test> use admin
switched to db admin
admin>rs.add({ host: "server4:27001" });

登录主shard2节点,添加新shard2到分片副本集中
#7.0.14版本登录时在test>数据库下,切换到admin数据库
test> use admin
switched to db admin
admin>rs.add({ host: "server4:27002" });
rs.status();

登录主shard3节点,添加新shard3到分片副本集中
#7.0.14版本登录时在test>数据库下,切换到admin数据库
test> use admin
switched to db admin
admin>rs.add({ host: "server4:27003" });

rs.status();

启动路由并分片
启动服务器的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>##添加分片
sh.addShard("shard1/server1:27001,server2:27001,server3:27001,server4:27001")
sh.addShard("shard2/server1:27002,server2:27002,server3:27002,server4:27002")
sh.addShard("shard3/server1:27003,server2:27003,server3:27003,server4:27003")
二、缩容
Conf server上去掉server4
主登录到主节点上,操作:
rs.remove(“server4:27017”);

shard上去掉server4
登录到主节点上,分别到shard1,shard2,shard3上删除



mongos上去掉server4
修改改mongos.conf文件,去掉

重启mongos
相关文章:
MongoDB 扩缩容实战:涵盖节点配置、服务启动与移除操作
#作者:任少近 文章目录 一、扩容在245节点上配置配置config server:配置mongos启动config server安装工具mongosh添加245新节点到副本集配置分片副本集启动路由并分片 二、缩容Conf server上去掉server4shard上去掉server4mongos上去掉server4 一、扩容…...
Python学习心得字符串拼接的几种方法
一、字符串拼接的接种方法: 二、字符串拼接方法的运用: s1hello s2world #使用进行连接 print(s1s2)#使用字符串join()方法 print(.join([s1,s2]))#使用空字符串进行拼接print(*.join([hello,world,python]))#使用*进行拼接#直接拼接 print(helloworld)…...
USB2.03.0摄像头区分UVC相机在linux中的常用命令
这里是引用 一. USB2.0 & 3.0接口支持区分 1.1. 颜色判断 USB接口的颜色并不是判断版本的可靠标准,但根据行业常见规范分析如下: USB接口颜色与版本对照表: 接口颜色常见版本内部触点数量传输速度黑色USB2.04触点480 Mbps (60 MB/s)白…...
electron 学习
文章目录 1.注意项1.1 安装前最好设置一下代理 官网 tutorial https://www.electronjs.org/docs/latest/tutorial/tutorial-prerequisites 1.注意项 1.1 安装前最好设置一下代理 npm config set registry https://registry.npmmirror.com/...
美术教程2025
动画 必看 动画d【Unity初学者教程】如何制作 2D 游戏动画_哔哩哔哩_bilibili 如何在Unity中制作2D游戏动画 - 新手教程 - Blackthornprod_新手教程 可不看序列帧 【简明UNITY教程】2D游戏 动画制作实例详解_哔哩哔哩_bilibili unityspine 【Unity2D游戏开发教程】2D自定…...
CPT205 计算机图形学 OpenGL 3D实践(CW2)
文章目录 1. 介绍2. 设计3. 准备阶段4. 角色构建5. 场景构建6. 交互部分6.1 键盘交互6.2 鼠标交互6.3 鼠标点击出多级菜单进行交互 7. 缺点与问题7.1 程序bug7.2 游戏乐趣不足7.3 画面不够好看 8. 完整代码 1. 介绍 前面已经分享过了关于CPT205的CW1的2D作业,这次C…...
基于单片机的开关电源设计(论文+源码)
本次基于单片机的开关电源节能控制系统的设计中,在功能上设计如下: (1)系统输入220V; (2)系统.输出0-12V可调,步进0.1V; (3)LCD液晶显示实时电压ÿ…...
autogen_core中的DataclassJsonMessageSerializer类
源代码 import json from dataclasses import asdict, dataclass, fields from typing import Any, ClassVar, Dict, List, Protocol, Sequence, TypeVar, cast, get_args, get_origin, runtime_checkable, Union from pydantic import BaseModelfrom types import NoneType, …...
floodfill算法系列一>太平洋大西洋水流问题
目录 题目方法解析:代码设计:代码呈现: 题目方法解析: 代码设计: 代码呈现: class Solution {int m,n;int[] dx {0,0,-1,1};int[] dy {-1,1,0,0};public List<List<Integer>> pacificAtlant…...
DeepSeek 助力 Vue 开发:打造丝滑的无限滚动(Infinite Scroll)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
JavaScript 内置对象-Math对象
在JavaScript中,Math 对象提供了一系列与数学相关的静态方法和属性,帮助开发者执行复杂的计算任务。无论是简单的算术运算还是高级的几何、统计计算,Math 对象都能提供强大的支持。本文将详细介绍 Math 对象的主要功能及其使用方法。 一、简…...
硕成C语言22【一些算法和数组的概念】
1.求水仙花数 #include <stdio.h>int main() {//求水仙花数:1.三位数 2.个位的立方十位的立方百位的立方该数int unit, tens, hundreds;for (int i 100; i < 1000; i)//i表示该水仙花数{unit i / 1 % 10;tens i / 10 % 10;hundreds i / 100 % 10;if (…...
Halcon相机标定
1,前言。 相机的成像过程实质上是坐标系的转换。首先空间中的点由“世界坐标系”转换到“相机坐标系”,然后再将其投影到成像平面(图像物理坐标系),最后再将成像的平面上的数据转换为图像像素坐标系。但是由于透镜的制…...
部门管理(体验,最原始方法来做,Django+mysql)
本人初学,写完代码在此记录和复盘 在创建和注册完APP之后(我的命名是employees),编写models.py文件创建表 手动插入了几条数据 1.部门查询 urls.py和views.py在编写之前,都要注意导入对应的库 urls.py:…...
clickhouse集群搭建
Clickhouse集群搭建 文章目录 Clickhouse集群搭建安装包下载clickhouse单机安装默认安装默认数据库目录更改默认数据目录 2分片-1副本-3节点集群搭建1. 配置hosts2. 修改每个主机的主机名3. 配置文件上传配置文件分布chnode1配置文件chnode2配置文件chnode3配置文件 4. 重启cli…...
250214-java类集框架
单列集合是list和set,list的实现类有ArrayList和LinkedList,前者是数组实现,后者是链表实现。list和set,前者有序、可重复,后者无序不可重复。 1.单列集合 1.1. list java.util.List接口继承自Collection接口&#…...
二叉树(C语言版)
文章目录 二叉树完全二叉树和满二叉树二叉搜索树基本操作实现代码运行结果 分析红黑树2-3-4树(理论模型)红黑树(实际实现) 二叉树 树是一种层次结构,它在现实生活中是广泛存在的,比如:族谱(family tree),组织机构,目录…...
ASP.NET Core 面试宝典【刷题系列】
文章目录 引言1、什么是 dot net core 的 startup class?2、什么是中间件?3、application builder 的 use 和 run 方法有什么区别?4、dot net core 管道里面的map拓展有什么作用?5、dot net core 里面的路径是如何处理的?6、如何在 dot net core 中激活 session 功能?7、…...
案例-02.部门管理-查询
一.查询部门-需求 二.查询部门-思路 API接口文档 三.代码实现 1.controller层:负责与前端进行交互,接收前端所发来的请求 注:Slf4j用于记录日志使用,可以省略private static Logger log LoggerFactory.getLogger(DeptControlle…...
src和href区别
src和href区别 (1)请求资源类型不同(2)作用结果不同(3)解析方式不同 (1)请求资源类型不同 href 用来建立文档和元素之间的链接(是引用),常用的有a、linksrc 在请求src资源时候会将指向的资源下载并且应用到文档中(引入),常用的有script、iframe、image。 (2)作用结果不同 hr…...
Java鼠标轨迹模拟:NaturalMouseMotion库实现拟人化自动化操作
1. 项目概述:让鼠标移动“像人一样自然”在自动化测试、游戏脚本或者任何需要模拟用户鼠标操作的场景里,一个最容易被忽视但又至关重要的细节就是:鼠标的移动轨迹。如果你直接用java.awt.Robot把光标从一个点瞬间“传送”到另一个点ÿ…...
别再混淆了!5分钟搞懂Linux里的TTY、PTS和PTY到底啥关系(附常用命令清单)
别再混淆了!5分钟搞懂Linux里的TTY、PTS和PTY到底啥关系(附常用命令清单) 第一次在Linux终端里敲who命令时,看到输出结果里的pts/0和tty1是不是一头雾水?更别提/dev/ptmx这种神秘路径了。别担心,今天我们就…...
STM32CubeMX + FreeRTOS 实战:从零到一,手把手教你为STM32F103C8T6搭建一个带LED、按键和串口打印的多任务系统
STM32CubeMX FreeRTOS 实战:构建智能设备控制台的多任务系统 1. 项目概述与硬件准备 想象一下,你正在开发一个智能家居控制器的原型系统。这个系统需要同时处理多个任务:实时监测用户按键输入、控制LED状态指示、通过串口与上位机通信。这正…...
跨境网络性能深度解析:基于智能路由的GitHub访问架构优化与延迟降低80%方案
跨境网络性能深度解析:基于智能路由的GitHub访问架构优化与延迟降低80%方案 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub …...
逆向工程师的终极工具箱:retoolkit 2025版完整指南与未来发展蓝图
逆向工程师的终极工具箱:retoolkit 2025版完整指南与未来发展蓝图 【免费下载链接】retoolkit Reverse Engineers Toolkit 项目地址: https://gitcode.com/gh_mirrors/re/retoolkit retoolkit(Reverse Engineers Toolkit)是一款专为x8…...
开源监控代理ClawMonitor:轻量级系统监控与日志采集实战指南
1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫openclawq/clawmonitor。乍一看这个名字,可能有点摸不着头脑,但如果你在运维或者开发领域,尤其是对系统监控、日志聚合、性能分析这些事头疼过,那这个项目很…...
基于MCP协议实现AI助手安全访问本地Azure DevOps Server的实践指南
1. 项目概述与核心价值最近在折腾企业内部工具链的集成,一个绕不开的话题就是如何让各类AI助手,比如ChatGPT、Claude,能够安全、可控地访问我们内部的Azure DevOps Server(也就是以前的TFS,本地部署版)。直…...
使用Taotoken CLI工具一键配置多开发环境下的模型调用参数
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken CLI工具一键配置多开发环境下的模型调用参数 基础教程类,面向需要在不同机器或为团队统一配置开发环境的…...
从Canada Goose看B2B营销:SEO不是万能,口碑与整合策略才是关键
1. 从一件羽绒服引发的营销迷思 最近走在波士顿的街头,我发现一个挺有意思的现象:满大街都是穿着深蓝色Canada Goose羽绒服的人。这场景在纽约、费城这些东海岸的大城市也一样。这事儿让我琢磨了好一阵子。Canada Goose这牌子,老家在加拿大&a…...
DeerFlow:字节跳动开源的 Super Agent 框架,从入门到上手完全指南
官网 https://deerflow.tech/ 架构演示 目录 引言 一、DeerFlow 到底是什么? 二、为什么 DeerFlow 值得关注? 2.1 字节跳动的工程底蕴 2.2 真正隔离执行——Docker 沙箱是安全护城河 2.3 V2 彻底重写:团队追求"做对"而非&quo…...
