将心跳与 systemd 结合使用

将心跳与 systemd 结合使用

我使用一个简单的设置,使用心跳处理由 drbd 实现并通过 apache 提供的共享文件系统。我使用 /etc/ha.d/haresources 来定义 ha 资源,如下所示:

server1 drbddisk::myfs \
Filesystem::/dev/drbd/by-res/myfs::/mnt/myfs::ext4::noatime \
IPaddr::10.0.0.254/24/eth0 apache2

如果使用旧的 debian sysvinit,这种方法可以正常工作,但由于 apache 的停止是异步完成的,因此与 systemd 存在竞争问题,因此当心跳发出“/etc/init.d/apache2 stop”scrypt 时,虽然它很快返回,但 apache2 仍然可以处于活动状态,因此 FS 的卸载会失败。

我知道有很多解决这个问题的方法,但我想知道是否有一个“干净”的方法,而不必恢复到 sysvinit

答案1

Systemd 本身(在 Debian 8 上)只是使用旧的 init 脚本。

user@server:~> systemctl status apache2
apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2)
   Active: active (running) since Mon 2015-02-12 13:24:34 CEST; 7 weeks 8 days ago
  Process: 24775 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
  Process: 9475 ExecReload=/etc/init.d/apache2 reload (code=exited, status=0/SUCCESS)
  Process: 24799 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)

这不是 systemd 的问题。默认情况下,Systemds 的“systemctl”也不异步工作。这就是该--no-block选项的用途。在 heartbeat 中发出此类命令时,您可能根本不使用 systemd-tools。

相关内容