1. 首页 > 国产数据库教程 > OceanBase教程 > 正文

OceanBase教程FG058-OceanBase启动故障处理实战

本文档风哥主要介绍OceanBase数据库启动故障处理相关知识,包括OceanBase启动流程、OceanBase启动组件、OceanBase启动日志、OceanBase启动检查清单、OceanBase OBServer启动故障、OceanBase RootService启动故障、OceanBase集群启动故障等内容,风哥教程参考OceanBase官方文档故障处理、运维指南等内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 OceanBase启动流程

OceanBase数据库启动涉及多个组件和步骤,了解启动流程有助于快速定位启动故障。更多视频教程www.fgedu.net.cn

OceanBase启动流程:

  • 1. 系统初始化:加载配置文件,初始化系统参数
  • 2. 内存分配:分配共享内存、缓存区等
  • 3. 存储初始化:加载数据文件,检查数据一致性
  • 4. 网络初始化:启动监听端口,建立网络连接
  • 5. 服务启动:启动各内部服务(SQL引擎、事务引擎等)
  • 6. 集群加入:加入集群,同步集群状态

1.2 OceanBase启动组件

# OceanBase启动组件

1. OBServer进程
– 数据库核心进程
– 负责数据存储和查询处理
– 监听端口:2881(SQL)、2882(RPC)

2. RootService
– 集群管理服务
– 负责资源调度、负载均衡
– 只在部分节点运行

3. OBProxy
– 数据库代理服务
– 负责连接路由、负载均衡
– 监听端口:2883

4. OCP(OceanBase Cloud Platform)
– 运维管理平台
– 提供图形化管理界面
– 可选组件

1.3 OceanBase启动日志

# 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 ===”

生产环境建议:启动前务必完成检查清单,避免启动失败。建议先在测试环境验证启动流程。学习交流加群风哥微信: itpux-com

Part03-生产环境项目实施方案

3.1 OceanBase OBServer启动故障

3.1.1 启动命令与参数

# OBServer启动,更多学习教程公众号风哥教程itpux_com。

# 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启动故障

# 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;”

# 如果数据损坏,可能需要从备份恢复

风哥提示:集群启动故障通常涉及多个节点,需要综合分析各节点的状态和日志。学习交流加群风哥QQ113257174

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 ===”

生产环境建议:配置修改前先在测试环境验证,避免配置错误导致启动失败。建议保留配置备份。更多学习教程公众号风哥教程itpux_com

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 2882

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: 启动前完成检查清单,测试环境验证配置,保留备份

风哥提示:启动故障处理需要冷静分析,按照排查流程逐步定位问题。建议建立完善的监控和告警机制,提前发现潜在问题。from OceanBase视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息