OpenStack:MariaDB 问题排查
1. 问题现象分析
1.1 故障表现
MariaDB 集群持续重启循环
虚拟机无法正常使用
错误日志显示集群节点连接失败
1.2 根本原因
- 三节点集群中一台物理机宕机
- 剩余两个节点无法达成共识(脑裂问题)
- Galera 集群无法正常选举主节点
2. 临时解决方案
2.1 停止所有节点服务
1 | # 在所有控制节点执行 |
2.2 调整集群启动顺序
- 选择最新的节点作为引导节点(非原第一个节点)
- 修改引导节点的配置文件
/etc/kolla/mariadb/config.json:
1 | { |
2.3 清理缓存文件
1 | # 在所有节点执行 |
2.4 设置安全引导标志
1 | # 在引导节点执行 |
2.5 重启集群服务
- 首先启动引导节点:
1 | docker start mariadb |
- 等待引导节点完全启动后,启动其他节点:
1 | docker start mariadb |
3. 网络服务恢复
3.1 检查网络状态
1 | ip a |
3.2 重启网络组件
1 | docker restart neutron_dhcp_agent neutron_l3_agent neutron_metadata_agent neutron_openvswitch_agent neutron_server |
3.3 验证虚拟机功能
- 尝试登录现有虚拟机
- 创建新虚拟机测试功能
- 检查网络连通性
4. 根本解决方案
4.1 修复宕机物理节点
- 硬件诊断:检查电源、内存、磁盘状态
- 系统恢复:修复或重装操作系统
- 服务恢复:重新加入集群
4.2 集群配置优化
1 | # /etc/kolla/mariadb/galera.cnf |
4.3 高可用性增强
配置奇数节点集群(3或5节点)
设置节点权重:
1
2
3# 在/etc/kolla/mariadb/galera.cnf
wsrep_provider_options="pc.weight=3" # 主节点
wsrep_provider_options="pc.weight=1" # 备用节点启用自动故障转移
5. 预防措施
5.1 监控配置
1 | # Prometheus监控规则示例 |
5.2 定期维护
每月集群健康检查:
1
docker exec mariadb mysqlcheck --all-databases --optimize
季度故障转移演练
年度硬件健康检查
5.3 备份策略
1 | # 每日全量备份脚本 |
6. 高级诊断工具
6.1 集群状态检查
1 | docker exec -it mariadb mysql -e "SHOW STATUS LIKE 'wsrep%'" |
6.2 日志分析技巧
1 | # 查看实时错误日志 |
6.3 网络诊断
1 | # 检查集群通信 |
7. 故障恢复流程图
1 | graph TD |
8. 关键配置文件说明
8.1 galera.cnf 核心配置
1 | [mysqld] |
8.2 config.json 参数说明
| 参数 | 说明 | 关键值 |
|---|---|---|
| command | 启动命令 | --wsrep_cluster_address=gcomm:// 表示创建新集群 |
| config_files | 配置文件映射 | 包含galera.cnf和通知脚本 |
| permissions | 目录权限 | 确保mysql用户有权访问数据和日志目录 |