我正在将 Red Hat 上的 MariaDB Galera 集群从 MariaDB 10.1.44 升级到 MariaDB 10.4.13。我升级了集群的 1 个成员,当然,mysql_upgrade --skip-write-binlog
在软件更新完成后运行。然后我将其重新添加到集群中。
乍一看,似乎节点已同步到集群。
show status like 'wsrep_local_state_comment'
设置为Synced
,show global status like 'wsrep_cluster_status'
设置为Primary
,show status like 'wsrep_evs_state
设置为Operational
。
但是,每当我们开始向该节点发送流量时,它似乎都会失败。它暂时与集群的其余部分不同步。但是,一旦我们停止发送流量,它就会再次显示为同步。
检查日志发现,每次交易时似乎都会出现以下警告:
[警告] WSREP:trx 协议版本:4 与认证协议版本:-1 不匹配
SHOW GLOBAL STATUS LIKE 'wsrep_protocol_version'
当前值为:-1
。
SHOW GLOBAL STATUS LIKE
如果我在尚未升级且仍在 MariaDB 10.1.44 上运行的集群成员之一上运行相同的命令,我会看到wsrep_protocol_version
:9
。
在我的实验室环境中检查健康的 MariaDB 10.4.13 集群,其中所有 3 个节点都在 MariaDB 10.4 上运行,我发现它们的wsrep_protocol_version
值为:10
。
我读过了这里和这里在升级过程中,最好在相应的 my.cnf 文件中设置以下内容。这会强制“EVS 版本”与 Galera 集群的旧节点保持兼容,直到 Galera 可以在其余节点上升级:(wsrep_provider_options="evs.version=0"
另请参阅:MariaDBevs.版本)
但是,这似乎并没有解决我的问题。实际上,每个事务似乎都在产生警告WSREP: trx protocol
,即我看到每秒有几行写入日志文件(这是一个繁忙的集群)。
有没有办法在不关闭集群的情况下解决这个问题,或者我需要关闭整个集群并升级集群中的所有节点,然后才能重新上线?