【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】odb版本4.3.4
【问题描述】obd部署单集群,开机怎么自启动配置
【复现路径】问题出现前后相关操作
可以使用service文件的方式
[Unit]
Description=observer
After=network.target
[Service]
User=root
Type=forking
KillSignal=SIGKILL
ExecStartPre=/home/admin/myoceanbase/oceanbase//bin/obshell admin stop
ExecStart=/home/admin/myoceanbase/oceanbase//bin/obshell admin start --takeover 0 --ob
ExecStartPost=/home/admin/myoceanbase/oceanbase//bin/obshell admin stop
ExecStop=/home/admin/myoceanbase/oceanbase//bin/obshell admin stop
PIDFile=/home/admin/myoceanbase/oceanbase//run/observer.pid
Restart=always
RestartSec=5
TimeoutStartSec=300
SuccessExitStatus=SIGKILL
[Install]
WantedBy=multi-user.target
一、推荐方案:通过 systemd 服务管理 OBD 集群
虽然直接通过 OBD 命令管理集群存在风险(如指出跨节点操作可能导致重复启动),但通过 限制作用范围为本机 可安全实现自启。以下是操作步骤:
1. 创建 systemd 服务文件
sudo vim /etc/systemd/system/ob_cluster.service
文件内容如下:
[Unit]
Description=OceanBase Cluster Service
After=network.target syslog.target time-sync.target # 确保网络、时间同步完成
[Service]
Type=forking
User=admin # 替换为实际部署用户(如 admin 或 root)
WorkingDirectory=/home/admin/oceanbase # OB 安装目录
ExecStart=/usr/bin/obd cluster start <deploy_name> # 替换为集群名称
ExecStop=/usr/bin/obd cluster stop <deploy_name>
Restart=on-failure
RestartSec=10s
Environment=PATH=/usr/bin:/bin:/usr/local/bin
[Install]
WantedBy=multi-user.target
2. 启用服务并测试
sudo systemctl daemon-reload
sudo systemctl enable ob_cluster # 开启自启
sudo systemctl start ob_cluster # 手动启动测试
sudo systemctl status ob_cluster # 检查状态
二、备选方案:手动编写启动脚本(适用无 OBD 场景)
若需避免 OBD 的集群管理风险,可编写脚本直接启动本机 observer 进程:
1. 创建启动脚本
sudo vim /home/admin/start_observer.sh
脚本内容:
#!/bin/bash
# 设置环境变量
export LD_LIBRARY_PATH=/home/admin/oceanbase/lib:$LD_LIBRARY_PATH
# 检查进程是否已运行
if ! pgrep observer >/dev/null; then
cd /home/admin/oceanbase && bin/observer # 需在安装目录执行
echo "Observer started at $(date)" >> /home/admin/ob_start.log
fi
2. 配置 systemd 或 rc.local
- systemd 方式:创建服务(参考上述格式),ExecStart 指向脚本路径
-
rc.local 方式(兼容旧系统):
echo "su - admin -c '/home/admin/start_observer.sh'" | sudo tee -a /etc/rc.local sudo chmod +x /etc/rc.local
三、关键注意事项
-
启动用户与目录
- 必须使用部署时的用户(如
admin
),否则权限错误会导致启动失败。 - 必须在 OB 安装目录执行启动命令(如
/home/admin/oceanbase
),否则依赖文件缺失。
- 必须使用部署时的用户(如
-
依赖服务检查
- 时间同步(NTP):OB 对时间敏感,需确保先于数据库启动。
-
磁盘挂载:若使用独立日志盘(推荐),需在脚本中检查
/data
或/clog
挂载状态。
-
生产环境风险规避
- 避免直接 Kill 进程:使用 OBD 或脚本停止服务,防止数据损坏。
-
合并转储后再重启:重启前执行
ALTER SYSTEM MAJOR FREEZE
释放内存数据,减少恢复时间。 - 分 Zone 滚动重启:三副本集群需按 Zone 顺序重启,避免多数派同时宕机。
-
日志监控
启动后检查日志确认状态:tail -f /home/admin/oceanbase/log/observer.log # 观察启动进度
四、验证与调试
-
手动测试脚本
sh /home/admin/start_observer.sh # 检查进程是否拉起 ps -ef | grep observer
-
模拟重启验证
sudo reboot # 重启后观察服务状态 obd cluster list # 确认集群状态为 RUNNING
结论
-
推荐方案:通过
systemd
管理 OBD 启停(需限定为本机操作),兼顾标准化和可维护性。 - 特殊场景:若 OBD 部署异常,改用脚本直接启动 observer 并配置自启目录。
- 生产铁律:重启前务必完成合并转储,采用分 Zone 操作,避免集群不可用。
注:以上代码中的
<deploy_name>
需替换为实际集群名称(通过obd cluster list
查看)。若环境涉及多节点,需在每个 OBServer 节点单独配置。