摘要:按"现象---检查---处理"定位问题。适用于本系列的 ARM64、x86_64 单节点示例;只在对应步骤失败时查阅,不需要实施前通读。
先记录,不反复重跑
记下失败阶段、首条有效错误、报错进程、时间、数据库完整构建号和 obd --version。日志和截图外发前隐藏口令、地址、主机名及业务 SQL。
不默认删目录、销毁集群、清缓存、关闭安全控制或修改 OBD 检查源码。
1. 安装包、指令集、运行库
| 现象 | 先检查 | 处理原则 |
|---|---|---|
| ARM 非法指令 | uname -m、lscpu 的 atomics、实际 RPM |
确认无 LSE 才用匹配 nonlse;已有 LSE 仍报错时查具体构建 |
| x86 非法指令/AVX 检查失败 | avx、数据库补丁、OBD 版本 |
CE 4.2.5.6 支持无 AVX;其他补丁看 release notes,不删检查代码 |
GLIBC_x.xx not found |
rpm -qpR 主包.rpm、ldd --version |
换匹配制品或补对应系统依赖,不覆盖 glibc、不用 --nodeps |
libaio.so.1 缺失 |
报错进程、RPM 依赖和系统库 | 从匹配的麒麟离线介质补齐,不跨发行版硬装 |
Unsupported system page size |
getconf PAGESIZE、进程及构建 |
按具体组件查兼容性,nonlse 和 THP 不是通用修复 |
不要因 OBClient 报错就认定 observer 也坏了;不同进程分别核对。
2. 找不到 obd 或已部署集群
执行用户:原部署用户 obadmin。
bash
whoami
printf '%s\n' "$HOME"
source "$HOME/.oceanbase-all-in-one/bin/env.sh"
command -v obd
obd --version
obd cluster list
预期 HOME 为 /data/obadmin。默认 ~/.obd 保存镜像、仓库与集群状态,~/.oceanbase-all-in-one 保存工具。root 的 ~ 是另一个目录,不要切到 root 重新 deploy 来"找回集群"。
3. SSH/权限失败
bash
OB_IP='192.0.2.10'
ssh -o BatchMode=yes -i /data/obadmin/.ssh/id_ed25519 \
"obadmin@$OB_IP" 'id; ulimit -n; ulimit -u'
namei -l /data/oceanbase/observer
findmnt -T /data/oceanbase/observer
先替换实际 IP。核对账户状态、端口、私钥路径及权限、主机指纹、上层目录权限、noexec 和安全审计。SSH 返回的限制值也必须达标,不能只看本地 su。
密钥未下发时找管理员完成前置配置,不用 777、免密全权 sudo 或关闭校验兜底。
4. 目录非空
bash
obd cluster list
ls -la /data/oceanbase/observer
pgrep -a -x observer
先确认旧部署、运行进程及数据归属。失败残留与业务数据不能凭文件名区分;不加 -f、不直接删除 block_file 或 redo。重建前需要单独确认备份、目标与影响范围。
5. 严格检查失败、同盘或空间不足
bash
df -hT / /data /data/obadmin /data/oceanbase/observer
findmnt -T /data/oceanbase/data
findmnt -T /data/oceanbase/redo
obd cluster start --help
- **同设备:**两个目录不代表两块盘。部分 OBD 插件把共盘告警在
-S下升级为失败。 - **容量不足:**累计计算数据上限、redo、slog、运行日志和工具缓存,不只看初始数据文件。
- **处理:**优先改存储布局。纯实验环境仅剩已接受的共盘告警、其他检查全通过时,才考虑普通检查模式;不用于绕过硬错误。
"4%"不要误读
官方某资源准备页描述的是部署前文件系统已使用率 低于 4%,不是 datafile_size 至少占盘 4%。不能为了通过检查,把大盘上的小数据库扩大到 TB 级,也不能用占位文件改变使用率。最终以实际 OBD 版本和原始报错定位。
6. 内存不足/长时间等待初始化
bash
free -h
vmstat 1 5
ps -eo pid,user,comm,rss --sort=-rss | head -n 20
ls -lh /data/oceanbase/observer/log
available 不是永久配额;system_memory 已包含在 memory_limit 内,剩余内存还需分给 sys、业务和 Meta 租户。Swap 的历史占用不等于当前抖动,应结合 si/so。
查看失败时间附近的 observer.log、rootservice.log,区分内存、I/O、端口和权限。不要从一条 WARN 推定根因,也不要反复重启初始化中的实例。
7. 租户创建失败或新密码连接失败
sys 会话检查:
sql
SELECT VALUE FROM oceanbase.GV$OB_PARAMETERS
WHERE NAME='__min_full_resource_pool_memory';
SELECT * FROM oceanbase.GV$OB_SERVERS;
SELECT NAME FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE NAME='app_unit';
SELECT NAME FROM oceanbase.DBA_OB_RESOURCE_POOLS WHERE NAME='app_pool';
SELECT TENANT_NAME, STATUS FROM oceanbase.DBA_OB_TENANTS
WHERE TENANT_NAME='app_tenant';
| 情况 | 下一步 |
|---|---|
| Unit 低于内存门槛 | 改用满足门槛且资源充足的规格,不降低隐藏门槛求通过 |
| 资源池分配失败 | 看节点剩余 CPU、内存、日志盘,不能只看主机总资源 |
| 同名对象已经存在 | 确认是否本次部分成功,不能整段重跑或自动删除 |
| 租户未到 NORMAL | 查创建失败原因,不继续密码初始化 |
| 远程连不上 app_tenant | 本系列默认白名单仅限 127.0.0.1,先在本机验收;业务接入另行按来源放行 |
| 密码不对 | sys 密码和租户密码不是同一个设置;确认登录名为 root@app_tenant |
若服务只绑定实际 IP 而不接受回环连接,不要临时放开 %。由管理员将初始化白名单限定为确认过的本机源 IP,再用该地址连接,并记录变更。
业务租户密码初始化后重新用 -p 交互登录。MYSQL_HISTFILE=/dev/null 仅关闭客户端历史,不处理终端录屏或服务端审计。
8. 修改 YAML 没生效
bash
obd cluster edit-config ob-single
obd cluster reload --help
obd cluster restart --help
部署后修改 OBD 注册配置,不只改最初的输入 YAML。按命令输出选择 reload 或带参 restart,参数随 OBD 版本变化;重启会中断服务,先安排维护窗口。遇到 redeploy 提示停下评估,不当作普通刷新。
9. 最终验收清单
- 集群 running,SQL 查询版本和节点状态正确。
- 业务租户 NORMAL,新密码登录及读写验证通过;业务不使用 sys。
- 根盘、家目录、运行日志、data 和 redo 都有容量余量。
- 账户、文件权限和访问来源已收敛,日志与截图已脱敏。
- 自启、重启恢复、备份恢复是否配置已明确记录。
- 单节点无高可用的限制已交接;功能验证不等于生产上线。