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

【请关注】实操mongodb集群部署

mongodb集群部署

(一)硬件资源​

  1. 服务器数量:服务器用于分片节点,服务器用于配置服务器(config server),服务器作为路由节点(mongos),若考虑监控与管理,还需额外服务器资源。实际部署中,可根据业务规模与性能需求,在满足最小配置基础上,灵活增加服务器数量以提升集群承载能力。​
  1. 硬件配置:每台服务器需具备足够的计算、存储和内存资源。建议 CPU 核心数不少于 4 核,内存不低于 16GB,以确保数据处理与存储的高效性。存储方面,采用高速磁盘阵列(如 SSD),保障数据读写速度,同时提供充足的磁盘空间以满足数据增长需求。​

(二)软件环境​

  1. 操作系统:推荐使用 CentOS 7 或 Ubuntu 18.04 及以上版本的 Linux 操作系统,这些系统在稳定性、兼容性和安全性方面表现出色,且拥有广泛的用户基础和技术支持。​
  1. MongoDB 版本:选择稳定且支持相关特性的版本,如 MongoDB 4.4 及以上版本,高版本通常具备更优化的性能、更强的功能以及更好的安全性。​
  1. 网络配置:所有服务器需处于同一局域网内,确保节点间网络通信的低延迟与高带宽,网络带宽建议不低于 1Gbps。同时,合理配置防火墙规则,开放 MongoDB 服务所需端口(如 27017、27019、27021 等),保障节点间通信畅通。

1,集群节点分别启动配置服务

docker run -d --net mynet --name mongoconfigsvr0 -p 3333:27019 -v /data/mongodb/data/configsvr0:/data/configdb mongo --configsvr --replSet "rs_configsvr" --bind_ip_all
docker run -d --net mynet --name mongoconfigsvr0 -p 3333:27019 -v /data/mongodb/data/configsvr1:/data/configdb mongo --configsvr --replSet "rs_configsvr" --bind_ip_all
docker run -d --net mynet --name mongoconfigsvr0 -p 3333:27019 -v /data/mongodb/data/configsvr2:/data/configdb mongo --configsvr --replSet "rs_configsvr" --bind_ip_all

2,主节点初始话集群

docker exec -it mongoconfigsvr0 bash

mongo --host 19.104.44.55 --port 3333

rs.initiate( { _id: "rs_configsvr", configsvr: true, members: [ { _id: 0, host : "ip:3333" }, { _id: 1, host : "IP*:3333" }, { _id: 2, host : "ip3333" } ] });

3,创建共享服务(二分片)

mkdir -p /data/mongodb/data/shardsvr00
mkdir -p /data/mongodb/data/shardsvr10

docker run --net mynet --name mongoshardsvr00 -p 5000:27018 -d -v /data/mongodb/data/shardsvr00:/data/db mongo --shardsvr --replSet "rs_shardsvr0" --bind_ip_all;
docker run --net mynet --name mongoshardsvr10 -p 8080:27018 -d -v /data/mongodb/data/shardsvr10:/data/db mongo --shardsvr --replSet "rs_shardsvr1" --bind_ip_all;

4,初始话共享服务(二分片)

docker exec -it mongoshardsvr00 bash

mongo --host ip --port 5000

rs.initiate(
  {
      _id: "rs_shardsvr0",
      members: [
        { _id: 0, host : "ip:5000" },
        { _id: 1, host : "ip:5000" },
        { _id: 2, host : "ip:5000" }
      ]
  }
);

docker exec -it mongoshardsvr10 bash

mongo --host ip --port 8080

rs.initiate(
  {
      _id: "rs_shardsvr1",
      members: [
        { _id: 0, host : "1ip8080" },
        { _id: 1, host : "ip:8080" },
        { _id: 2, host : "ip:8080" }
      ]
  }
);

5,创建管理服务

docker run --net host --name mongos0 -d --entrypoint "mongos" mongo --configdb rs_configsvr/ip1:3333,ip2:3333,ip3:3333 --bind_ip_all

6,添加共享服务进集群

docker exec -it mongos0 bash

mongo --host ip --port 27017

docker stop mongoconfigsvr0 mongoshardsvr00 mongoshardsvr10
docker start mongoconfigsvr0 mongoshardsvr00 mongoshardsvr10

sh.addShard("rs_shardsvr0/ip:5000,ip:5000,ip5000");
sh.addShard("rs_shardsvr1/ip:8080,ip:8080,ip:8080");

db.runCommand({

enablesharding : "testdb"

});

至此mongodb三副本二分片集群部署完成!

(一)核心组件​

  1. 分片(Shard):每个分片由 3 个节点组成副本集,承担实际数据的存储与处理任务。其中,一个节点为主节点(Primary),负责处理客户端的写操作和部分读操作;其余两个为从节点(Secondary),从主节点同步数据,并可分担部分读请求,通过这种方式实现数据冗余和高可用性。​
  1. 路由节点(mongos):作为客户端与集群之间的桥梁,接收客户端的读写请求,根据配置服务器中的元数据信息,将请求准确转发至对应的分片进行处理,对客户端屏蔽了集群的复杂性,提供统一的访问接口。​
  1. 配置服务器(config server):存储整个集群的元数据信息,包括分片的位置、数据分布范围、分片副本集的成员信息等。配置服务器本身也采用副本集架构(通常为 3 节点),确保元数据的高可用性和一致性,为路由节点提供准确的数据路由依据。​

(二)数据分布与读写流程​

  1. 数据分布:根据预先设定的分片键(Shard Key),将数据划分为不同的块(Chunk),并分散存储到各个分片中。分片键的选择至关重要,合理的分片键能够确保数据在各分片间均匀分布,避免出现数据倾斜问题,充分发挥集群的分布式存储优势。​
  1. 读写流程:当客户端发起写请求时,mongos 解析请求并确定目标分片,将写操作转发至对应分片的主节点,主节点完成数据写入后,通过副本集内部的复制机制将数据同步到从节点;读请求同样由 mongos 接收,根据负载均衡策略,可将读请求分发到主节点或从节点,提高集群的读取性能和资源利用率 。​

(三)集群优势​

  1. 高可用性:通过副本集架构,即使部分节点出现故障,集群仍能正常运行,数据不会丢失,保障业务的连续性。​
  1. 可扩展性:可根据业务数据量和访问需求,灵活添加或移除分片节点,实现存储容量和处理能力的横向扩展,轻松应对业务增长带来的挑战。​
  1. 性能提升:数据分散存储在多个分片上,读写操作可并行处理,显著提高数据读写性能,满足大规模数据存储与高并发访问场景的需求。
http://www.lqws.cn/news/517267.html

相关文章:

  • 教育培训教学通用PPT模版
  • 【图论题典】Swift 解 LeetCode 最小高度树:中心剥离法详解
  • linux内核奔溃转储之kexec、kdump
  • 【ArcGIS】水资源单项评价
  • github 图床使用免费CDN加速(jsdelivr)
  • 【版本控制教程】如何使用Unreal Engine 5 + UE源代码控制(Perforce P4)
  • NPU介绍
  • SQL学习笔记2
  • Python Matplotlib绘图指南,10分钟制作专业级数据可视化图表
  • Django
  • 力扣网C语言编程题:位运算来解决 “寻找重复数”
  • 用css实现文字字体颜色渐变
  • SpringMVC系列(三)(请求处理的十个实验(上))
  • CLIP中学习“少样本线性探针”(Few-shot Linear Probe)学习笔记
  • 完成国产化替代!昆明卷烟厂用时序数据库 TDengine 重塑工业时序数据平台
  • Odoo API 集成:XML-RPC 与 JSON-RPC 的比较
  • WinUI3_设置原生态标题栏样式
  • 9.11 Indoor localization based on factor graphs: A unified framework
  • OCR表格识别效果对比
  • GaussDB实例级自动备份策略:构建数据安全的“自动防护网”
  • 一步部署APache编译安装脚本
  • 在IIS上运行PHP时显示PHP错误信息
  • 支持PY普冉系列单片机调试工具PY32linK仿真器
  • BT138-600-ASEMI智能家电专用BT138-600
  • Cookie 在 HTTP 中的作用HTTP 中的状态码
  • 网络协议 / 加密 / 签名总结
  • Mysql8.0版本未卸载干净如何重新下载
  • Go 语言并发编程
  • web安全之h2注入系统学习
  • GC2803:八通道NPN达林顿管的高效驱动解决方案