当前位置: 首页 > 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. 性能提升:数据分散存储在多个分片上,读写操作可并行处理,显著提高数据读写性能,满足大规模数据存储与高并发访问场景的需求。

相关文章:

  • 太原网站建设加王道下拉网络推广团队
  • 做擦边网站武汉seo管理
  • 澄海玩具网站建设公司手机建站平台
  • 东莞网站开发哪家好搜索引擎优化seo专员招聘
  • 成都关键词优化报价性价比高seo排名
  • weex做的网站世界杯球队最新排名
  • 迁移学习—基于猫狗数据集
  • SpringCloud系列(37)--搭建SpringCloud Gateway
  • 解释一下黑盒测试和白盒测试的区别?
  • 零基础入门Java+大模型(持续更新)
  • 创新让生活更美好丨“鑫亘科技亮相2025上海CMEF,创新医疗材料引领未来!”
  • 淘宝API安全合规指南:避免数据泄露与封禁
  • Encoder-only PLM RoBERTa ALBERT (BERT的变体)
  • 使用 Spread.net将 Excel 中的文本拆分为多段
  • EloqCloud for KV 初体验:兼容redis的云原生KV数据库
  • 《解锁前端潜力:自动化流程搭建秘籍》
  • 代码随想录day15二叉树3
  • 获取YARN application 应用列表的几种方法
  • 博图运动控制入门篇1-伺服组态和基本设置
  • Windows 安装 Redis8.0.2
  • 逆序对的数量
  • python的少数民族音乐网站系统
  • JVM调优实战 Day 6:JVM性能监控工具实战
  • DICOM 协议中DIMSE-C 和 DIMSE‑N 功能
  • Windows10中设置多个虚拟IP方法
  • vue2 点击按钮高亮显示不同项,再次点击隐藏相同项