MGR + Proxy 集群故障排查
有私有部署项目报DB连接失败。
当然啦,这只是表象,我们的数据库架构是 MGR 集群(3台 MySQL 实例) + n 个 proxy 组成。
可能是集群崩了,比如剩一个实例了,只能读不能写了。
也可能是 proxy 有问题了,没能成功转发请求。
也可能,是网络问题……
因为不在现场,所以只能请项目经理帮忙收集下信息:
查看 MGR 状态
每台实例上均执行以下操作:
查看实例的状态
查看实例错误日志
less error.log
最后启动时间
登录进入 MySQL,执行 \s
命令:
mysql> \s
查看实例是否只读
mysql> show global variables like '%read_only%';
查看 MGR 集群状态
查看集群内的成员
select * from performance_schema.replication_group_members;
查看 MGR 节点的连接状态
select * from performance_schema.replication_connection_status\G
查看 MGR 配置信息
show global variables like '%group_replication%';
查看当前实例是否为主节点
select if((select @@server_uuid)=(select variable_value from performance_schema.global_status where variable_name='group_replication_primary_member'),1,0) as is_primary_mode,@@server_id
查看节点在 proxy 中的配置
select * from sys.gr_member_routing_candidate_status;
看 Proxy 状态
每个 proxy 上执行以下命令:(不排除是 proxy 故障,导致无法查询)
查看 proxy 错误日志
less error.log
查看 proxy 的最后启动时间
ps -ef | grep proxysql
查看管理成员及其分组
select * from mysql_replication_hostgroups;
select * from mysql_servers;
查看连接日志
select * from monitor.mysql_server_connect_log;
日志很可能过长,请分别按时间和出错内容进行查询
select * from monitor.mysql_server_connect_log order by time_start_us desc limit 100;
select * from monitor.mysql_server_connect_log where connect_error is not null order by time_start_us desc limit 100;
查看 ping log
如果连接日志有异常,查看 ping log 辅助查询
select * from monitor.mysql_server_ping_log order by time_start_us desc limit 100;
select * from monitor.mysql_server_ping_log where ping_error is not null order by time_start_us desc limit 100;
查看服务器状态
在每台服务器上执行以下命令:
查看服务是否 OOM
dmesg
查看 docker 是否重启过
docker ps | grep mysql
后记
项目经理说他执行了以下命令,使得访问恢复正常:
load mysql servers to runtime;
该命令只是把 proxy 的配置从磁盘加载到内存中,如果真是它决定了生死,那大概率就是 这个 proxy 的问题了。
最后更新于
这有帮助吗?