文档菜单
文档首页
/
MongoDB 手册
/ /

向分片添加成员

本页

  • 关于此任务
  • 开始之前
  • 步骤
  • 下一步

您可以在分片集群中向现有分片添加成员。分片集群。您可能想向分片添加成员的原因与您想向任何 副本集 添加成员的原因相同。例如,增加成员数量可以提供更多候选者以在发生 故障转移 时替换主节点。额外的成员还可以增加数据冗余和副本集可用性。

有关更多信息,请参阅 副本集部署架构

在MongoDB 5.0之前,新添加的从节点仍然被视为投票成员,即使它既不能提供读取操作也不能成为主节点,直到其数据一致为止。如果您正在运行低于5.0版本的MongoDB,并且添加了一个具有大于零的 votespriority 设置的从节点,这可能导致大多数投票成员在线,但无法选出主节点。为了避免这种情况,考虑最初将新从节点添加为具有 priority :0votes :0。然后,运行 rs.status() 以确保成员已过渡到 SECONDARY 状态。最后,使用 rs.reconfig() 更新其优先级和投票。

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

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

  2. 为新成员提供一个新的主机服务器。新的主机服务器必须能够支持您的分片数据集,并通过网络被活动副本集访问。

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

警告

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

1

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

  • 让新成员自动从现有成员同步数据。这个过程需要时间,但不需要管理员干预。

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

    如果新成员处于恢复状态,它必须退出并成为次要成员,MongoDB才能在复制过程中作为复制过程的一部分复制所有数据。

  • 手动从现有成员复制数据目录。新成员将成为次要成员,并将赶上副本集的当前状态。复制数据可能缩短新成员与其他副本集成员同步所需的时间。

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

    要检查副本集成员关于操作日志的当前状态,请使用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

成员配置文档 传递给此方法。例如,要添加位于主机 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() 命令可以强制当前主节点下线,这会导致 选举。当主节点下线时,mongod 会关闭所有客户端连接。虽然这通常需要 10-20 秒,但请尽量在计划维护期间进行这些更改。

  • 避免重新配置包含不同 MongoDB 版本成员的副本集,因为验证规则可能在不同 MongoDB 版本之间有所不同。

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

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

返回

添加分片