请问observer和obproxy进程如何关闭呢?

请问observer和obproxy进程如何优雅关闭呢?直接找到进程id然后kill吗?

kill肯定不是优雅的关闭方式了。
可以参考ocp关闭的步骤
image

看日志,主要是以下两步:

alter system stop server ?

ALTER SYSTEM MINOR FREEZE SERVER=(?)
1 个赞

嗯,不直接kill进程,kill之前先做上面的几步。只不过OCP不开源,没有详细的操作流程

最后一步 依然是 kill pidof observer

OB 进程和 OBProxy 进程的关闭方式 就是 KILL 。不怕杀,不怕折腾,所以估计也不会有 shutdown 这种接口或命令。:smile:

2 个赞

停单个 OBServer

  1. 设置永久下线时间的参数

评估停机时间,设置 server_permanent_offline_time 参数。避免因停机时间长,超过 server_permanent_offline_time 参数的默认值 3600s(1h),导致节点恢复后重新复制副本。

这里假设停机维护时间窗口为 24 小时,具体时间应根据实际场景来评估:

alter system set server_permanent_offline_time=‘86400’;

2、stop server 切主
执行 stop server 后,RootService 会尽可能的把停止服务的这台 OBServer 上的 Leader 副本切换到其他节点,当该 server 上没有分区 Leader 的情况下,系统将内部标记 server 为 stopped 状态,客户端请求不会再次发送到该 server 。执行时间长短跟要切换的 leader 副本个数多少有关,命令等待时间会相对长一些,执行 stop server 命令前,需在当前会话里调大 ob_query_timeout 变量。

set ob_query_timeout=100000000000000;
alter system stop server ‘xx.xx.xx.xx:xx’ zone ‘zone1’;

3.检查待停机的 OBServer 上 Leader 数量

select concat(svr_ip,’:’,svr_port),leader_count
from __all_virtual_server_stat where svr_ip='xx.xx.xx.xx and svr_port=xx;

leader_count 为 0 时,说明该节点上的 Leader 副本已切换完成。

4、确认待停止 OBServer 的工作目录

因为手动启动 OBServer 的时候需要进入到 OBServer 的工作目录下找 etc 目录下的参数文件,所以我们在停止进程前先确认并记录一下 OBServer 的工作目录。

ls -l /proc/$(pgrep observer)/cwd | awk ‘{print $NF}’

5.停止 OBServer 进程
kill -15 $(pgrep observer)
或者
kill -9 $(pgrep observer)

6.停机

有多个 OBProxy,且使用 LB
1.从 LB 中剔除待停机维护的 OBProxy
2.确认待停机 OBProxy 的工作目录
ls -l /proc/$(pgrep obproxy)/cwd | awk ‘{print $NF}’
3.停掉 OBProxy 进程
ps -ef | grep obproxy | grep -v grep
kill -9 xx

1 个赞