我正在运行 3 个集群 galera 数据库,在冗余测试期间,我发现如果我正确关闭 3 个节点中的 2 个,最后一个节点仍然会接受写入,即使它是唯一启动的节点。
我不确定这是否是我希望集群工作的方式。是否可以将集群设置为在只有 1 个节点启动时拒绝写入?
答案1
集群大小(wsrep_cluster_size
)是一个动态值,它会随着您在 Galera 集群中启动或关闭节点而增大或缩小。
当你优雅地关闭三个节点中的两个时,你实际上是将主要成分状态到剩余节点。 不存在数据分歧的风险(裂脑),因此最后一个节点仍然可以安全地处理请求。集群大小变为 1,实际上只剩下一台 MySQL 服务器在运行。
是否可以将集群设置为当仅 1 个节点启动时拒绝写入?
我认为 Galera Cluster 不是这样工作的。从概念上讲,节点只关心形成法定人数。对于每个节点,如果它占多数,则它拥有主要组件状态。孤立节点将成为非主要节点。
如果您突然丢失三个节点中的两个,那么剩下的节点将发现自己处于少数,进入非主状态(如图所示wsrep_cluster_status
),并拒绝读写。
其他资源
加权法定人数Galera Cluster 文档
主要组件状态如何与多数保持一致:
Galera Cluster 如何通过将不占多数的节点置于非主状态来保护自己免受脑裂情况的影响: