博客
关于我
MongoDB复制集/集群搭建详解
阅读量:792 次
发布时间:2023-02-09

本文共 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 复制集能够有效保障数据一致性和系统高可用性。

    转载地址:http://znffk.baihongyu.com/

    你可能感兴趣的文章
    Mac OS X汇编语言常识
    查看>>
    Mac OS下错误The superclass “javax.servlet.http.HttpServlet“ was not found on the Java Build Path的解决方法
    查看>>
    MAC 上的 Selenium,消息:“chromedriver“可执行文件可能具有错误的权限
    查看>>
    Mac 下 Python+Selenium 自动上传西瓜视频
    查看>>
    mac 下 react Native ios环境搭建
    查看>>
    Mac 下使用sourcetree操作git教程
    查看>>
    Mac 也需要杀毒?我亲测三款顶级杀毒软件,保护你的数据安全!从零基础到精通,收藏这篇就够了!
    查看>>
    mac 安装PIL
    查看>>
    mac 搭建APK反编译环境[转]
    查看>>
    MAC 显示隐藏文件
    查看>>
    Mac 的“任务管理器” —— 活动监视器
    查看>>
    mac 虚拟机安装oracle 11g,MAC+Vmware Fusion安装Oracle11g RAC
    查看>>
    mac-gradle的安装和配置
    查看>>
    Mac:Permission denied XXX
    查看>>
    macaca 测试web(2)
    查看>>
    Macbook / pro卡顿怎么处理?这些方法让它满血复活!
    查看>>
    MacBook Air怎么重新输入wifi密码
    查看>>
    MacBook开机出现问号文件夹?别急 可能是这些原因!
    查看>>
    MacBook键盘突然失灵?这几个排查步骤一定要试试!
    查看>>
    Macbook风扇突然一直狂转?一文搞定各种可能原因
    查看>>