MongoDB复制集/集群搭建详解
发布日期:2025-04-14 15:03:42 浏览次数:9 分类:精选文章

本文共 2840 字,大约阅读时间需要 9 分钟。

MongoDB 复制集(Replication Set)详解

MongoDB 复制集是一种高可用性和数据冗余的架构,适用于保障数据一致性和系统的持续运行。以下将详细介绍复制集的工作原理、配置方法及其实际应用场景。

复制集的核心原理

MongoDB 复制集由一个主节点(Primary)和若干从节点(Secondary)组成。所有写操作都直接写入主节点,而主节点将数据同步至从节点。该机制确保数据在主节点和从节点之间保持一致。

复制集的主要功能包括:

  • 数据写入时的实时复制:数据写入主节点后,会立即复制到从节点。
  • 故障自动恢复:当主节点发生故障时,复制集会自动选举新的主节点,确保业务不中断。
  • 常见的复制集模式

    1. PSS 模式

    PSS(Primary + Secondary + Secondary)模式是官方推荐的复制集架构。它由一个主节点和两个从节点组成。主要特点是:

    • 数据集有两个完整副本。
    • 主节点故障时,备用节点会自动成为新主节点。

    2. PSA 模式

    PSA(Primary + Secondary + Arbiter)模式包括一个主节点、一个从节点和一个仲裁节点。仲裁节点仅用于选举投票,不存储数据。该模式提供一个完整数据副本,主节点故障时会自动切换到备用节点。

    复制集的环境搭建

    硬件要求

    • 硬件配置必须一致,避免因硬件差异导致节点角色不平等。
    • 硬件应具备独立性,避免同时发生故障。

    软件要求

    • 所有节点必须运行相同版本的 MongoDB,确保兼容性。
    • 添加节点不会提升系统写性能。

    搭建步骤

  • 安装 MongoDB 并配置环境变量
  • 确保硬盘空间足够(建议 10GB 以上)。
  • 为每个 MongoDB 实例配置独立的数据目录和日志文件路径
  • 创建配置文件,设置数据目录、端口等参数。
  • 启动 MongoDB 实例,确保服务正常运行。
  • 配置复制集

    通过 mongosh 工具使用 rs.initiate() 初始化复制集。复制集成员间通过心跳机制同步状态,主节点通过选举机制确保一致性。

    复制集的常用命令

    命令 描述
    rs.add() 添加新的复制集成员。
    rs.addArb() 添加仲裁节点。
    rs.conf() 获取复制集配置信息。
    rs.freeze() 防止当前节点成为主节点。
    rs.initiate() 初始化新的复制集。
    rs.printReplicationInfo() 显示复制集的状态报告。
    rs.remove() 移除复制集成员。
    rs.secondaryOk() 允许从节点执行读操作。
    rs.status() 查看复制集成员状态。
    rs.stepDown() 暂停当前主节点角色。

    安全认证

    MongoDB 提供多种权限级别,确保数据安全。常见权限包括:

    • read:读取权限。
    • readWrite:读写权限。
    • dbAdmin:执行数据库管理操作。
    • dbOwner:全权限操作。
    • userAdmin:管理用户权限。
    • clusterAdmin:管理复制集和分片。
    • readAnyDatabasereadWriteAnyDatabase:跨数据库读写权限。

    用户管理

    通过 db.createUser() 创建用户,指定角色权限。例如:

    db.createUser({    user: "hushang",    pwd: "123456",    roles: [        { role: "clusterAdmin", db: "admin" },        { role: "userAdminAnyDatabase", db: "admin" },        { role: "dbAdminAnyDatabase", db: "admin" },        { role: "readWriteAnyDatabase", db: "admin" }    ]})

    keyFile 配置

    创建 keyFile

    使用 openssl 生成 keyFile,确保权限为 600。

    openssl rand -base64 756 > /mongodb/mongo.keychmod 600 /mongodb/mongo.key

    部署 keyFile 认证

    在每个 MongoDB 实例中启用 keyFile 认证,并设置正确的路径。

    注意事项

    • keyFile 配置后,需重启 MongoDB 服务。
    • 确保所有节点的 keyFile 路径配置一致。

    复制集成员角色

    成员属性

    • Priority:影响节点成为主节点的概率,值越高,成为主节点概率越大。
    • Vote:决定是否参与选举投票,值为 0 表示不能投票。

    成员角色

  • Primary:接收所有写操作,同步数据至从节点。
  • Secondary:正常从节点,可读写操作。
    • Hidden Secondary:对客户端不可见,只参与选举。
    • Delayed Secondary:在主节点故障时延迟复制数据。
  • Arbiter:仅参与选举投票,不存储数据。
  • 配置隐藏节点

    通过 rs.conf() 设置成员为隐藏节点,确保其不参与业务访问。

    cfg = rs.conf()cfg.members[2].priority = 0cfg.members[2].hidden = truers.reconfig(cfg)

    查看隐藏节点

    使用 db.isMaster() 查看当前节点角色,隐藏节点将不列在结果中。

    配置延迟节点

    延迟节点用于数据备份或快速回滚场景,需设置 secondaryDelaySecs

    cfg = rs.conf()cfg.members[2].priority = 0cfg.members[2].hidden = truecfg.members[2].secondaryDelaySecs = 60rs.reconfig(cfg)

    添加仲裁节点

    确保复制集拥有足够的投票成员,避免因偶数节点导致的故障。

    添加命令

    mongosh -u hushang -p 123456 --port 28018rs.addArb("ip:30000")

    检查仲裁节点

    使用 rs.conf() 查看仲裁节点属性,确保其角色为 arbiterOnly

    移除复制集节点

    使用 rs.remove() 移除节点

    rs.remove("ip:port")

    使用 rs.reconfig() 重配置

    cfg = rs.conf()cfg.members.splice(3, 1)rs.reconfig(cfg)

    更改复制集成员

    修改主节点地址,确保端口配置正确。

    cfg = rs.conf()cfg.members[0].host = "new-ip:new-port"rs.reconfig(cfg)

    通过以上配置和管理,MongoDB 复制集能够有效保障数据一致性和系统高可用性。

    上一篇:MongoDB复制集底层原理
    下一篇:MVVM 模式

    发表评论

    最新留言

    网站不错 人气很旺了 加油
    [***.192.178.218]2025年05月26日 09时53分28秒