Wie aus einem der letzten Artikel bekannt, kann man mehrere voneinander getrennte Apache Webserver Instanzen parallel auf einer Maschine betreiben. Bei der weiteren Konfiguration als Apache Load Balancer ist eine weiterer Bug aufgefallen. Zur kurzen Erinnerung – der default Apache wird per systemctl disable apache2 ausgeschalten und das Verzeichnis /var/run/apache2/ existiert nach einem Reboot nicht mehr. Der gefunden Bug wurde den beiden Bug-Reports im Ubuntu-Launchpad und bei Debian hinzugefügt und kann dort ein wenig ausführlicher nachgelesen werden. Hier nur die Kurzvariante des gefundenen.
Anlegen einer neuen Apache Instanz
:~# sh /usr/share/doc/apache2/examples/setup-instance proxy-balancer Setting up /etc/apache2-proxy-balancer ... Setting up /etc/init.d/apache2-proxy-balancer ... Setting up symlinks: a2enmod-proxy-balancer a2dismod-proxy-balancer a2ensite-proxy-balancer a2dissite-proxy-balancer a2enconf-proxy-balancer a2disconf-proxy-balancer apache2ctl-proxy-balancer Setting up /etc/logrotate.d/apache2-proxy-balancer and /var/log/apache2-proxy-balancer ... :~# systemctl enable apache2-proxy-balancer apache2-proxy-balancer.service is not a native service, redirecting to systemd-sysv-install Executing /lib/systemd/systemd-sysv-install enable apache2-proxy-balancer
Konfiguration der neuen Load Balancer Instanz
:~# cd /etc/apache2-proxy-balancer/ :~# vim sites-enabled/proxy-balancer.conf [...] <Proxy balancer://twoways/> BalancerMember https://192.168.168.10/ BalancerMember https://192.168.168.20/ ProxySet lbmethod=bytraffic </Proxy> [...] ProxyPass /site-twoways/ balancer://twoways/ [...] :~# a2enmod-proxy-balancer proxy_balancer lbmethod_bytraffic Considering dependency proxy for proxy_balancer: Enabling module proxy. Considering dependency alias for proxy_balancer: Module alias already enabled Considering dependency slotmem_shm for proxy_balancer: Enabling module slotmem_shm. [...] :~# apache2ctl-proxy-balancer configtest Syntax OK
Das Starten dieser Instanz schlägt fehl und der Grund findet sich im error.log
:~# service apache2-proxy-balancer start Job for apache2-proxy-balancer.service failed because the control process exited with error code. See "systemctl status apache2-proxy-balancer.service" and "journalctl -xe" for details. :~# cat /var/log/apache2-proxy-balancer/error.log [...] [Fri Oct 21 20:44:33.144445 2016] [slotmem_shm:error] [pid 2120] (2)No such file or directory: AH02611: create: apr_shm_create(/var/run/apache2/slotmem-shm-p6c23514b.shm) failed [Fri Oct 21 20:44:33.144483 2016] [proxy_balancer:emerg] [pid 2120] (2)No such file or directory: AH01179: balancer slotmem_create failed [Fri Oct 21 20:44:33.144487 2016] [:emerg] [pid 2120] AH00020: Configuration Failed, exiting
Das Apache Modul slotmem_shm hat nur eine .load ohne .conf Datei.
:~# ls -la mods-enabled/ [...] lrwxrwxrwx 1 root root 34 Okt 21 20:40 slotmem_shm.load -> ../mods-available/slotmem_shm.load
In der entsprechenden Apache Dokumentation zu dem Modul wird beschrieben, das dieses in das „DefaultRuntimeDir“ schreibt. Nach meiner Meinung müsste dies allerdings durch die envvars konfiguriert sein.
:~# cat /etc/apache2-proxy-balancer/envvars [...] export APACHE_RUN_DIR=/var/run/apache2$SUFFIX [...]
Wird aber anscheinend von dem Modul nicht berücksichtigt. Die Lösung ist in die Balancer Instanz Konfiguration das „DefaultRuntimeDir“ explizit zu setzen.
:~# vim sites-enabled/proxy-balancer.conf DefaultRuntimeDir /var/run/apache2-proxy-balancer/ [...]
Konfigurations Test und starten der Load Balancer Instanz.
:~# apache2ctl-proxy-balancer configtest Syntax OK :~# service apache2-proxy-balancer start :~# ls -l /var/run/apache2-proxy-balancer/ insgesamt 12 -rw-r--r-- 1 root root 5 Okt 21 20:48 apache2-proxy-balancer.pid -rw-r--r-- 1 root root 8 Okt 21 20:48 slotmem-shm-p6c23514b.shm -rw-r--r-- 1 root root 8 Okt 21 20:48 slotmem-shm-p6c23514b_twoways.shm :~# systemctl status apache2-proxy-balancer ? apache2-proxy-balancer.service - LSB: Start/stop apache2 web server (config /etc/apache2-proxy-balancer) Loaded: loaded (/etc/init.d/apache2-proxy-balancer; bad; vendor preset: enabled) Active: active (running) since Fr 2016-10-21 20:48:45 CEST; 33s ago Docs: man:systemd-sysv-generator(8) Process: 2203 ExecStart=/etc/init.d/apache2-proxy-balancer start (code=exited, status=0/SUCCESS) Tasks: 6 Memory: 16.2M CPU: 63ms CGroup: /system.slice/apache2-proxy-balancer.service +-2220 /usr/sbin/apache2 -d /etc/apache2-proxy-balancer -k start +-2223 /usr/sbin/apache2 -d /etc/apache2-proxy-balancer -k start +-2224 /usr/sbin/apache2 -d /etc/apache2-proxy-balancer -k start +-2225 /usr/sbin/apache2 -d /etc/apache2-proxy-balancer -k start +-2226 /usr/sbin/apache2 -d /etc/apache2-proxy-balancer -k start +-2227 /usr/sbin/apache2 -d /etc/apache2-proxy-balancer -k start Okt 21 20:48:44 ubudev systemd[1]: Starting LSB: Start/stop apache2 web server (config /etc/apache2-proxy-balancer)... Okt 21 20:48:44 ubudev apache2-proxy-balancer[2203]: * Starting Apache httpd web server apache2 Okt 21 20:48:45 ubudev apache2-proxy-balancer[2203]: * Okt 21 20:48:45 ubudev systemd[1]: Started LSB: Start/stop apache2 web server (config /etc/apache2-proxy-balancer).