MongoDB 集群架构介绍
# MongoDB 集群架构介绍及启动方式
MongoDB 是一个支持分布式架构的 NoSQL 数据库,提供高可用性和可扩展性,能够通过复制集和分片集群两种架构进行部署。为了实现数据的高可用性和水平扩展,MongoDB 提供了多个组件和对应的启动方式,包括 Mongos
、Shard
、和 Config Server
。
# 1. MongoDB 集群架构概述
MongoDB 的分片集群架构主要由以下三部分组成:
Mongos
(路由服务):- 用作客户端和 MongoDB 分片集群之间的查询路由器。
- 负责接收客户端请求,将其路由到合适的分片节点,并将结果返回给客户端。
- 启动文件:
mongos
- 启动方式:
mongos --configdb <config_replica_set>/<config_server1>:<port>,<config_server2>:<port>,<config_server3>:<port> --bind_ip <ip_address> --port 27017
1
Shard
(分片节点):- 分片是实际存储数据的服务器。每个分片保存了部分数据,并负责处理相关的读写操作。
- 分片节点可以是单个
mongod
实例或一个复制集,以实现数据的高可用性。 - 启动文件:
mongod
- 启动方式:
mongod --shardsvr --replSet <replica_set_name> --dbpath /data/db --logpath /var/log/mongodb/mongod.log --bind_ip <ip_address> --port 27018 --fork
1
Config Server
(配置服务器):- 配置服务器存储分片集群的元数据,记录每个分片上存储的数据范围和分片信息。
- 在 MongoDB 3.2 及之后版本中,
Config Server
作为一个复制集部署,保证元数据的高可用性。 - 启动文件:
mongod
- 启动方式:
mongod --configsvr --replSet <config_repl_set_name> --dbpath /data/configdb --logpath /var/log/mongodb/configsvr.log --bind_ip <ip_address> --port 27019 --fork
1
# 2. MongoDB 架构的详细组成
# 2.1 Mongos
路由服务
Mongos
是 MongoDB 分片架构中的关键组件,作为查询路由器,帮助将请求分发到正确的分片。Mongos
是无状态的,允许部署多个实例以实现负载均衡和高可用。Mongos
不存储数据,它只负责路由查询。
- 部署建议:多个
Mongos
实例可与负载均衡器(如 Nginx)结合使用,客户端可以通过负载均衡器将请求分发到不同的Mongos
实例,避免单点故障。
# 2.2 Shard
分片节点
每个 Shard
代表分片集群中的一个数据存储节点,可以是单个 mongod
实例,也可以是一个复制集。分片的作用是将大规模数据分散到多个节点中,实现数据的水平扩展。
分片机制:MongoDB 通过
shard key
将数据分布到不同的分片中,客户端查询时根据shard key
定位相关分片。复制集支持:每个
Shard
通常部署为一个复制集,以确保数据的高可用性和数据冗余。
# 2.3 Config Server
配置服务器
Config Server
是分片集群中不可或缺的组件,它存储集群的元数据信息,包括每个分片上存储的数据范围。MongoDB 3.2 之后,Config Server
被要求部署为复制集,以提高可用性和容错能力。
- 重要性:所有的
Mongos
路由服务都会查询Config Server
,以获取关于分片的元数据。因此,配置服务器的高可用性非常重要,通常配置成一个 3 节点的复制集。
# 3. MongoDB 分片集群架构图
以下是一个典型的 MongoDB 分片集群架构图,展示了 Mongos
、Shard
和 Config Server
之间的关系:
+--------------------+ +--------------------+
| 客户端请求 | | 客户端请求 |
+--------------------+ +--------------------+
| |
+--------v------------------------------v---------------------+
| Mongos 路由无状态 |
+-------------------------------------------------------------+
| |
+---------v----------+ +---------v----------+
| Config Server | | Config Server |
| (复制集) | | (复制集) |
+---------------------+ +---------------------+
| |
+----------------v-------------+ +----------------v-------------+
| Shard 1 (复制集) | | Shard 2 (复制集) |
| Primary | Secondary | Arbiter| | Primary | Secondary | Arbiter|
+-------------------------------+ +-------------------------------+
| |
+---------------------+ +---------------------+
| Shard 3 (复制集) | | Shard 4 (复制集) |
| Primary | Secondary | | Primary | Secondary |
+---------------------+ +---------------------+
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 4. 启动方式总结
Mongos 路由服务:
- 启动文件:
mongos
- 启动命令:
mongos --configdb <config_replica_set>/<config_server1>:<port>,<config_server2>:<port>,<config_server3>:<port> --bind_ip <ip_address> --port 27017
1
- 启动文件:
Shard 分片节点:
- 启动文件:
mongod
- 启动命令:
mongod --shardsvr --replSet <replica_set_name> --dbpath /data/db --logpath /var/log/mongodb/mongod.log --bind_ip <ip_address> --port 27018 --fork
1
- 启动文件:
Config Server 配置服务器:
- 启动文件:
mongod
- 启动命令:
mongod --configsvr --replSet <config_repl_set_name> --dbpath /data/configdb --logpath /var/log/mongodb/configsvr.log --bind_ip <ip_address> --port 27019 --fork
1
- 启动文件:
# 总结
MongoDB 分片集群通过 Mongos
、Shard
和 Config Server
三部分组成,Mongos
提供查询路由,Shard
负责数据存储和读写操作,Config Server
保存元数据。通过合理部署这些组件,可以实现 MongoDB 的高可用性和水平扩展。
- Mongos:无状态,可以通过负载均衡和多个实例部署实现高可用。
- Shard:支持水平扩展,可以是单节点或复制集,提供高可用性和数据冗余。
- Config Server:元数据的存储节点,部署为复制集确保集群元数据的高可用性。
这种架构适合处理大规模数据和高并发请求的场景,MongoDB 提供了灵活的扩展性以满足企业需求。
- 01
- Logstash迁移ES数据12-11
- 02
- Elastichsearch使用wildcard字段模糊匹配12-07