High Availability Computer Center (hacc-) - Update, Teil 3
Teil 3: Hochverfügbarkeit und Web-Oberfläche
Nun ist es an der Zeit, die Hochverfügbarkeit der Steuerknoten und die Nagios-Überwachung zu realisieren.
Die Steuerknoten mit Heartbeat hochverfügbar machen
Nun ist es an der Zeit, die Hochverfügbarkeit der Steuerknoten und die Nagios-Überwachung zu realisieren.
Für die Hochverfügbarkeit der Steuerknoten wird Heartbeat V2 eingesetzt (Siehe [5] und [6]). Auch Samba4 bietet hier sicherlich interessante Möglichkeiten in Zukunft. Aber ich möchte es jetzt noch nicht einsetzen.
Heartbeat V2
Zunächst wird also heartbeat und heartbeat-2 installiert. Weiterhin wird zum Aktivieren des Watchdog-Mechanismus softdog
nach /etc/modules geschrieben (ergänzt).
Probleme bereiten auch die nicht unbedingt LSB konformen System-V-Init-Skripte bei Ubuntu, ganz zu schweigen von OCF-Scripten. Deshalb wird ein eigenes, universelles OCF-Skript /usr/lib/ocf/resource.d/local/Uni eingesetzt. Es wird benutzt, um LSB-konform programmierte Start- und Stop-Skripte zu starten, zu stoppen und mit eigenen Mitteln das Monitoring des Dienstes zu organisieren (zum Beispiel bei Web-Services mit einem wget-Aufruf oder mit dem Aufruf eines Nagios-Service-Check-Kommandos). Per Parameter initscript
wird der Pfad eines LSB-konformen Start/Stop-Skriptes übergeben. Der Parameter mod_cmd
enthält das Test-Kommando für die Monitoring-Funktion.
Skript: /usr/lib/ocf/resource.d/local/Uni
#!/bin/bash # # OCF Script: Uni # # Universelles Script zum Starten von lsb Ressourcen # und zum Monitoring mit eigenen (Nagios-Plugin) Kommandos. ####################################################################### # Initialization: . ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs ####################################################################### meta_data() { cat <<END <?xml version="1.0"?> <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> <resource-agent name="Uni"> <version>0.3</version> <longdesc lang="en"> This is a Self devel Resource Agent. </longdesc> <shortdesc lang="en">Self devel Resource Agent</shortdesc> <parameters> <parameter name="initscript" unique="1" required="1"> <longdesc lang="en"> LSB Start, Stop and restart Script </longdesc> <shortdesc lang="en">LSB Start Script</shortdesc> <content type="string" default="/etc/init.d/script" /> </parameter> <parameter name="mon_cmd" unique="1" required="1"> <longdesc lang="en"> Monitor Command (Kommando, z.B Nagios Plugin) </longdesc> <shortdesc lang="en">Monitor Command</shortdesc> <content type="string" default="wget" /> </parameter> </parameters> <actions> <action name="start" timeout="90" /> <action name="stop" timeout="100" /> <action name="monitor" timeout="60" interval="30" depth="0" start-delay="30" /> <action name="meta-data" timeout="5" /> <action name="verify-all" timeout="30" /> </actions> </resource-agent> END } ####################################################################### # don't exit on TERM, to test that lrmd makes sure that we do exit trap sigterm_handler TERM sigterm_handler() { ocf_log info "They use TERM to bring us down. No such luck." return } self_usage() { cat <<END usage: $0 {start|stop|monitor|validate-all|meta-data} Expects to have a fully populated OCF RA-compliant environment set. END } self_start() { # ERR ${OCF_RESKEY_initscript} restart ${OCF_RESKEY_initscript} start self_monitor if [ $? = $OCF_SUCCESS ]; then return $OCF_SUCCESS fi } self_stop() { ${OCF_RESKEY_initscript} stop return $OCF_SUCCESS } self_monitor() { # Monitor _MUST!_ differentiate correctly between running # (SUCCESS), failed (ERROR) or _cleanly_ stopped (NOT RUNNING). # That is THREE states, not just yes/no. ${OCF_RESKEY_mon_cmd} >/dev/null 2>&1 status=$? if [ $status -eq 0 ] ; then return $OCF_SUCCESS fi return $OCF_NOT_RUNNING } self_validate() { # Is the state directory writable? for P in ${OCF_RESKEY_mon_cmd} do if [ -f $P ] ;then if [ -x $P ] ;then return $OCF_SUCCESS else return $OCF_ERR_ARGS fi fi done return $OCF_ERR_CONFIGURED } case $__OCF_ACTION in meta-data) meta_data exit $OCF_SUCCESS ;; start) self_start;; stop) self_stop;; monitor) self_monitor;; validate-all) self_validate;; usage|help) self_usage exit $OCF_SUCCESS ;; *) self_usage exit $OCF_ERR_UNIMPLEMENTED ;; esac rc=$? ocf_log debug "${OCF_RESOURCE_INSTANCE} $__OCF_ACTION : $rc" exit $rc
Heartbeat V2 wurde in /etc/ha.d/ha.cf so konfiguriert, dass Multicast für die Verbindungsüberwachung eingesetzt wird.