【请关注】实操mongodb集群部署
mongodb集群部署
(一)硬件资源
- 服务器数量:服务器用于分片节点,服务器用于配置服务器(config server),服务器作为路由节点(mongos),若考虑监控与管理,还需额外服务器资源。实际部署中,可根据业务规模与性能需求,在满足最小配置基础上,灵活增加服务器数量以提升集群承载能力。
- 硬件配置:每台服务器需具备足够的计算、存储和内存资源。建议 CPU 核心数不少于 4 核,内存不低于 16GB,以确保数据处理与存储的高效性。存储方面,采用高速磁盘阵列(如 SSD),保障数据读写速度,同时提供充足的磁盘空间以满足数据增长需求。
(二)软件环境
- 操作系统:推荐使用 CentOS 7 或 Ubuntu 18.04 及以上版本的 Linux 操作系统,这些系统在稳定性、兼容性和安全性方面表现出色,且拥有广泛的用户基础和技术支持。
- MongoDB 版本:选择稳定且支持相关特性的版本,如 MongoDB 4.4 及以上版本,高版本通常具备更优化的性能、更强的功能以及更好的安全性。
- 网络配置:所有服务器需处于同一局域网内,确保节点间网络通信的低延迟与高带宽,网络带宽建议不低于 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三副本二分片集群部署完成!
(一)核心组件
- 分片(Shard):每个分片由 3 个节点组成副本集,承担实际数据的存储与处理任务。其中,一个节点为主节点(Primary),负责处理客户端的写操作和部分读操作;其余两个为从节点(Secondary),从主节点同步数据,并可分担部分读请求,通过这种方式实现数据冗余和高可用性。
- 路由节点(mongos):作为客户端与集群之间的桥梁,接收客户端的读写请求,根据配置服务器中的元数据信息,将请求准确转发至对应的分片进行处理,对客户端屏蔽了集群的复杂性,提供统一的访问接口。
- 配置服务器(config server):存储整个集群的元数据信息,包括分片的位置、数据分布范围、分片副本集的成员信息等。配置服务器本身也采用副本集架构(通常为 3 节点),确保元数据的高可用性和一致性,为路由节点提供准确的数据路由依据。
(二)数据分布与读写流程
- 数据分布:根据预先设定的分片键(Shard Key),将数据划分为不同的块(Chunk),并分散存储到各个分片中。分片键的选择至关重要,合理的分片键能够确保数据在各分片间均匀分布,避免出现数据倾斜问题,充分发挥集群的分布式存储优势。
- 读写流程:当客户端发起写请求时,mongos 解析请求并确定目标分片,将写操作转发至对应分片的主节点,主节点完成数据写入后,通过副本集内部的复制机制将数据同步到从节点;读请求同样由 mongos 接收,根据负载均衡策略,可将读请求分发到主节点或从节点,提高集群的读取性能和资源利用率 。
(三)集群优势
- 高可用性:通过副本集架构,即使部分节点出现故障,集群仍能正常运行,数据不会丢失,保障业务的连续性。
- 可扩展性:可根据业务数据量和访问需求,灵活添加或移除分片节点,实现存储容量和处理能力的横向扩展,轻松应对业务增长带来的挑战。
- 性能提升:数据分散存储在多个分片上,读写操作可并行处理,显著提高数据读写性能,满足大规模数据存储与高并发访问场景的需求。