加入复制集群

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

  • 集群的 名称
  • 您要加入的集群中另一个节点的 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。您可以在配置文件的 "searchd" 部分将默认的 server_id 更改为唯一值,然后再尝试加入集群。

Last modified: August 28, 2025