keepalived双机热备notify通知脚本问题

求解答一下,我想在keepalived双机热备中,利用keepalived配置文件中的notify实现切换主状态时,启动数据库和应用服务,切换备状态时,执行关闭数据库和应用的脚本。但是通过这个方法,只有在主服务器成为主状态的时候才会执行notify-master,主服务器切换备状态时不执行notify-backup脚本,而备服务器不会执行任何notify通知脚本,该如何解决呢?ChatGPT里的方法试了都不行

在 keepalived 中,如果想在状态切换时执行脚本,可以考虑使用 notify 脚本。

但是 notify 脚本有一些需要注意的点:

  1. notify 脚本只会在状态从备机切换到主机时执行,也就是说只有 notify-master 会执行,notify-backup 不会执行。

  2. 在主机上,只要 keepalived 进程启动,即使还没切换到主机,也会执行 notify-master 脚本。

  3. 在备机上,没有状态切换,notify 脚本都不会执行。

所以针对你的场景,可以这样处理:

  1. 在主机上,只在 notify-master 中启动数据库和应用服务。不要在这里关闭服务。

  2. 在备机上,编写一个独立的脚本,在 keepalived 启动时就执行,内容是关闭数据库和应用服务。

  3. 将这个脚本配置在 keepalived 的 backup 状态下执行:

vrrp_instance VI_1 {
  state BACKUP    
  exec_script "/path/to/stop_services.sh"
}

这样的话:

  • 主机切换到主时会启动服务
  • 主机切换到备时,服务保持原状
  • 备机一直关闭服务

就可以实现你的需求了。

主要是要明确 notify 脚本的触发时机,并合理利用 exec 脚本来补充实现自动化。