OceanBase教程FG058-OceanBase启动故障处理实战
本文档风哥主要介绍OceanBase数据库启动故障处理相关知识,包括OceanBase启动流程、OceanBase启动组件、OceanBase启动日志、OceanBase启动检查清单、OceanBase OBServer启动故障、OceanBase RootService启动故障、OceanBase集群启动故障等内容,风哥教程参考OceanBase官方文档故障处理、运维指南等内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 OceanBase启动流程
OceanBase数据库启动涉及多个组件和步骤,了解启动流程有助于快速定位启动故障。更多视频教程www.fgedu.net.cn
- 1. 系统初始化:加载配置文件,初始化系统参数
- 2. 内存分配:分配共享内存、缓存区等
- 3. 存储初始化:加载数据文件,检查数据一致性
- 4. 网络初始化:启动监听端口,建立网络连接
- 5. 服务启动:启动各内部服务(SQL引擎、事务引擎等)
- 6. 集群加入:加入集群,同步集群状态
1.2 OceanBase启动组件
1. OBServer进程
– 数据库核心进程
– 负责数据存储和查询处理
– 监听端口:2881(SQL)、2882(RPC)
2. RootService
– 集群管理服务
– 负责资源调度、负载均衡
– 只在部分节点运行
3. OBProxy
– 数据库代理服务
– 负责连接路由、负载均衡
– 监听端口:2883
4. OCP(OceanBase Cloud Platform)
– 运维管理平台
– 提供图形化管理界面
– 可选组件
1.3 OceanBase启动日志
1. 日志文件位置
– 主日志:/ob/fgdata/log/observer.log
– 错误日志:/ob/fgdata/log/observer.log.wf
– 启动日志:/ob/fgdata/log/rootservice.log
2. 日志级别
– DEBUG:调试信息
– INFO:普通信息
– WARN:警告信息
– ERROR:错误信息,风哥提示:。
– FATAL:致命错误
3. 关键日志关键字
– [INIT]:初始化相关
– [START]:启动相关
– [LOAD]:加载相关
– [FAIL]:失败相关
– [ERROR]:错误相关
Part02-生产环境规划与建议
2.1 OceanBase启动检查清单
## 系统环境检查
– [ ] 操作系统版本符合要求
– [ ] 系统内核参数配置正确
– [ ] 系统资源(CPU、内存、磁盘)充足
– [ ] 网络连接正常
– [ ] 防火墙配置正确
## 文件系统检查
– [ ] 数据目录存在且权限正确,学习交流加群风哥微信: itpux-com。
– [ ] 日志目录存在且权限正确
– [ ] 磁盘空间充足(至少20%空闲)
– [ ] 文件系统无损坏
## 配置检查
– [ ] 配置文件存在且格式正确
– [ ] 参数设置合理
– [ ] 集群配置一致
– [ ] 网络配置正确
## 依赖检查
– [ ] 依赖库文件存在
– [ ] 端口未被占用
– [ ] 时钟同步正常
– [ ] 主机名解析正常
2.2 OceanBase启动前准备
1. 检查系统资源
$ free -h
total used free shared buff/cache available
Mem: 256G 50G 180G 2G 26G 200G
Swap: 32G 0G 32G
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 500G 200G 300G 40% /ob/fgdata
2. 检查端口占用
$ netstat -tlnp | grep -E ‘2881|2882’
3. 检查配置文件
$ cat /ob/app/oceanbase/etc/observer.config.bin | strings | grep -E ‘data_dir|log_dir’
4. 检查权限
$ ls -la /ob/fgdata/,学习交流加群风哥QQ113257174。
drwxr-xr-x 5 admin admin 4096 Jan 20 10:00 .
drwxr-xr-x 3 admin admin 4096 Jan 20 09:00 ..
drwxr-xr-x 2 admin admin 4096 Jan 20 10:00 log
5. 检查时钟同步
$ timedatectl status
Local time: Sat 2024-01-20 10:00:00 CST
Universal time: Sat 2024-01-20 02:00:00 UTC
RTC time: Sat 2024-01-20 02:00:00
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
2.3 OceanBase启动监控
1. 进程监控
$ watch -n 1 ‘ps aux | grep observer’
2. 端口监控
$ watch -n 1 ‘netstat -tlnp | grep observer’
3. 日志监控
$ tail -f /ob/fgdata/log/observer.log
4. 资源监控
$ watch -n 1 ‘free -h && df -h’
5. 启动状态检查脚本
#!/bin/bash
# check_startup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
echo “=== OceanBase Startup Check ===”
echo “Date: $(date)”,更多视频教程www.fgedu.net.cn。
# 检查进程
echo “Checking observer process…”
if pgrep -x “observer” > /dev/null; then
echo “✓ observer process is running”
else
echo “✗ observer process is not running”
fi
# 检查端口
echo “Checking ports…”
if netstat -tlnp | grep -q ‘:2881’; then
echo “✓ SQL port 2881 is listening”
else
echo “✗ SQL port 2881 is not listening”
fi
# 检查日志
echo “Checking logs…”
if tail -100 /ob/fgdata/log/observer.log | grep -q “successfully”; then
echo “✓ Startup success message found”
else
echo “✗ No startup success message”
fi
echo “=== Check Completed ===”
Part03-生产环境项目实施方案
3.1 OceanBase OBServer启动故障
3.1.1 启动命令与参数
# 1. 正常启动
$ cd /ob/app/oceanbase
$ ./bin/observer -i eth0 -p 2881 -P 2882 -z zone1 -c 1 -d /ob/fgdata \
-r ‘192.168.1.101:2882:2881;192.168.1.102:2882:2881;192.168.1.103:2882:2881’ \
-o ‘memory_limit=100G,datafile_size=500G,log_disk_size=100G’
# 2. 后台启动
$ nohup ./bin/observer -i eth0 -p 2881 -P 2882 -z zone1 -c 1 -d /ob/fgdata \
-r ‘192.168.1.101:2882:2881;192.168.1.102:2882:2881;192.168.1.103:2882:2881’ \
-o ‘memory_limit=100G,datafile_size=500G,log_disk_size=100G’ > /ob/fgdata/log/observer.log 2>&1 &
# 3. 检查启动状态
$ ps aux | grep observer
admin 12345 0.0 0.0 123456 7890 ? Sl 10:00 0:01 ./bin/observer …
# 4. 查看启动日志
$ tail -f /ob/fgdata/log/observer.log
[2024-01-20 10:00:00.123456] INFO [SERVER] start_service (ob_server.cpp:1234) [12345][0][Y0-0000000000000000] [lt=0] [dc=0] start service success
3.1.2 常见启动故障处理
1. 端口被占用
错误日志:
[ERROR] bind port 2881 failed: Address already in use
解决方法:
# 查找占用端口的进程,from DB视频:www.itpux.com。
$ netstat -tlnp | grep 2881
tcp 0 0 0.0.0.0:2881 0.0.0.0:* LISTEN 1234/old_observer
# 停止占用进程
$ kill -9 1234
# 重新启动
$ ./bin/observer …
2. 数据目录不存在
错误日志:
[ERROR] data directory /ob/fgdata does not exist
解决方法:
# 创建数据目录
$ mkdir -p /ob/fgdata
$ chown -R admin:admin /ob/fgdata
# 重新启动
$ ./bin/observer …
3. 权限不足
错误日志:
[ERROR] cannot create file /ob/fgdata/observer.log: Permission denied
解决方法:
# 检查并修复权限
$ chown -R admin:admin /ob/fgdata
$ chmod 755 /ob/fgdata
# 重新启动
$ ./bin/observer …
4. 内存不足
错误日志:
[ERROR] allocate memory failed: Cannot allocate memory
解决方法:
# 检查可用内存
$ free -h
# 调整内存参数
$ ./bin/observer … -o ‘memory_limit=50G’ # 减少内存限制
# 或释放系统内存
$ sync && echo 3 > /proc/sys/vm/drop_caches
3.2 OceanBase RootService启动故障
1. RootService选举失败
错误日志:
[WARN] [RS] elect leader failed, ret=-4030
解决方法:
# 检查集群状态
$ obclient -h192.168.1.101 -P2881 -uroot@sys -p -e “SELECT * FROM oceanbase.__all_virtual_clog_stat;”
# 检查网络连通性
$ ping 192.168.1.102
$ ping 192.168.1.103
# 检查时钟同步
$ ntpq -p
2. RootService启动超时
错误日志:
[ERROR] [RS] start rootservice timeout
解决方法:
# 增加启动超时时间
$ ./bin/observer … -o ‘rootservice_start_timeout=300s’
# 检查系统负载
$ uptime
$ top
3. RootService重复启动
错误日志:
[ERROR] [RS] rootservice already exists in other server
解决方法:
# 检查RootService位置
$ obclient -h192.168.1.101 -P2881 -uroot@sys -p -e “SELECT svr_ip, svr_port, role FROM oceanbase.__all_virtual_core_meta_table;”
# 如果RootService在其他节点,不要强制启动
3.3 OceanBase集群启动故障
1. 集群状态不一致
错误日志:
[ERROR] cluster status inconsistent, cannot start
解决方法:
# 检查集群状态
$ obclient -h192.168.1.101 -P2881 -uroot@sys -p -e “SELECT zone, svr_ip, svr_port, status FROM oceanbase.__all_server;”
+——-+—————+———-+——–+
| zone | svr_ip | svr_port | status |
+——-+—————+———-+——–+
| zone1 | 192.168.1.101 | 2882 | active |
| zone2 | 192.168.1.102 | 2882 | inactive |
| zone3 | 192.168.1.103 | 2882 | active |
+——-+—————+———-+——–+
# 启动异常节点
$ ssh admin@192.168.1.102
$ cd /ob/app/oceanbase
$ ./bin/observer -start
2. 多数派不可用
错误日志:
[ERROR] majority of paxos group is not available
解决方法:
# 检查各节点状态
$ obclient -h192.168.1.101 -P2881 -uroot@sys -p -e “SELECT * FROM oceanbase.__all_zone;”
# 如果多数派节点故障,需要手动恢复
# 参考集群恢复文档
3. 数据不一致
错误日志:
[ERROR] data checksum mismatch
解决方法:
# 检查数据一致性
$ obclient -h192.168.1.101 -P2881 -uroot@sys -p -e “SELECT * FROM oceanbase.__all_virtual_partition_sstable_image_info;”
# 如果数据损坏,可能需要从备份恢复
Part04-生产案例与实战讲解
4.1 OceanBase磁盘满启动失败案例
OBServer启动失败,日志显示磁盘空间不足
# 错误日志
[2024-01-20 10:00:00.123456] ERROR [STORAGE] open (ob_file.cpp:123) [12345] [lt=0] [dc=0]
failed to create file, filename=/ob/fgdata/sstable/block_file, ret=-4008, errno=28(No space left on device)
# 排查过程
1. 检查磁盘空间
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 500G 500G 0G 100% /ob/fgdata
2. 查找大文件
$ du -sh /ob/fgdata/* | sort -hr
150G /ob/fgdata/log
200G /ob/fgdata/sstable
50G /ob/fgdata/clog
3. 清理日志文件
# 备份旧日志
$ mkdir -p /backup/logs/$(date +%Y%m%d)
$ mv /ob/fgdata/log/observer.log.* /backup/logs/$(date +%Y%m%d)/
# 压缩备份
$ cd /backup/logs/$(date +%Y%m%d)
$ gzip *.log
# 清理30天前的日志
$ find /ob/fgdata/log -name “*.log.*” -mtime +30 -delete
4. 重新启动
$ cd /ob/app/oceanbase
$ ./bin/observer -start
[2024-01-20 10:30:00.123456] INFO [SERVER] start_service (ob_server.cpp:1234) [12345] [lt=0] [dc=0] start service success
# 故障解决
# 预防措施
#!/bin/bash
# disk_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# 监控磁盘空间
USAGE=$(df -h /ob/fgdata | awk ‘NR==2 {print $5}’ | sed ‘s/%//’)
if [ $USAGE -gt 80 ]; then
echo “Warning: Disk usage is ${USAGE}%” | mail -s “Disk Alert” dba@fgedu.net.cn
fi
4.2 OceanBase内存不足启动失败案例
OBServer启动失败,日志显示内存分配失败
# 错误日志
[2024-01-20 10:00:00.123456] ERROR [COMMON] alloc (ob_malloc.cpp:456) [12345] [lt=0] [dc=0]
allocate memory failed, size=10737418240, ret=-4004
[2024-01-20 10:00:00.123456] ERROR [SERVER] init (ob_server.cpp:789) [12345] [lt=0] [dc=0]
init cache failed, ret=-4004
# 排查过程
1. 检查系统内存
$ free -h
total used free shared buff/cache available
Mem: 128G 120G 2G 2G 6G 4G
Swap: 32G 32G 0G
2. 检查内存使用
$ ps aux –sort=-%mem | head -10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
admin 10001 5.0 60.0 80.0g 76.8g ? Sl Jan19 50:00 /ob/app/other/process
admin 10002 3.0 20.0 30.0g 25.6g ? Sl Jan19 30:00 /ob/app/another/process
3. 释放内存
# 停止不必要的进程
$ kill -15 10001
$ kill -15 10002
# 清理缓存
$ sync && echo 3 > /proc/sys/vm/drop_caches
4. 调整OBServer内存参数
$ cd /ob/app/oceanbase
$ ./bin/observer -i eth0 -p 2881 -P 2882 -z zone1 -c 1 -d /ob/fgdata \
-r ‘192.168.1.101:2882:2881;192.168.1.102:2882:2881;192.168.1.103:2882:2881’ \
-o ‘memory_limit=60G,system_memory=20G’ # 降低内存限制
5. 验证启动
$ tail -f /ob/fgdata/log/observer.log
[2024-01-20 10:30:00.123456] INFO [SERVER] start_service (ob_server.cpp:1234) [12345] [lt=0] [dc=0] start service success
# 故障解决
# 预防措施:配置内存监控
#!/bin/bash
# memory_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
FREE_MEM=$(free -m | awk ‘NR==2{printf “%.2f”, $7*100/$2}’)
if (( $(echo “$FREE_MEM < 10" | bc -l) )); then
echo "Warning: Free memory is only ${FREE_MEM}%" | mail -s "Memory Alert" dba@fgedu.net.cn
fi
4.3 OceanBase配置错误启动失败案例
OBServer启动失败,日志显示配置参数错误
# 错误日志
[2024-01-20 10:00:00.123456] ERROR [SERVER] parse_config (ob_config.cpp:234) [12345] [lt=0] [dc=0]
invalid config, name=memory_limit, value=abc, ret=-4016
[2024-01-20 10:00:00.123456] ERROR [SERVER] main (ob_server.cpp:100) [12345] [lt=0] [dc=0]
parse config failed, ret=-4016
# 排查过程
1. 检查配置文件
$ cat /ob/app/oceanbase/etc/observer.config.bin | strings | grep memory_limit
memory_limit=abc # 错误的值
2. 修正配置
# 编辑配置文件
$ vi /ob/app/oceanbase/etc/observer.config.bin
# 或使用命令行参数覆盖
$ ./bin/observer … -o ‘memory_limit=100G’
3. 重新启动
$ cd /ob/app/oceanbase
$ ./bin/observer -i eth0 -p 2881 -P 2882 -z zone1 -c 1 -d /ob/fgdata \
-r ‘192.168.1.101:2882:2881;192.168.1.102:2882:2881;192.168.1.103:2882:2881’ \
-o ‘memory_limit=100G,datafile_size=500G’
4. 验证启动
$ tail -f /ob/fgdata/log/observer.log
[2024-01-20 10:30:00.123456] INFO [SERVER] start_service (ob_server.cpp:1234) [12345] [lt=0] [dc=0] start service success
# 故障解决
# 常见配置错误
1. 参数值格式错误:memory_limit=abc(应为数字+单位)
2. 参数值超出范围:memory_limit=1000T(超过物理内存)
3. 路径不存在:data_dir=/nonexistent/path
4. 网络配置错误:local_ip=192.168.1.999(无效IP)
5. 端口冲突:mysql_port=22(与SSH端口冲突)
# 配置验证脚本
#!/bin/bash
# config_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
echo “=== OceanBase Config Check ===”
# 检查内存参数
MEM_LIMIT=$(grep memory_limit /ob/app/oceanbase/etc/observer.config.bin | grep -o ‘[0-9]*’)
TOTAL_MEM=$(free -g | awk ‘NR==2{print $2}’)
if [ “$MEM_LIMIT” -gt “$TOTAL_MEM” ]; then
echo “Error: memory_limit (${MEM_LIMIT}G) exceeds total memory (${TOTAL_MEM}G)”
fi
# 检查路径
DATA_DIR=$(grep data_dir /ob/app/oceanbase/etc/observer.config.bin | cut -d’=’ -f2)
if [ ! -d “$DATA_DIR” ]; then
echo “Error: data_dir does not exist: $DATA_DIR”
fi
echo “=== Check Completed ===”
Part05-风哥经验总结与分享
5.1 OceanBase启动故障处理最佳实践
1. 故障排查流程
– 查看错误日志,定位错误信息
– 检查系统资源(CPU、内存、磁盘)
– 检查网络连接和端口
– 检查配置文件
– 检查权限设置
2. 日志分析方法
– 从后向前查看日志
– 关注ERROR和FATAL级别日志
– 查看相关上下文日志
– 对比正常启动日志
3. 预防措施
– 定期检查系统资源
– 监控磁盘空间使用
– 配置日志轮转
– 保留配置备份
4. 应急响应
– 准备启动脚本
– 记录常见故障处理
– 建立故障处理手册
– 定期演练故障恢复
5. 文档记录
– 记录故障现象
– 记录排查过程
– 记录解决方法
– 更新知识库
5.2 OceanBase启动问题排查方法
1. 系统层面排查
# 检查系统资源
free -h
df -h
uptime
# 检查进程
ps aux | grep observer
# 检查端口
netstat -tlnp | grep 2881
# 检查网络
ping
telnet
2. 配置层面排查
# 检查配置文件
cat /ob/app/oceanbase/etc/observer.config.bin
# 检查参数
grep -E ‘memory_limit|data_dir|log_dir’ /ob/app/oceanbase/etc/observer.config.bin
# 检查权限
ls -la /ob/fgdata/
3. 日志层面排查
# 查看最新错误
tail -100 /ob/fgdata/log/observer.log | grep ERROR
# 查看启动过程
grep -E ‘INIT|START|FAIL’ /ob/fgdata/log/observer.log
# 查看特定错误
grep ‘memory’ /ob/fgdata/log/observer.log
4. 集群层面排查
# 检查集群状态
obclient -e “SELECT * FROM oceanbase.__all_server;”
# 检查RootService
obclient -e “SELECT * FROM oceanbase.__all_virtual_core_meta_table;”
# 检查Zone状态
obclient -e “SELECT * FROM oceanbase.__all_zone;”
5.3 OceanBase启动故障常见问题
Q1: OBServer启动后立即退出?
A1: 检查日志中的错误信息,通常是配置错误或资源不足
Q2: OBServer启动但无法连接?
A2: 检查端口监听状态,检查防火墙配置
Q3: 集群启动后状态不一致?
A3: 检查各节点时钟同步,检查网络连通性
Q4: RootService无法选举?
A4: 检查多数派节点状态,检查网络延迟
Q5: 启动日志中没有错误但无法启动?
A5: 检查日志级别设置,查看WARN级别日志
Q6: 如何查看OBServer启动进度?
A6: 使用tail -f实时监控日志,查看START关键字
Q7: 启动失败后如何清理?
A7: 停止进程,清理临时文件,检查数据一致性后重试
Q8: 如何加快启动速度?
A8: 减少内存分配,优化配置参数,使用SSD存储
Q9: 启动时卡住不动?
A9: 检查磁盘IO,检查网络连接,检查其他节点状态
Q10: 如何避免启动失败?
A10: 启动前完成检查清单,测试环境验证配置,保留备份
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
