求解答一下,我想在keepalived双机热备中,利用keepalived配置文件中的notify实现切换主状态时,启动数据库和应用服务,切换备状态时,执行关闭数据库和应用的脚本。但是通过这个方法,只有在主服务器成为主状态的时候才会执行notify-master,主服务器切换备状态时不执行notify-backup脚本,而备服务器不会执行任何notify通知脚本,该如何解决呢?ChatGPT里的方法试了都不行
在 keepalived 中,如果想在状态切换时执行脚本,可以考虑使用 notify 脚本。
但是 notify 脚本有一些需要注意的点:
notify 脚本只会在状态从备机切换到主机时执行,也就是说只有 notify-master 会执行,notify-backup 不会执行。
在主机上,只要 keepalived 进程启动,即使还没切换到主机,也会执行 notify-master 脚本。
在备机上,没有状态切换,notify 脚本都不会执行。
所以针对你的场景,可以这样处理:
在主机上,只在 notify-master 中启动数据库和应用服务。不要在这里关闭服务。
在备机上,编写一个独立的脚本,在 keepalived 启动时就执行,内容是关闭数据库和应用服务。
将这个脚本配置在 keepalived 的 backup 状态下执行:
vrrp_instance VI_1 {
state BACKUP
exec_script "/path/to/stop_services.sh"
}
这样的话:
就可以实现你的需求了。
主要是要明确 notify 脚本的触发时机,并合理利用 exec 脚本来补充实现自动化。