我测试了几个故障切换案例,这是我最初的设置
maxctrl list servers
┌─────────┬────────────────┬──────┬─────────────┬─────────────────┬────────────┐
│ Server │ Address │ Port │ Connections │ State │ GTID │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼────────────┤
│ server1 │ XXX.XXX.XX.XXX │ 3306 │ 0 │ Slave, Running │ 0-1-853336 │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼────────────┤
│ server2 │ XXX.XXX.XX.XXX │ 3306 │ 0 │ Master, Running │ 0-1-853336 │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼────────────┤
│ server3 │ XXX.XXX.XX.XXX │ 3306 │ 0 │ Slave, Running │ 0-1-853336 │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼────────────┤
│ server4 │ XXX.XXX.XX.XXX │ 3307 │ 0 │ Slave, Running │ 0-1-853336 │
└─────────┴────────────────┴──────┴─────────────┴─────────────────┴────────────┘
我关闭了主服务器(服务器2)和从服务器(服务器1),然后手动重新启动它们,因此这就变成了设置-
maxctrl list servers
┌─────────┬────────────────┬──────┬─────────────┬─────────────────┬────────────┐
│ Server │ Address │ Port │ Connections │ State │ GTID │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼────────────┤
│ server1 │ XXX.XXX.XX.XXX │ 3306 │ 0 │ Running │ 0-1-853336 │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼────────────┤
│ server2 │ XXX.XXX.XX.XXX │ 3306 │ 0 │ Running │ 0-1-853336 │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼────────────┤
│ server3 │ XXX.XXX.XX.XXX │ 3306 │ 0 │ Master, Running │ 0-1-853336 │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼────────────┤
│ server4 │ XXX.XXX.XX.XXX │ 3307 │ 0 │ Slave, Running │ 0-1-853336 │
└─────────┴────────────────┴──────┴─────────────┴─────────────────┴────────────┘
现在,由于auto_failover=true
和auto_rejoin=true
,server 1和server 2应该作为从服务器重新加入,但它们继续显示为正在运行状态。我甚至尝试使用命令maxctrl call command mariadbmon rejoin DatabaseMonitor server1
手动重新加入它们,但它显示此错误-
Error: Server at 127.0.0.1:8989 responded with status code 403 to `POST maxscale/modules/mariadbmon/rejoin?DatabaseMonitor&server1`:{
"errors": [
{
"detail": "'server1' cannot replicate from master server 'server3': gtid_current_pos of 'server1' (0-1-853336) is incompatible with gtid_binlog_pos of 'server3' (0-200-3)."
}
]
我确信我错过了一些关于GTID复制的东西,但是我不明白为什么。有人能告诉我发生了什么或者如何修复这个问题吗?谢谢。
1条答案
按热度按时间hc2pp10m1#
确保在所有数据库节点上启用了
log_slave_updates
:这是故障转移和切换工作所必需的,因为二进制日志事件必须在所有节点上可用。这也可能与描述类似情况的this bug report有关:如果在从一个节点到另一个节点的故障转移之间没有发生新的事务,则重新加入的节点无法加入,因为新主服务器的
gtid_binlog_pos
与旧主服务器的gtid_current_pos
不兼容,正如错误消息所描述的那样。如果您在新的主服务器上运行创建binlog事件(例如
FLUSH LOGS
)的命令,则在此之后重新加入应该可以工作。