环境信息
- 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 重新启动,才能恢复正常。
想确认的问题
- 这个 systemd 服务是 OBD 故意注册的吗?设计上 OBShell(–takeover 0)应该如何与 OBD 协调状态同步?
- 节点重启后 systemd 自动拉起的 observer,为何 OBD 无法识别?–takeover 0 这个参数的作用是什么,如果改成 --takeover 1
会有什么影响? - 官方推荐的处理方式是什么?是应该:
- disable 这个 systemd 服务,完全由 OBD 手动管理?
- 还是切换到 OBShell 体系管理,不再用 OBD 命令?
- 或者有其他推荐方案?