Usando heartbeat com systemd

1

Estou usando uma configuração simples com o heartbeat manipulando um sistema de arquivos compartilhado implementado com o drbd e servido via apache. Estou usando o /etc/ha.d/haresources para definir o recurso ha, desta forma:

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

Isso funciona bem se estiver usando o sysvinit debian antigo, mas tem um problema de corrida com o systemd porque parar o apache é feito de forma assíncrona, então quando o heartbeat emite o "/etc/init.d/apache2 stop" scrypt enquanto retorna muito rapidamente, o apache2 ainda pode estar ativo e, portanto, a desmontagem do FS falha.

Eu conheço um monte de soluções para resolver esse problema, mas eu gostaria de saber se há uma maneira "limpa", sem ter que reverter para o sysvinit

    
por Alessandro Polverini 20.09.2015 / 14:28

1 resposta

1

O próprio Systemd (no Debian 8) está apenas usando os bons scripts 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)

Esse não é um problema do systemd. Systemds 'systemctl' também não funciona de forma assíncrona por padrão. É para isso que serve a opção --no-block . Você provavelmente também não está usando systemd-tools ao emitir comandos como esse no heartbeat.

    
por 11.10.2015 / 03:48