暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

实战教程第二章2.10:如何重启 OceanBase 集群

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" class="sync-line" style="margin:0;"></p>

上面 OBD 重启集群的时候,默认重启了所有组件(包括 OBSERVER 和 OBPROXY )。也可以通过 -c命令指定重启具体的组件。

有关 OBPROXY 的重启特点跟 OBSERVER 是一样的,也有工作目录和启动参数。这里就先不介绍了。后面在 OceanBase 的运维章节也会介绍 OBPROXY 的相关运维。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论