外观
OceanBase 节点故障处理
节点故障类型
1. 硬件故障
服务器硬件故障
- CPU 故障
- 内存故障
- 磁盘故障
- 电源故障
- 主板故障
存储硬件故障
- 磁盘损坏
- RAID 卡故障
- 存储阵列故障
- 硬盘读写错误
2. 软件故障
操作系统故障
- 系统崩溃
- 内核 panic
- 文件系统损坏
- 系统死锁
数据库进程故障
- OBServer 进程崩溃
- 进程无响应
- 内存泄漏
- 线程死锁
3. 网络故障
网络连接故障
- 网卡故障
- 网络线缆故障
- 交换机故障
- 网络分区
网络配置故障
- IP 地址冲突
- 路由配置错误
- 防火墙规则错误
- DNS 配置错误
节点故障检测
1. 故障检测机制
内置故障检测
- OceanBase 内置的故障检测服务
- 定期发送心跳检测
- 基于 Paxos 协议的一致性检测
监控系统检测
- OCP(OceanBase Cloud Platform)监控
- 第三方监控系统(如 Prometheus + Grafana)
- 自定义监控脚本
2. 故障检测参数
sql
-- 查看故障检测相关参数
SHOW PARAMETERS LIKE '%check%';
SHOW PARAMETERS LIKE '%timeout%';
-- 修改故障检测参数
ALTER SYSTEM SET server_check_interval = 3000; -- 服务器检查间隔(毫秒)
ALTER SYSTEM SET server_down_time = 20000; -- 服务器宕机判定时间(毫秒)
ALTER SYSTEM SET enable_auto_failover = TRUE; -- 启用自动故障切换3. 故障检测流程
心跳检测:
- 定期发送心跳包
- 检查服务器是否响应
- 检测网络连接状态
状态验证:
- 检查 OBServer 进程状态
- 验证数据库服务可用性
- 检查资源使用情况
故障确认:
- 多次检测确认故障
- 排除误报
- 确定故障类型和严重程度
故障通知:
- 发送告警通知
- 记录故障日志
- 触发自动故障处理流程
节点故障处理流程
1. 故障响应
告警接收与确认
- 接收监控系统告警
- 登录故障节点进行确认
- 初步判断故障类型
故障影响评估
- 评估故障节点的角色和重要性
- 检查受影响的业务
- 确定故障处理优先级
2. 故障处理
自动故障处理
- 自动故障切换(AFS)
- 自动副本迁移
- 自动恢复服务
sql
-- 查看自动故障切换状态
SELECT * FROM oceanbase.GV$OB_AUTO_FAILOVER_STATUS;
-- 启用自动故障切换
ALTER SYSTEM SET enable_auto_failover = TRUE;手动故障处理
确认故障节点状态:
sql-- 查看节点状态 SELECT * FROM oceanbase.GV$OB_SERVER WHERE status != 'ACTIVE'; -- 查看节点详细状态 SELECT * FROM oceanbase.GV$OB_SERVER_STATUS WHERE svr_ip = '10.0.0.1';隔离故障节点:
sql-- 停止故障节点服务 ALTER SYSTEM STOP SERVER '10.0.0.1:2882'; -- 从集群中移除故障节点 ALTER SYSTEM DELETE SERVER '10.0.0.1:2882';恢复或替换节点:
- 修复硬件故障
- 重装操作系统和数据库
- 替换故障服务器
- 重新部署 OBServer 节点
重新加入集群:
sql-- 添加新节点到集群 ALTER SYSTEM ADD SERVER '10.0.0.1:2882' ZONE 'zone1' WITH ROOTSERVER_LIST = ('10.0.0.2:2882', '10.0.0.3:2882'); -- 启动节点服务 ALTER SYSTEM START SERVER '10.0.0.1:2882';
3. 故障恢复验证
节点恢复验证
sql
-- 检查节点状态
SELECT * FROM oceanbase.GV$OB_SERVER WHERE svr_ip = '10.0.0.1';
-- 检查节点服务状态
SELECT * FROM oceanbase.GV$OB_SERVICE_STATUS WHERE svr_ip = '10.0.0.1';
-- 检查副本状态
SELECT * FROM oceanbase.GV$OB_REPLICA WHERE svr_ip = '10.0.0.1';业务恢复验证
- 检查业务连接状态
- 验证业务功能正常
- 检查数据一致性
- 确认性能恢复正常
节点故障恢复方法
1. 重启恢复
适用场景
- 进程崩溃
- 内存泄漏
- 临时死锁
- 软件配置错误
操作步骤
bash
# 登录故障节点
ssh user@10.0.0.1
# 检查 OBServer 进程状态
ps -ef | grep observer
# 停止 OBServer 进程
kill -9 <observer_pid>
# 启动 OBServer 进程
cd /home/admin/oceanbase && ./bin/observer
# 或使用 systemd 管理
systemctl restart oceanbase2. 重装恢复
适用场景
- 操作系统故障
- 文件系统损坏
- 数据库软件损坏
- 配置文件丢失
操作步骤
- 备份数据(如果可能)
- 重装操作系统
- 安装依赖包
- 重新部署 OBServer
- 恢复数据
- 加入集群
3. 替换恢复
适用场景
- 硬件故障无法修复
- 服务器老化
- 硬件性能不足
操作步骤
- 准备新服务器
- 安装操作系统和依赖
- 部署 OBServer 软件
- 将新节点加入集群
- 迁移副本到新节点
- 移除故障节点
4. 数据恢复
从备份恢复
sql
-- 停止租户服务
ALTER TENANT tenant1 STOP SERVICE;
-- 恢复数据
RESTORE TENANT tenant1 FROM 'oss://backup-bucket/full/20240118' WITH BACKUPSET 'backup_set_20240118';
-- 启动租户服务
ALTER TENANT tenant1 START SERVICE;从副本恢复
- 利用其他节点的副本数据
- 通过 Paxos 协议自动恢复数据一致性
- 无需手动干预(在自动故障切换启用的情况下)
节点故障处理最佳实践
1. 故障预防
硬件冗余
- 使用 RAID 存储
- 配置冗余电源
- 使用双网卡绑定
- 部署多可用区
软件优化
- 定期更新操作系统和数据库版本
- 优化系统配置
- 定期清理日志和临时文件
- 监控资源使用情况
监控告警
- 配置全面的监控指标
- 设置合理的告警阈值
- 建立告警分级机制
- 确保告警及时送达
2. 故障响应
建立故障响应流程
- 明确故障处理角色和职责
- 制定故障分级标准
- 建立故障处理 SOP
- 定期进行故障演练
快速响应
- 24/7 监控
- 快速告警通知
- 立即着手处理
- 及时更新故障状态
3. 故障恢复
优先恢复服务
- 首先确保业务可用性
- 然后进行彻底修复
- 最后进行优化改进
数据一致性保障
- 恢复后验证数据一致性
- 检查副本同步状态
- 确保事务完整性
节点故障监控与告警
1. 关键监控指标
节点状态指标
- 服务器在线状态
- OBServer 进程状态
- 服务可用性
- 心跳检测状态
资源使用指标
- CPU 使用率
- 内存使用率
- 磁盘 I/O 使用率
- 网络流量
数据库性能指标
- QPS/TPS
- 响应时间
- 连接数
- 慢查询数
2. 告警配置
告警级别
- 紧急告警:需要立即处理的故障
- 重要告警:需要尽快处理的问题
- 一般告警:需要关注的问题
- 提示告警:需要了解的信息
告警方式
- 邮件告警
- 短信告警
- 电话告警
- 即时通讯工具告警(如钉钉、微信)
- 告警平台集成
3. 告警处理流程
告警接收:
- 监控系统发送告警
- 相关人员接收告警
告警确认:
- 登录系统确认故障
- 初步判断故障类型
- 评估故障影响
告警处理:
- 按照故障处理流程处理
- 记录处理过程
- 更新告警状态
告警关闭:
- 故障恢复后关闭告警
- 记录故障原因和处理结果
- 进行故障复盘
常见节点故障案例
1. OBServer 进程崩溃
故障现象
- 监控系统告警 OBServer 进程消失
- 节点状态变为 DOWN
- 业务连接异常
处理步骤
- 登录故障节点,检查 OBServer 进程状态
- 查看 OBServer 日志,分析崩溃原因
- 重启 OBServer 进程
- 验证节点恢复正常
- 分析崩溃原因,进行优化
2. 磁盘故障
故障现象
- 监控系统告警磁盘 I/O 错误
- 节点状态异常
- 副本同步延迟
处理步骤
- 确认磁盘故障
- 将节点从集群中移除
- 更换故障磁盘
- 重新部署节点
- 加入集群并恢复副本
3. 网络分区
故障现象
- 节点间通信异常
- 集群分裂
- 副本状态异常
处理步骤
- 确认网络分区原因
- 修复网络故障
- 等待集群自动恢复
- 验证集群状态正常
- 优化网络架构
节点故障处理工具
1. 内置工具
OBD(OceanBase Deployer)
bash
# 检查集群状态
obd cluster status <cluster_name>
# 重启节点
obd cluster restart <cluster_name> -N 10.0.0.1
# 查看日志
obd cluster display <cluster_name> --role observerOCP(OceanBase Cloud Platform)
- 可视化监控和管理界面
- 自动故障检测和处理
- 节点管理和维护
- 性能监控和分析
2. 命令行工具
集群状态检查
sql
-- 查看集群状态
SELECT * FROM oceanbase.GV$OB_CLUSTER_STATUS;
-- 查看节点状态
SELECT * FROM oceanbase.GV$OB_SERVER;
-- 查看副本状态
SELECT * FROM oceanbase.GV$OB_REPLICA;节点管理命令
sql
-- 添加节点
ALTER SYSTEM ADD SERVER '10.0.0.1:2882' ZONE 'zone1';
-- 删除节点
ALTER SYSTEM DELETE SERVER '10.0.0.1:2882';
-- 启动节点
ALTER SYSTEM START SERVER '10.0.0.1:2882';
-- 停止节点
ALTER SYSTEM STOP SERVER '10.0.0.1:2882';常见问题及解决方案
1. 节点无法启动
故障现象
- OBServer 进程无法启动
- 启动后立即崩溃
- 日志中出现错误信息
解决方案
bash
# 检查配置文件
cat /home/admin/oceanbase/conf/observer.conf
# 检查端口占用
netstat -tuln | grep 2881
netstat -tuln | grep 2882
# 检查日志
tail -n 100 /home/admin/oceanbase/log/observer.log
# 检查数据目录权限
ls -la /home/admin/oceanbase/data2. 节点无法加入集群
故障现象
- 节点启动后无法加入集群
- 集群状态中节点显示异常
- 日志中出现连接错误
解决方案
sql
-- 检查集群 rootserver 配置
SHOW PARAMETERS LIKE 'rootservice_list';
-- 检查节点网络连接
ALTER SYSTEM CHECK SERVER '10.0.0.1:2882';
-- 检查节点配置
SHOW PARAMETERS LIKE '%zone%';
SHOW PARAMETERS LIKE '%cluster%';3. 副本同步延迟
故障现象
- 副本状态显示 SYNCING
- 同步延迟持续增加
- 影响数据一致性
解决方案
sql
-- 查看副本同步状态
SELECT * FROM oceanbase.GV$OB_REPLICA_SYNC_STATUS WHERE svr_ip = '10.0.0.1';
-- 检查网络状态
SELECT * FROM oceanbase.GV$OB_NETWORK_STATUS;
-- 调整同步参数
ALTER SYSTEM SET replication_retry_interval = 500;
ALTER SYSTEM SET replication_timeout = 3000;4. 自动故障切换失败
故障现象
- 节点故障后自动切换未触发
- 集群状态异常
- 业务受到影响
解决方案
sql
-- 检查自动故障切换配置
SHOW PARAMETERS LIKE 'enable_auto_failover';
SHOW PARAMETERS LIKE 'server_down_time';
-- 手动触发故障切换
ALTER SYSTEM SWITCHover ZONE 'zone1' TO 'zone2';
-- 检查故障切换状态
SELECT * FROM oceanbase.GV$OB_AUTO_FAILOVER_STATUS;常见问题(FAQ)
Q1: 如何判断节点是否故障?
A1: 可以通过以下方式判断节点是否故障:
- 监控系统告警
- 登录节点检查 OBServer 进程状态
- 通过 SQL 语句查询节点状态:
SELECT * FROM oceanbase.GV$OB_SERVER WHERE svr_ip = '10.0.0.1'; - 检查节点心跳状态
Q2: 节点故障后会自动恢复吗?
A2: 如果启用了自动故障切换(enable_auto_failover = TRUE),OceanBase 会自动检测节点故障并进行故障切换,确保业务连续性。但具体恢复情况取决于故障类型和严重程度。
Q3: 节点故障后如何保障数据一致性?
A3: OceanBase 使用 Paxos 协议保证数据一致性,当节点故障时:
- 剩余节点会重新选举 leader
- 通过多数派确认机制保证数据一致性
- 故障恢复后,会自动同步缺失的数据
- 可以通过
SELECT * FROM oceanbase.GV$OB_REPLICA_SYNC_STATUS;检查副本同步状态
Q4: 如何避免节点故障?
A4: 可以通过以下措施避免节点故障:
- 使用冗余硬件配置
- 定期更新系统和软件
- 优化系统配置
- 建立完善的监控告警机制
- 定期进行系统维护和巡检
Q5: 节点故障处理的优先级是什么?
A5: 节点故障处理的优先级建议:
- 保障业务连续性
- 确保数据一致性
- 恢复系统性能
- 彻底修复故障
- 进行优化改进
Q6: 如何进行节点故障演练?
A6: 节点故障演练的步骤:
- 制定演练计划
- 选择合适的时间(业务低峰期)
- 模拟各种故障场景
- 按照故障处理流程进行处理
- 记录演练过程和结果
- 进行演练总结和改进
Q7: 节点故障后如何快速恢复业务?
A7: 快速恢复业务的方法:
- 启用自动故障切换
- 确保集群有足够的冗余节点
- 优化故障检测和响应流程
- 建立完善的备份恢复机制
- 定期进行故障恢复演练
Q8: 如何监控节点状态?
A8: 可以通过以下方式监控节点状态:
- 使用 OCP 监控界面
- 配置 Prometheus + Grafana 监控
- 使用自定义监控脚本
- 定期执行健康检查命令
- 设置节点状态告警
