【发布时间】:2017-06-09 06:45:42
【问题描述】:
我有一个由三个节点组成的 galera 集群,如果我关闭三个虚拟机并同时启动它们,systemd 将自动在每个虚拟机上启动 mariadb。
有时会发生所有 mariadb 实例同时启动的情况,这是集群损坏的结果。
我必须使用 galera_new_cluster 重新启动
问题是,为什么一次启动所有 mariadb 实例会破坏集群?
谢谢
【问题讨论】:
我有一个由三个节点组成的 galera 集群,如果我关闭三个虚拟机并同时启动它们,systemd 将自动在每个虚拟机上启动 mariadb。
有时会发生所有 mariadb 实例同时启动的情况,这是集群损坏的结果。
我必须使用 galera_new_cluster 重新启动
问题是,为什么一次启动所有 mariadb 实例会破坏集群?
谢谢
【问题讨论】:
每当您启动一个节点时,它要么作为集群中的第一个节点启动(启动一个新集群),要么尝试使用wsrep_cluster_address 连接到现有节点。行为取决于节点选项。
因此,每次关闭或丢失所有节点并重新启动它们时,都没有可连接的内容,您需要启动一个 new 集群。 galera_new_cluster 通过使用 --wsrep-new-cluster 选项启动一个节点来实现这一点,该选项会覆盖 wsrep_cluster_address 的当前值。
如果有时它会自动为您工作,则很可能意味着您的一个节点通过wsrep_cluster_address=gcomm:// 或wsrep-new-cluster 永久配置为“第一个节点”。这本身就是一个错误的设置。如果您丢失或关闭了仅此节点并且必须重新启动它,它不会加入集群中的其余节点,而是会创建一个新节点。
当您一次启动所有节点时,您创建了一个竞争条件。如果您的“第一个节点”首先出现并足够快地初始化,它将创建一个新集群,其他节点将加入它。如果另一个节点先出现,它将无法加入任何东西,因此您会得到一个“破碎的集群”。
您可以在此处找到有关重新启动整个集群的更多信息: http://galeracluster.com/documentation-webpages/restartingcluster.html
【讨论】:
引导集群的推荐方法是先启动一个高级节点,然后是第二个和第三个节点,因此您需要检查所有节点的 lsn no 或检查 grastate.date 文件,您可以在其中检查所有节点的值。
所以按照这些步骤你的集群节点不会崩溃
【讨论】: