MongoDB中什么是master或primary?

参考回答

在 MongoDB 中,Primary(主节点) 是副本集中的核心节点,负责处理所有写操作和大部分读操作。Primary 节点是整个副本集中唯一可以接受写入的节点,其他节点(Secondary)从 Primary 复制数据以保持一致性。

如果 Primary 节点发生故障,副本集会自动选举一个新的 Primary 节点以确保服务的高可用性。


详细讲解与拓展

1. Primary 的主要职责

  1. 处理写操作:
    所有写入操作(如插入、更新、删除)都必须发送到 Primary 节点。
  2. 记录操作日志(Oplog):
    Primary 会将写入操作记录到 Oplog 中,Secondary 节点通过读取 Oplog 来同步数据。
  3. 支持读操作(默认):
    Primary 默认处理读操作,除非显式配置应用程序从 Secondary 节点读取。

2. Primary 的特性

  1. 唯一性:
    在一个副本集中,同一时间只能有一个 Primary 节点。
  2. 动态选举:
    如果 Primary 节点故障,副本集会通过选举机制选择新的 Primary。
  3. 事务支持:
    Primary 节点支持多文档事务,以确保操作的原子性和一致性。

3. Primary 的选举规则

当 Primary 节点故障时,副本集会自动触发选举过程,选出新的 Primary。选举过程遵循以下规则:
1. 节点优先级:
可以通过配置优先级决定节点被选为 Primary 的优先级。

“`javascript
rs.reconfig({
_id: "myReplicaSet",
members: [
{ _id: 0, host: "192.168.1.1:27017", priority: 2 },
{ _id: 1, host: "192.168.1.2:27017", priority: 1 }
]
})
“`

  1. 数据状态:
    数据最新且与 Primary 同步的 Secondary 节点优先被选为 Primary。

  2. 节点数量(奇数规则):
    副本集建议使用奇数个节点(可添加仲裁节点)以避免选举出现平票。


4. Primary 的监控与状态

可以通过以下命令查看副本集状态以及 Primary 节点:

rs.status()

返回示例:

{
    "set": "myReplicaSet",
    "members": [
        { "_id": 0, "name": "192.168.1.1:27017", "stateStr": "PRIMARY" },
        { "_id": 1, "name": "192.168.1.2:27017", "stateStr": "SECONDARY" }
    ]
}

5. Primary 的读写分离

在某些场景下,可以配置应用程序从 Secondary 节点读取数据,从而减轻 Primary 的负载。

示例:
将读取优先级设置为 Secondary:

db.getMongo().setReadPref("secondaryPreferred")

6. Primary 的优势和局限性

优势:
– 集中式写操作,保证数据一致性。
– 高可用性:如果 Primary 故障,副本集会自动选举新的 Primary。
– 支持多文档事务,适用于复杂操作。

局限性:
– 写操作性能受限于 Primary,可能成为瓶颈。
– 如果副本集规模较大,Primary 的压力会显著增加。


总结

Primary(主节点) 是 MongoDB 副本集中的核心节点,负责处理所有写操作和大部分读操作。它通过记录 Oplog 和同步数据,保证整个副本集的一致性和高可用性。在分布式架构中,Primary 的可靠性至关重要,设计合理的副本集配置可以最大限度地保证数据安全和服务连续性。

发表回复

后才能评论