heartbeat
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| heartbeat [2012-03-29 16:21:33] – Externe Bearbeitung 127.0.0.1 | heartbeat [2016-04-12 22:50:00] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== Heartbeat ====== | ||
| + | |||
| + | |||
| + | ===== Installation ===== | ||
| + | |||
| + | # aptitude update && aptitiude install heartbeat | ||
| + | # mkdir -p / | ||
| + | |||
| + | |||
| + | ===== Die Konfigurationsdateien in der Übersicht ===== | ||
| + | |||
| + | * **/ | ||
| + | * **/ | ||
| + | * **/ | ||
| + | * **/ | ||
| + | |||
| + | # tar cvf / | ||
| + | |||
| + | |||
| + | ===== authkeys ===== | ||
| + | |||
| + | (echo -ne "auth 1\n1 sha1 "; dd if=/ | ||
| + | chmod 0600 / | ||
| + | |||
| + | Die so erstellte Datei muss auf beide Knoten kopiert werden. | ||
| + | |||
| + | FIXME | ||
| + | |||
| + | |||
| + | ===== / | ||
| + | |||
| + | rbopenqrm01 \ | ||
| + | mac:: | ||
| + | IPaddr2:: | ||
| + | mydrbd \ | ||
| + | drbddisk:: | ||
| + | LVM::data \ | ||
| + | mount_all_dev \ | ||
| + | check_lsof \ | ||
| + | mysql \ | ||
| + | ntp \ | ||
| + | squid \ | ||
| + | apache2 \ | ||
| + | nagios-nrpe-server | ||
| + | |||
| + | |||
| + | ===== / | ||
| + | |||
| + | if [ -z " | ||
| + | SCRIPT=" | ||
| + | PIDNAME=" | ||
| + | PIDDATEI="/ | ||
| + | fi | ||
| + | | ||
| + | ## | ||
| + | pid_beginn() | ||
| + | { | ||
| + | if [ -e " | ||
| + | exit 0 | ||
| + | else | ||
| + | echo " | ||
| + | fi | ||
| + | } | ||
| + | ## | ||
| + | pid_status() | ||
| + | { | ||
| + | if [ -e " | ||
| + | echo " | ||
| + | else | ||
| + | echo " | ||
| + | fi | ||
| + | } | ||
| + | ## | ||
| + | pid_ende() | ||
| + | { | ||
| + | if [ -e " | ||
| + | rm -fv ${PIDDATEI} || echo " | ||
| + | fi | ||
| + | } | ||
| + | ## | ||
| + | |||
| + | |||
| + | ===== / | ||
| + | |||
| + | #!/bin/bash | ||
| + | | ||
| + | #set -x | ||
| + | | ||
| + | # damit das Script LSB-konform ist | ||
| + | . / | ||
| + | | ||
| + | KOMMANDO=" | ||
| + | | ||
| + | case ${KOMMANDO} in | ||
| + | start) | ||
| + | pid_beginn | ||
| + | cat $(find /sys/ -type f | fgrep ' | ||
| + | ifdown ${1} | ||
| + | ifconfig ${1} hw ether ${2} | ||
| + | ifup ${1} | ||
| + | ;; | ||
| + | | ||
| + | status) | ||
| + | pid_status | ||
| + | ;; | ||
| + | | ||
| + | stop) | ||
| + | if [ -e " | ||
| + | ifdown ${1} | ||
| + | ifconfig ${1} hw ether $(cat ${PIDDATEI}) | ||
| + | ifup ${1} | ||
| + | fi | ||
| + | pid_ende | ||
| + | ;; | ||
| + | | ||
| + | esac | ||
| + | | ||
| + | exit 0 | ||
| + | |||
| + | |||
| + | ===== / | ||
| + | |||
| + | #!/bin/bash | ||
| + | # | ||
| + | # This script is inteded to be used as resource script by heartbeat | ||
| + | # | ||
| + | # Copright 2003-2008 LINBIT Information Technologies | ||
| + | # Philipp Reisner, Lars Ellenberg | ||
| + | # | ||
| + | ### | ||
| + | | ||
| + | DEFAULTFILE="/ | ||
| + | DRBDADM="/ | ||
| + | | ||
| + | if [ -f $DEFAULTFILE ]; then | ||
| + | . $DEFAULTFILE | ||
| + | fi | ||
| + | | ||
| + | if [ " | ||
| + | RES=" | ||
| + | CMD=" | ||
| + | else | ||
| + | RES=" | ||
| + | CMD=" | ||
| + | fi | ||
| + | | ||
| + | ## EXIT CODES | ||
| + | # since this is a " | ||
| + | # exit codes actually do not matter that much as long as we conform to | ||
| + | # http:// | ||
| + | # but it does not hurt to conform to lsb init-script exit codes, | ||
| + | # where we can. | ||
| + | # http:// | ||
| + | # | ||
| + | #### | ||
| + | | ||
| + | case " | ||
| + | start) | ||
| + | # try several times, in case heartbeat deadtime | ||
| + | # was smaller than drbd ping time | ||
| + | try=6 | ||
| + | while true; do | ||
| + | $DRBDADM primary $RES && break | ||
| + | let " | ||
| + | sleep 1 | ||
| + | done | ||
| + | ;; | ||
| + | stop) | ||
| + | $DRBDADM secondary $RES | ||
| + | ex=$? | ||
| + | case $ex in | ||
| + | 0) | ||
| + | exit 0 | ||
| + | ;; | ||
| + | 11) | ||
| + | # see drbdadm_main.c adm_generic and m_system | ||
| + | # as well as drbdsetup.c: | ||
| + | # in fact a role change was attempted, but failed. | ||
| + | echo >&2 " | ||
| + | exit 1 # LSB generic error | ||
| + | ;; | ||
| + | *) | ||
| + | # other error, may be syntax error in config file, | ||
| + | # anything else: to not confuse heartbeat further, | ||
| + | # and avoid reboot due so " | ||
| + | # pretend that we succeeded in stopping this. | ||
| + | echo >&2 " | ||
| + | exit 0 | ||
| + | ;; | ||
| + | esac | ||
| + | ;; | ||
| + | status) | ||
| + | if [ " | ||
| + | echo "A resource name is required for status inquiries." | ||
| + | exit 10 | ||
| + | fi | ||
| + | ST=$( $DRBDADM role $RES ) | ||
| + | STATE=${ST%/ | ||
| + | case $STATE in | ||
| + | Primary) | ||
| + | echo " | ||
| + | exit 0 # LSB status " | ||
| + | ;; | ||
| + | Secondary|Unconfigured) | ||
| + | echo " | ||
| + | "" | ||
| + | echo " | ||
| + | *) | ||
| + | # unexpected. whatever... | ||
| + | echo " | ||
| + | esac | ||
| + | exit 3 # LSB status " | ||
| + | ;; | ||
| + | *) | ||
| + | echo " | ||
| + | exit 1 | ||
| + | ;; | ||
| + | esac | ||
| + | | ||
| + | exit 0 | ||
| + | |||
| + | |||
| + | ===== / | ||
| + | |||
| + | #!/bin/bash | ||
| + | | ||
| + | VOLGRUPPE=" | ||
| + | | ||
| + | # damit das Script LSB-konform ist | ||
| + | . / | ||
| + | | ||
| + | | ||
| + | case ${1} in | ||
| + | start) | ||
| + | pid_beginn | ||
| + | for mountdev in $(fgrep noauto /etc/fstab | awk ' | ||
| + | do | ||
| + | for umgebung in $(blkid -o udev ${mountdev}) | ||
| + | do | ||
| + | export ${umgebung} | ||
| + | done | ||
| + | if [ -n " | ||
| + | fsck -t ${ID_FS_TYPE} -y ${mountdev} && mount -v ${mountdev} | ||
| + | fi | ||
| + | done | ||
| + | ;; | ||
| + | | ||
| + | status) | ||
| + | pid_status | ||
| + | ;; | ||
| + | | ||
| + | stop) | ||
| + | for mountpoint in $(tac /etc/mtab | egrep " | ||
| + | do | ||
| + | umount -v ${mountpoint} | ||
| + | done | ||
| + | pid_ende | ||
| + | ;; | ||
| + | | ||
| + | esac | ||
| + | | ||
| + | exit 0 | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== / | ||
| + | |||
| + | #!/bin/sh | ||
| + | | ||
| + | HAVOLGR=" | ||
| + | MPOINTS=" | ||
| + | | ||
| + | case $1 in | ||
| + | start) | ||
| + | ;; | ||
| + | | ||
| + | status) | ||
| + | lsof | egrep " | ||
| + | ;; | ||
| + | | ||
| + | stop) | ||
| + | while [ -n " | ||
| + | do | ||
| + | echo "Warte bis die noch offenen Datei-Haendler geschlossen sind..." | ||
| + | sleep 4 | ||
| + | RPIDS=" | ||
| + | if [ -n " | ||
| + | kill ${RPIDS}; | ||
| + | fi; | ||
| + | sleep 4 ; | ||
| + | done | ||
| + | ;; | ||
| + | | ||
| + | esac | ||
| + | | ||
| + | exit 0 | ||
| + | |||
| + | |||
| + | ===== Cluster-Schwenk ===== | ||
| + | |||
| + | # / | ||
| + | | ||
| + | May 21 11:40:58 rbopenqrm01 heartbeat: [1893]: info: rbopenqrm02 wants to go standby [all] | ||
| + | May 21 11:40:58 rbopenqrm01 ipfail: [2172]: debug: Other side is unstable. | ||
| + | May 21 11:40:58 rbopenqrm01 kernel: [ 5357.069101] block drbd1: peer( Primary -> Secondary ) | ||
| + | May 21 11:40:59 rbopenqrm01 heartbeat: [1893]: info: standby: acquire [all] resources from rbopenqrm02 | ||
| + | May 21 11:40:59 rbopenqrm01 heartbeat: [3830]: info: acquire all HA resources (standby). | ||
| + | May 21 11:40:59 rbopenqrm01 ResourceManager[3844]: | ||
| + | May 21 11:40:59 rbopenqrm01 IPaddr[3871]: | ||
| + | May 21 11:40:59 rbopenqrm01 ResourceManager[3844]: | ||
| + | May 21 11:40:59 rbopenqrm01 IPaddr[3951]: | ||
| + | May 21 11:40:59 rbopenqrm01 IPaddr[3951]: | ||
| + | May 21 11:40:59 rbopenqrm01 IPaddr[3927]: | ||
| + | May 21 11:40:59 rbopenqrm01 ResourceManager[3844]: | ||
| + | May 21 11:40:59 rbopenqrm01 mountd[3767]: | ||
| + | May 21 11:40:59 rbopenqrm01 kernel: [ 5357.466126] nfsd: last server has exited, flushing export cache | ||
| + | May 21 11:40:59 rbopenqrm01 ResourceManager[3844]: | ||
| + | May 21 11:40:59 rbopenqrm01 kernel: [ 5357.492064] block drbd1: role( Secondary -> Primary ) | ||
| + | May 21 11:40:59 rbopenqrm01 LVM[4119]: INFO: LVM Volume data is offline | ||
| + | May 21 11:40:59 rbopenqrm01 LVM[4113]: INFO: Resource is stopped | ||
| + | May 21 11:40:59 rbopenqrm01 ResourceManager[3844]: | ||
| + | May 21 11:40:59 rbopenqrm01 LVM[4171]: INFO: Activating volume group data | ||
| + | May 21 11:40:59 rbopenqrm01 LVM[4171]: INFO: File descriptor 4 (socket: | ||
| + | May 21 11:40:59 rbopenqrm01 LVM[4171]: INFO: File descriptor 4 (socket: | ||
| + | May 21 11:40:59 rbopenqrm01 LVM[4165]: INFO: Success | ||
| + | May 21 11:40:59 rbopenqrm01 Filesystem[4233]: | ||
| + | May 21 11:40:59 rbopenqrm01 ResourceManager[3844]: | ||
| + | May 21 11:40:59 rbopenqrm01 Filesystem[4303]: | ||
| + | May 21 11:40:59 rbopenqrm01 Filesystem[4297]: | ||
| + | May 21 11:40:59 rbopenqrm01 Filesystem[4375]: | ||
| + | May 21 11:40:59 rbopenqrm01 ResourceManager[3844]: | ||
| + | May 21 11:40:59 rbopenqrm01 Filesystem[4444]: | ||
| + | May 21 11:41:00 rbopenqrm01 Filesystem[4438]: | ||
| + | May 21 11:41:00 rbopenqrm01 ResourceManager[3844]: | ||
| + | May 21 11:41:00 rbopenqrm01 kernel: [ 5358.319849] type=1505 audit(1274434860.115: | ||
| + | May 21 11:41:01 rbopenqrm01 / | ||
| + | May 21 11:41:01 rbopenqrm01 heartbeat: [3830]: info: all HA resource acquisition completed (standby). | ||
| + | May 21 11:41:01 rbopenqrm01 heartbeat: [1893]: info: Standby resource acquisition done [all]. | ||
| + | May 21 11:41:01 rbopenqrm01 / | ||
| + | May 21 11:41:01 rbopenqrm01 / | ||
| + | May 21 11:41:01 rbopenqrm01 / | ||
| + | May 21 11:41:01 rbopenqrm01 / | ||
| + | May 21 11:41:01 rbopenqrm01 / | ||
| + | May 21 11:41:01 rbopenqrm01 / | ||
| + | May 21 11:41:02 rbopenqrm01 heartbeat: [1893]: info: remote resource transition completed. | ||
| + | |||
| + | Bei ein sauberen Schwenk sollte hier **" | ||
| + | |||
| + | |||
| + | ====== Heartbeat schlägt nicht mehr -> Pacemaker gibt jetzt den Takt an ====== | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Pacemaker, welches ursprünglich aus dem Entwicklungsstrang von HA-Linux (Heartbeat) entkoppelt wurde, erledigt hier einen wesentlich besseren Job als Heartbeat. Vor allem lassen sich nicht nur komplette Knoten, sondern auch einzelne Services überwachen und bei Bedarf auf demselben oder einem anderen Knoten starten. | ||
| + | |||
| + | |||
| + | ===== Auch in der offiziellen Doku von DRBD wird eher auf Pacemaker gesetzt: ===== | ||
| + | |||
| + | DRBD is frequently found in system configurations using the Linux-HA cluster manager (" | ||
| + | |||
