加入复制集群

要加入一个现有集群,您必须至少指定:

  • 集群的名称
  • 您要加入的集群中另一个节点的 host:port
‹›
  • SQL
  • JSON
  • PHP
  • Python
  • Python-asyncio
  • javascript
  • Java
  • C#
  • Rust
📋
JOIN CLUSTER posts AT '10.12.1.35:9312'
‹›
Response
{u'error': u'', u'total': 0, u'warning': u''}

在大多数情况下,当只有一个复制集群时,上述信息就足够了。但是,如果您要创建多个复制集群,则还必须设置路径并确保目录可用。

‹›
  • SQL
SQL
📋
JOIN CLUSTER c2 at '127.0.0.1:10201' 'c2' as path

节点通过从指定节点获取数据来加入集群,如果成功,它会更新所有其他集群节点的节点列表,就像通过ALTER CLUSTER ... UPDATE nodes手动完成一样。此列表用于在重启时将节点重新加入集群。

节点列表有两种: 1.cluster_<name>_nodes_set:用于在重启时将节点重新加入集群。它在所有节点上更新,方式与ALTER CLUSTER ... UPDATE nodes相同。JOIN CLUSTER命令会自动执行此更新。集群状态将此列表显示为cluster_<name>_nodes_set。 2. cluster_<name>_nodes_view:此列表包含所有用于复制的活动节点,无需手动管理。ALTER CLUSTER ... UPDATE nodes实际上将此节点列表复制到用于重启时重新加入的节点列表中。集群状态将此列表显示为cluster_<name>_nodes_view

当节点位于不同的网段或数据中心时,可以显式设置nodes选项。这可以最小化节点间的流量,并利用网关节点进行数据中心间的互通。以下代码使用nodes选项加入现有集群。

注意: 使用此语法时,集群的cluster_<name>_nodes_set列表不会自动更新。要更新它,请使用ALTER CLUSTER ... UPDATE nodes

‹›
  • SQL
  • JSON
  • PHP
  • Python
  • Python-asyncio
  • javascript
  • Java
  • C#
  • Rust
📋
JOIN CLUSTER click_query 'clicks_mirror1:9312;clicks_mirror2:9312;clicks_mirror3:9312' as nodes
‹›
Response
{u'error': u'', u'total': 0, u'warning': u''}

JOIN CLUSTER命令是同步工作的,一旦节点从集群中的其他节点接收到所有数据并与它们同步,命令就会完成。

JOIN CLUSTER操作可能会失败,并显示指示重复server_id的错误消息。当加入节点的server_id与集群中现有节点的server_id相同时,会发生这种情况。要解决此问题,请确保复制集群中的每个节点都有唯一的server_id。您可以在尝试加入集群之前,在配置文件的"searchd"部分将默认的server_id更改为唯一值。

Last modified: August 28, 2025