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()
JavaScript

返回示例

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

5. Primary 的读写分离

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

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

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

6. Primary 的优势和局限性

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

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


总结

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

发表评论

后才能评论