Carry の Blog Carry の Blog
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carry の Blog

好记性不如烂键盘
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL

  • Redis

  • Keydb

  • TiDB

  • MongoDB

    • MongoDB 集群的安装部署详细流程
    • MongoDB 集群架构介绍
      • MongoDB 集群Config Server 复制集的工作原理
    • Elasticsearch

    • Kafka

    • victoriametrics

    • BigData

    • Sqlserver

    • 数据库
    • MongoDB
    Carry の Blog
    2024-09-14
    目录

    MongoDB 集群架构介绍

    # MongoDB 集群架构介绍及启动方式

    MongoDB 是一个支持分布式架构的 NoSQL 数据库,提供高可用性和可扩展性,能够通过复制集和分片集群两种架构进行部署。为了实现数据的高可用性和水平扩展,MongoDB 提供了多个组件和对应的启动方式,包括 Mongos、Shard、和 Config Server。


    # 1. MongoDB 集群架构概述

    MongoDB 的分片集群架构主要由以下三部分组成:

    1. Mongos(路由服务):

      • 用作客户端和 MongoDB 分片集群之间的查询路由器。
      • 负责接收客户端请求,将其路由到合适的分片节点,并将结果返回给客户端。
      • 启动文件:mongos
      • 启动方式:
        mongos --configdb <config_replica_set>/<config_server1>:<port>,<config_server2>:<port>,<config_server3>:<port> --bind_ip <ip_address> --port 27017
        
        1
    2. 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
    3. 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 |
              +---------------------+         +---------------------+
    
    1
    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 提供了灵活的扩展性以满足企业需求。

    #MongoDB#架构#集群#分片#复制集
    上次更新: 4/24/2025

    ← MongoDB 集群的安装部署详细流程 MongoDB 集群Config Server 复制集的工作原理→

    最近更新
    01
    tidb fast ddl
    04-04
    02
    TiDB配置文件调优 原创
    04-03
    03
    如何移除TiDB中的表分区 原创
    04-03
    更多文章>
    Theme by Vdoing
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式