OBD 社区版部署后 systemd 服务与 OBD 状态管理冲突问题


环境信息

  • OceanBase 版本:4.3.5.4
  • OBD 版本:3.6.0
  • 部署方式:OBD 社区版,多集群部署(3 Zone 架构)
  • 操作系统:Linux(systemd)

问题描述

使用 OBD 部署 OceanBase 后,节点机器上会自动注册并启用一个 systemd 服务:

obd_oceanbase_<集群名>.service enabled

服务内容如下:

[Service]
User=admin
Type=forking
ExecStart=/home/admin/<集群名>/oceanbase/bin/obshell admin start --takeover 0 --ob
ExecStop=/home/admin/<集群名>/oceanbase/bin/obshell admin stop
PIDFile=/home/admin/<集群名>/oceanbase/run/observer.pid
Restart=on-failure
RestartSec=10

问题现象:

节点机器重启后,systemd 自动拉起 observer 进程,但该进程不受 OBD 状态管理。此时在中控机执行 obd cluster display
<集群名> 会报错(如 OBD-2002),OBD 无法正常识别和管理该进程。必须手动登录节点 kill 掉 observer 进程,再通过中控机 obd
cluster start 重新启动,才能恢复正常。


想确认的问题

  1. 这个 systemd 服务是 OBD 故意注册的吗?设计上 OBShell(–takeover 0)应该如何与 OBD 协调状态同步?
  2. 节点重启后 systemd 自动拉起的 observer,为何 OBD 无法识别?–takeover 0 这个参数的作用是什么,如果改成 --takeover 1
    会有什么影响?
  3. 官方推荐的处理方式是什么?是应该:
    - disable 这个 systemd 服务,完全由 OBD 手动管理?
    - 还是切换到 OBShell 体系管理,不再用 OBD 命令?
    - 或者有其他推荐方案?
1 个赞

集群配置了开机自启动参数了么

集群本身配置了 enable_auto_start: True。问题是,一个集群中的节点机关机重启后,节点主机自动起了一个OBserver,但是在中控机OBD那又不互通,不明白是哪里的问题。我是先OBD部署集群,然后OCP接管了,平时集群的管理主要使用OBD,日常租户,权限使用OCP。

observer 一旦崩溃,systemd 10秒后自动重拉,新进程有新 PID,但 OBD 的状态文件里还记着旧的,就出现 PID
不一致。

部署完OB后,自动由systemd来管理么,我部的时候好像没有啊,这是新版才有的么

学习来了

目前解决方法手动kill用obd 拉起一下就好了。这个问题obd后续版本会进行修复

学到了