Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

向分片添加节点

在此页面上

  • 关于此任务
  • 开始之前
  • 步骤
  • 后续步骤

您可以向分片集群分片的现有分片添加成员。 您可能想要向分片添加成员,其原因与向任何副本集添加成员的分片相同。 示例,增加节点数量可在事件故障转移时提供更多候选节点来替换主节点 (primary node in the replica set)节点。 其他成员还可以提高数据冗余和副本集可用性。

有关详细信息,请参阅副本集部署架构

在 MongoDB 5.0 之前,新添加的从节点仍算作有投票权成员,尽管在数据一致之前它既不能提供读取服务也不能成为主节点。 如果您运行的是早于 5.0 的 MongoDB 版本,并添加了 votespriority设置大于零的从节点,则可能会导致大多数有投票权成员在线但没有主节点可以当选。 为避免出现此类情况,请考虑最初使用priority :0votes :0添加新的从节点。 然后,运行rs.status()以确保成员已转换为SECONDARY状态。 最后,使用rs.reconfig()更新其优先级和投票。

要将成员添加到分分片副本集,您需要:

  1. 活动的分片集群副本集。

  2. 新节点的新主机服务器。新主机服务器必须能够支持分片数据集,并可由活动副本集通过网络进行访问。

从MongoDB 8.0开始,您可以使用directShardOperations角色执行需要直接对分片执行命令的分片操作。

警告

使用directShardOperations角色运行命令可能会导致集群停止正常工作,并可能导致数据损坏。 仅将directShardOperations角色用于维护目的或在MongoDB支持的指导下使用。 执行完维护操作后,请停止使用directShardOperations角色。

1

使用以下策略之一准备新成员的数据目录

  • 让新节点自动同步现有节点的数据。此过程需要一些时间,但无需管理员干预。

    确保新成员的数据目录包含数据。新成员将复制现有成员的数据。

    如果新成员处于正在恢复状态,则它必须退出并成为辅助成员,然后 MongoDB 才能在复制过程中复制所有数据。

  • 从现有成员手动复制数据目录。 新成员成为从从节点(secondary node from replica set)成员,并将赶上副本集的当前状态。 复制数据可能会缩短新成员与其他副本集成员同步所需的时间。

    确保您可以将数据目录复制到新成员,并在 oplog 允许的窗口内开始复制。否则,新实例必须执行初始同步,这会完全重新同步数据,如重新同步自管理副本集成员中所述。

    要检查副本集成员与oplog相关的当前状态,请使用rs.printReplicationInfo()

有关复制部署模式的背景,请参阅副本集部署架构文档。

2

指定数据目录和副本集名称。 以下示例指定了/srv/mongodb/db0数据目录和rs0副本集:

mongod --dbpath /srv/mongodb/db0 --replSet rs0 --bind_ip localhost,<ip address of the mongod host>

警告

将实例绑定到可公开访问的 IP 地址之前,必须保护集群免遭未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少应考虑启用身份验证强化网络基础设施。

有关配置选项的更多信息,请参阅 mongod 手册页面。

提示

您可以在 mongod.conf 配置文件中指定数据目录、副本集名称和 IP 绑定,然后使用以下命令启动 mongod

mongod --config /etc/mongod.conf
3

您只能在连接到主节点时添加成员。要连接到主节点,请使用 mongosh。将 hostport 值替换为部署的相关值:

mongosh --host mongodb0.example.com --port 28015

如果不知道哪个成员是主节点成员,请连接到副本集的任何成员并发出 db.hello() 命令。

4

member configuration document传递给该方法。 示例,要在托管mongodb3.example.net上添加成员,请发出以下命令:

rs.add( { host: "mongodb3.example.net:27017", priority: 0, votes: 0 } )
5

要检查副本集的状态,请运行rs.status()

rs.status()

新加入的节点转变为 SECONDARY 状态后,根据需要使用 rs.reconfig() 更新新加入节点的 priorityvotes

警告

  • rs.reconfig() shell 方法可以强制当前的主节点下台,从而导致选举。当主服务器向下运行时,mongod 会关闭所有客户端连接。 虽然这通常需要 10-20 秒,但请尝试在计划维护期间进行这些更改。

  • 避免重新配置包含不同 MongoDB 版本节点的副本集,因为验证规则可能因 MongoDB 版本而异。

如果rs.conf()返回mongodb3.example.net:27017的配置文档作为members大量中的第五个元素,要将其优先级和投票更新为1 ,请使用以下操作序列:

var cfg = rs.conf();
cfg.members[4].priority = 1
cfg.members[4].votes = 1
rs.reconfig(cfg)

后退

添加分片