本文共 2840 字,大约阅读时间需要 9 分钟。
MongoDB 复制集是一种高可用性和数据冗余的架构,适用于保障数据一致性和系统的持续运行。以下将详细介绍复制集的工作原理、配置方法及其实际应用场景。
MongoDB 复制集由一个主节点(Primary)和若干从节点(Secondary)组成。所有写操作都直接写入主节点,而主节点将数据同步至从节点。该机制确保数据在主节点和从节点之间保持一致。
复制集的主要功能包括:
PSS(Primary + Secondary + Secondary)模式是官方推荐的复制集架构。它由一个主节点和两个从节点组成。主要特点是:
PSA(Primary + Secondary + Arbiter)模式包括一个主节点、一个从节点和一个仲裁节点。仲裁节点仅用于选举投票,不存储数据。该模式提供一个完整数据副本,主节点故障时会自动切换到备用节点。
通过 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
:管理复制集和分片。readAnyDatabase
和 readWriteAnyDatabase
:跨数据库读写权限。通过 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" } ]})
使用 openssl
生成 keyFile,确保权限为 600。
openssl rand -base64 756 > /mongodb/mongo.keychmod 600 /mongodb/mongo.key
在每个 MongoDB 实例中启用 keyFile 认证,并设置正确的路径。
通过 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/