Kurztipp: Apache und Pacemaker: invalid parameter

Kürzlich hatte ich bei einem Linux-Cluster mit Corosync, Pacemaker und Apache das Problem, dass sich der Indianer nicht als Ressource betreiben lassen wollte. Das Starten schlug immer mit einem „invalid parameter“ fehl:

# crm resource start apache
# crm status
...
2 nodes configured
5 resources configured

Online: [ deb9-node2 deb9-node1 ]

Full list of resources:

 Master/Slave Set: ms_drbd_drbd1 [drbd_drbd1]
     Masters: [ deb9-node2 ]
     Slaves: [ deb9-node1 ]
 Resource Group: grp_fs-ip-apache
     fs_www     (ocf::heartbeat:Filesystem):    Started deb9-node2
     Service_IP (ocf::heartbeat:IPaddr2):       Started deb9-node2
     apache     (ocf::heartbeat:apache):        Stopped

Failed Actions:
* apache_start_0 on deb9-node2 'invalid parameter' (2): call=155, status=complete, exitreason='none',
    last-rc-change='Thu Mar 22 14:41:20 2018', queued=0ms, exec=2811ms

Hinsichtlich der Konfiguration war ich mir sicher, dass diese korrekt ist. Ich hatte sie bereits auf anderen Systemen eingesetzt:

primitive apache apache \
        params configfile="/etc/apache2/apache2.conf" \
        op monitor interval=10 timeout=30 depth=0 \
        op start timeout=40 interval=0 \
        op stop timeout=60 interval=0 \
        meta target-role=Started

Nach langer Recherche stellte sich heraus, wie überaus simpel des Rätsels Lösung ist: curl fehlte. Die definierte Resource wurde mit einem Monitor konfiguriert und dieser lies sich nicht starten – folglich wurde sie nicht gestartet. Abhilfe schaffte es, das Tool zu installieren:

# apt-get install -y curl
# crm resource cleanup apache
# crm resource start apache
# crm status
...
 Resource Group: grp_fs-ip-apache
     fs_www	(ocf::heartbeat:Filesystem):	Started deb9-node2
     Service_IP	(ocf::heartbeat:IPaddr2):	Started deb9-node2
     apache	(ocf::heartbeat:apache):	Started deb9-node2

Ein Blick in das zugehörige Control Script des ocf::hearbeat::apache-Typs bestätigte die Erkenntnis:

$ less /usr/lib/ocf/resource.d/heartbeat/apache
...
        monitor return TRUE if the web server appears to be working.
                For this to be supported you must configure mod_status
                and give it a server-status URL. You have to have 
                installed either curl or wget for this to work.

Es wäre schön gewesen, wenn eine etwas einleuchtendere Fehlermeldung mir einen sachdienlichen Hinweis gegeben hätte. Auf der anderen Seite ist es auch verwunderlich, dass curl auf Debian nicht vorinstalliert oder zumindest als Abhängigkeit mit den Resource-Agents referenziert wird.

6 Kommentare Schreibe einen Kommentar

    • Guten Morgen Thomas!
      bei der aktuellen Debian 9.4 war das auch nicht dabei. Wget wird inzwischen von einigen Distributionen nicht mehr installiert, aber curl habe ich bisher auch bei den kleinsten Installationen immer vorgefunden.

      Gruß, Christian!

  1. Ist zwar nicht Thema, aber warum Apache als Ressource? Apache kann doch einfach auf allen Nodes laufen und die IP schwenkt einfach hin und her, so mach ich das jedenfalls.

    • In meinem Setup ging es um einen hochverfügbaren Apache-Webserver mit Content auf einem DRBD-Volume. Daher habe ich eine Multi-State-Resource und gruppierte und sortierte Ressourcen für Apache, die Service IP und das Dateisystem erstellt. Wird dann alles in der richtigen Reihenfolge und nur zusammen gestartet.

  2. Auch wenn es vielleicht nicht mehr ganz aktuell ist….. Prinzipiell ist das nicht die einzige Krankheit, im Apache OCF Agenten. der z.B. bei SLES 12 geshippte OCF Agent ist gelinde gesagt… „broken“.
    FOlgende Vorgehensweise führt im Zweifelsfall auch zum Ziel.

    crm configure primitive res-apache systemd:apache2
    meta maintenance=false is-managed=true target-role=Started
    Führt auch zum Ziel 🙂 und läuft bei meinen Kunde mit SLES $Version sehr zuverlässig

Schreibe einen Kommentar