OceanBase 自身并没有提供“重启集群”的命令。OceanBase 的核心能力就是高可用,前提是三副本部署。当少数派节点故障时,OceanBase 内部可能会自动切换,依然可以为业务提供读写服务。OB 提供了停止和启动某个副本(zone
级别或者 server
级别)的功能,并且只允许停止少数派节点。
所以,OceanBase 集群的重启是靠外部操作。比如说用 kill
命令杀进程,然后再启动进程 observer
。
上面修改参数的时候已经演示了如何杀单副本集群里的节点进程,下面演示三副本集群里的重启集群方法。在生产环境为了尽可能的缩短集群不可用时间,重启集群采取一种保险的策略:按 zone
或 server
逐个重启集群节点。这个过程可能会比较长,持续几分钟到十几分钟。在刚开始学习 OceanBase 的时候,我们先掌握简单的重启方法,后面深入介绍 OceanBase 运维的时候,再介绍安全稳妥的重启方法。
# ssh 到 节点 1 ssh 172.20.249.52 # 正常 kill 进程,除非是测试用或者评估过风险,否则不要用`kill -9` 。 kill `pidof observer` # 等待 60s,等进程完全退出 sleep 60 # 反复确认进程完全退出 ps -ef | grep observer # 配置 LIBRARY PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase-ce/lib/ # 启动进程 cd /home/admin/oceanbase-ce && bin/observer # 等待 10s 进程启动 sleep 10 # 反复确认进程启动时没有退出 ps -ef | grep observer | grep -v grep # 等待 60s,等进程完全启动并恢复完毕 sleep 60 # 查看进程监听成功(默认监听 2881 和 2882 端口) netstat -ntlp # 在集群中查看节点状态(`status`)、开始服务时间(`start_service_time`)是否正常。 select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, (cpu_total-cpu_assigned) cpu_free, round(mem_total/1024/1024/1024) mem_total_gb, round((mem_total-mem_assigned)/1024/1024/1024) mem_free_gb, usec_to_time(b.last_offline_time) last_offline_time, usec_to_time(b.start_service_time) start_service_time, b.status, usec_to_time(b.stop_time) stop_time, b.build_version from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port) order by a.zone, a.svr_ip;
只有第一个节点重启成功后,再重复操作第二个节点。 当然,如果只是测试,不在乎可用性。就可以忽略上面的确认过程,直接杀掉所有集群节点的进程,然后启动进程。这个时候集群节点起来后也许要几分钟恢复数据和通信。如果集群重启之前有大量的数据读写,这个节点进程的恢复时间可能会很长,要十几分钟甚至几十分钟。
使用 OBD 重启集群
上面是手动重启 OceanBase 集群节点的原理,下面是使用 OBD 工具自动化做这个操作。但是注意,当前 OBD 的重启集群可能并没有包含必要的检查操作,所以,测试环境可以用,生产环境要谨慎使用。
使用 OBD 重启集群的命令是:obd cluster restart
。
obd cluster restart obce-3zones 输出: [admin@obce00 oceanbase-ce]$ obd cluster restart obce-3zones Get local repositories and plugins ok Open ssh connection ok Stop observer ok Stop obproxy ok obce-3zones stopped Get local repositories and plugins ok Open ssh connection ok Cluster param config check ok Check before start observer ok Check before start obproxy ok Start observer ok observer program health check ok Connect to observer ok Wait for observer init ok +-------------------------------------------------+ | observer | +---------------+---------+------+-------+--------+ | ip | version | port | zone | status | +---------------+---------+------+-------+--------+ | 172.20.249.49 | 3.1.0 | 2881 | zone2 | active | | 172.20.249.51 | 3.1.0 | 2881 | zone3 | active | | 172.20.249.52 | 3.1.0 | 2881 | zone1 | active | +---------------+---------+------+-------+--------+ Start obproxy ok obproxy program health check ok Connect to obproxy ok Initialize cluster +-------------------------------------------------+ | obproxy | +---------------+------+-----------------+--------+ | ip | port | prometheus_port | status | +---------------+------+-----------------+--------+ | 172.20.249.52 | 2883 | 2884 | active | | 172.20.249.49 | 2883 | 2884 | active | | 172.20.249.51 | 2883 | 2884 | active | +---------------+------+-----------------+--------+ obce-3zones running <p data-line="92" ></p>
上面 OBD 重启集群的时候,默认重启了所有组件(包括 OBSERVER
和 OBPROXY
)。也可以通过 -c
命令指定重启具体的组件。
有关 OBPROXY 的重启特点跟 OBSERVER 是一样的,也有工作目录和启动参数。这里就先不介绍了。后面在 OceanBase 的运维章节也会介绍 OBPROXY 的相关运维。
附录:
- 第二章 2.1 OceanBase 部署准备
- 第二章 2.2 如何快速体验 OceanBase
- 第二章 2.3 如何规划部署 OceanBase 集群
- 第二章 2.4 如何初始化服务器环境
- 第二章 2.5 安装 OBD 自动化部署软件
- 第二章 2.6 使用 OBD 自动化部署单节点集群
- 第二章 2.7 使用OBD自动化部署多节点集群
- 第二章 2.8 参看和修改 OceanBase 参数集群
- 第二章 2.9 如何部署 OBAgent
- 第二章 2.10 如何重启 OceanBase 集群
- 第二章 2.11(高级)如何手动部署 OceanBase 集群
- 第二章 2.12 常见问题
- 第二章 2.13 附录
结束语
OceanBase社区版入门到实战教程直播正在进行中~
快和小伙伴一起进群交流学习吧~
加入直播群方式一:
钉钉群号3255 4020
加入直播群方式二:
扫码下方二维码加入