Я использую простую установку с heartbeat, обрабатывающим совместно используемую файловую систему, реализованную с drbd и подаваемую через апача. Я использую/etc/ha.d/haresources для определения ха ресурс, этот путь:
server1 drbddisk::myfs \
Filesystem::/dev/drbd/by-res/myfs::/mnt/myfs::ext4::noatime \
IPaddr::10.0.0.254/24/eth0 apache2
Это хорошо работает при использовании старого debian sysvinit, но имеет проблему гонки с systemd, потому что остановка апача сделана асинхронно, поэтому когда проблема heartbeat "/etc/init.d/apache2 останавливает" сценарий, в то время как это возвращается очень быстро, apache2 может все еще быть активным и следовательно размонтирование сбоев FS.
Я знаю, что много обходных решений решает эту проблему, но я хотел бы знать, существует ли "чистый" путь, не имея необходимость возвращаться к sysvinit
Сам Systemd (в Debian 8) просто использует старые добрые сценарии инициализации.
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
. Вы также, вероятно, вообще не используете systemd-tools при выполнении подобных команд в тактовом импульсе.