2.10 如何重启 OceanBase 集群
OceanBase 数据库自身并没有提供重启集群的命令。OceanBase 数据库的核心能力就是高可用(前提是三副本部署)。当少数派节点故障时,OceanBase 数据库内部会自动切换,依然可以为业务提供读写服务。OceanBase 数据库提供了停止和启动某个副本(zone 级别或者 server 级别)的功能,并且只允许停止少数派节点。
所以,OceanBase 集群的重启是靠外部操作。比如说用 kill 命令杀进程,然后再启动进程 observer。
2.8 章节中已经演示了如何杀单副本集群里的节点进程(进程启动时指定参数),下面演示三副本集群里的重启集群方法。
在生产环境中为了尽可能缩短集群不可用时间,重启集群采取一种保险的策略:按 zone 或 server 逐个重启集群节点。这个过程可能会比较长,持续几分钟到十几分钟。刚开始学习 OceanBase 数据库时,我们先掌握简单的重启方法,后续深入介绍 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 工具自动化重启 OceanBase 集群节点。
注意
当前 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
此处 OBD 重启集群时,默认重启了所有组件(包括 oceanbase-ce 和 obproxy)。您也可通过 -c 命令指定重启具体的组件。
ODP 的重启特点跟 OceanBase 数据库是一样的,也有工作目录和启动参数,此处不作介绍。后续在 OceanBase 的运维章节中将介绍 ODP 的相关运维。




