如何优雅停止observer

【产品名称】

【产品版本】

【问题描述】

在重建observer节点的时候,社区版视频演示的是直接发命令 kill -9 pidof observer。杀掉observer进程后,等待observer完全下线,再清除对应的log,data , run等目录的内容。最后发命令重启observer.

这个流程有几个问题:

(1)如果在kill掉observer的时候observer里面还有交易正在执行,observer会执行什么操作保证数据完整一致性?用户看到的是交易状态会是什么?

(2)如果在kill之前通过监控可以确认没有交易执行,或者通过停止服务、中断交易网关的方式停止新交易,这样需要大量外围的监控和运维操作相配合。observer自己内部有没有比较优雅的停机方式,比如发出停机指令后(不是kill命令),ob自行判断是否存在用户交易和进程,如果有的话会等待交易结束再停止服务和ob自己的系统进程。这样的话就不需要太多外界干预了。

(3)kill方式的另一个问题是,如何确保被kill掉的observer没有正在向其它副本同步数据。如果一个Observer被kill掉时,数据同步的结果会不会收到影响?

alter system stop server 'ip:rpc_port' zone 'zone_name';

stop server 会检查所有剩余副本是否满足多数派、是否日志同步,条件不满足的时候 stop server 会返回失败,

条件满足的情况下等待故障机器上的 leader 全部切走后返回用户成功。

1 个赞

在停止,之前,应该会影该节点的主副本的事务的,从副本,下次启动时候,会自动同步的。