我在发出 COMMIT 时看到“尝试获取锁定时发现死锁”,而 WAN Galera 集群中的另一个节点最近出现了连接问题(几乎与 COMMIT 同时出现)。在这种特殊情况下,我将数据插入到具有 auto_increment PK、没有 FK 和其他唯一约束的单个表中。根据日志记录,发出 COMMIT 的节点尚未识别出其他节点遇到任何问题(在抛出死锁异常后集群大小尚未更改)。我最初认为此错误与集群大小更改时 auto_increment_increment 和 auto_increment_offset 值的变化有关,从而导致 PK 冲突,所以我试图通过将 Galera 配置为根本不管理这些值并在集群中手动设置适当的值来简化问题,但这并没有解决问题。根据 Galera 文档,听起来提交节点验证事务不会导致集群中其他节点出现任何问题。根据我的 auto_increment_* 配置,我知道 auto_increment id 不应冲突,因此,我假设此时提交节点正在尝试检查所有节点的事务状态,包括最近的节点,以及非常暂时(< 1 分钟),离线,它拒绝交易,因为它无法从当前遇到问题的节点获得响应。根据 Galera 文档,听起来提交节点验证事务不会导致集群中其他节点出现任何问题。根据我的 auto_increment_* 配置,我知道 auto_increment id 不应冲突,因此,我假设此时提交节点正在尝试检查所有节点的事务状态,包括最近的节点,以及非常暂时(< 1 分钟),离线,它拒绝交易,因为它无法从当前遇到问题的节点获得响应。根据 Galera 文档,听起来提交节点验证事务不会导致集群中其他节点出现任何问题。根据我的 auto_increment_* 配置,我知道 auto_increment id 不应冲突,因此,我假设此时提交节点正在尝试检查所有节点的事务状态,包括最近的节点,以及非常暂时(< 1 分钟),离线,它拒绝交易,因为它无法从当前遇到问题的节点获得响应。
我对 Galera 相对较新(8 个月),我希望一位经验丰富的 Galera 资深人士可能对处理这种情况的最佳方式提出一些建议。我知道“重试交易”方法,但这让我觉得有点像黑客,我希望有一个替代解决方案,或者至少有一些关于这个特定问题的根本原因的额外信息.
谢谢