MariaDB galera 集群,不间断添加节点

MariaDB galera 集群,不间断添加节点

我想设置一个有 3 个服务器的 Galera 集群。但我有一个问题:

  • 如何在 wsrep_cluster_address 参数中添加新 IP,以允许此新服务器在集群中不间断同步?(重新启动 mariadb)

谢谢

答案1

一般情况下,你不需要这样做。当集群运行时发现所有其他节点从它首先连接的任何节点动态地连接,因此您可以在此设置中指定任何连接的节点:

新节点只需要连接到一个现有集群节点即可。一旦它连接到一个现有集群节点,它就能够看到集群中的所有节点。

但是,建议您在此变量中指定所有节点。它甚至支持指定包括自身在内的所有节点,因此您只需在所有节点的配置中指定相同的字符串即可。但是,您不需要重新启动节点。需要此设置以防万一您需要重新启动它,以便它能够加入正在运行的集群,但是当集群组装完成后,所有节点都会知道所有其他节点。因此,通常情况下,您会构建一个集群,然后wsrep_cluster_address在配置文件中更新,但之后无需重新启动节点。

但是,如果 IST 配置正确,节点重启会相对较快,因为它只从活动节点传输缺失的写入集(因此是“增量”状态传输),而不是像 SST 那样传输完整的数据集。因此,您可以重启节点而不会造成重大中断。您的应用程序应该能够应对这种小中断,例如,重新连接到任何其他活动节点(否则 Galera 集群就没用了)。

这意味着,您可以将第 2 和第 3 个节点加入集群,然后更新第 1 个节点上的配置并重新启动它;在其停机期间,将有 3 个节点中的 2 个节点达到法定人数,当它准备就绪时,它将使用其wsrep_cluster_address变量重新加入集群。我甚至建议这样做,只是为了知道重新启动节点时会发生什么。

还要注意,Galera 的wsrep_*配置指令是系统变量。其中许多可以交互设置无需重启。wsrep_cluster_address可以在运行时更改:

SET GLOBAL wsrep_cluster_address="gcomm://node1,node2,node3";

这可能会导致节点重新连接

在某些配置中,该变量可以在运行时更改,并将导致节点关闭与任何当前集群的连接并连接到新地址。

因此,像这样设置或在更新配置文件后简单地重新启动节点并没有太大区别。

答案2

(我不知道添加第 4 个节点的具体步骤。)

当向 Galera 集群宣布新节点时,会发生以下情况,假设 Galera 已安装,但其中尚不存在数据。

  1. 选择现有节点作为“捐赠者”。
  2. 执行 SST 以将数据的整个状态从捐赠者复制到新节点。
  3. 新的节点被声明为在线。

第 2 步需要的时间取决于数据集的大小。并且由于 I/O,它会拖慢供体的速度。复制可以通过多种方式进行;请参阅配置设置。

相关内容