HowTo: DRBD mit HA für MySQL

Aus wiki.shutdown-system.de
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Allgemeines

Hier wird gezeigt wie man auf zwei MySQL-Server DRBD installiert und ein Failover mit Heartbeat realisiert.

Beschreibung

Voraussetzung

  • zwei Server
  • jeder Server hat drei Interfaces
  • zwei der Interfaces werden per Crossover-Kabel mit dem anderen Server verbunden

Netzwerkkonfiguration

Ein Interface wird für das Frontend-Netz verwendet (in diesem Beispiel eth0).

Ein Interface wird für DRBD verwendet (in diesem Beispiel eth1).

Ein Interface wird für Heartbeat verwendet (in diesem Beispiel eth2).

eth1 und eth2 am besten in unterschiedliche Netze stecken (einfache RFC 1918 Adressen).

Installation DRBD

 apt-get install drbd8-utils drbd8-modules-`uname-r`
 echo "drbd" > /etc/modules
 modprobe drbd

Dieser Schritt ist auf beiden Servern zu tätigen. Die Server müssen im Anschluss rebootet werden. Als DRBD-Device nimmt man am besten eine Partition die kein Filesystem enthält (in diesem Beispiel /dev/sda7). Wenn die Partion ein Filesystem bereits enthält, sollte man dieses mit fdisk löschen.

Konfiguration DRBD

  • diese Schritte sind auch auf BEIDEN Servern durchzuführen.

In der /etc/drbd.conf alle resource Sektionen löschen und dann am Ende folg. neue Sektion hinzufügen:

 resource mysql {
   protocol      C;
 
   startup { wfc-timeout 0; degr-wfc-timeout     120; }
   disk { on-io-error detach; }
   syncer {
   }
   on db1 {
     device      /dev/drbd1;          # gemeinsames DRBD-Device
     disk        /dev/sda7;           # Partition die genutzt werden soll
     address     192.168.11.228:7791; # jeweilige lokale IP von eth2 auf db1
     meta-disk   internal;
   }
   on db2 {
     device      /dev/drbd1;          # gemeinsames DRBD-Device
     disk        /dev/sda7;           # Partition die genutzt werden soll
     address     192.168.11.229:7791; # jeweilige lokale IP von eth2 auf db2
     meta-disk   internal;
   }
 }

Erstellen des DRBD-Devices

Auf beiden Nodes:

 /etc/init.d/drbd stop
 drbdadm create-md mysql
 /etc/init.d/drbd start

mysql ist dabei die oben erstellte Ressource.

Nur auf dem primären Server:

 drbdsetup /dev/drbd1 primary -o
 mkfs.ext3 /dev/drbd1

Nun kann man /dev/drbd1 auf dem primären Server mounten. Auf dem secondären Server ist diese Partion dann nur als "Readonly" mountbar.

DRBD-Status überprüfen

Den aktuellen Status kann man sich über unterschiedliche Methoden veranschaulichen:

 cat /proc/drbd
 /etc/init.d/drbd status

Um zu überprüfen welcher Server der aktive ist, nimmt man folg. Befehl:

 db1:~# drbdadm state all
 Primary/Secondary
 db1:~#

Dies besagt, dass er selbst der aktive gerade ist und die andere Node der sekundäre ist.

Man kann auch überpüfen ob beide Server konsistent sind:

 db1:~# drbdadm dstate mysql
 UpToDate/UpToDate
 db1:~# 

manuell Switchen Primary/Secondary

Auf der aktiven Node (z.B. db1):

 drbdadm seconday mysql

Auf der anderen Node (z.B. db2):

 drbdadm primary mysql

Installation Heartbeat

Diese Aktion ist auf beiden Nodes durchzuführen!

 apt-get install heartbeat

Konfiguration Heartbeat

Diese Aktion ist auf beiden Nodes durchzuführen!

Folg. Files sind anzulegen:

 touch /etc/ha.d/ha.cf /etc/ha.d/haresources /etc/ha.d/authkeys

Hier eine Beispielconfig für die ha.cf:

 logfacility     daemon     # This is deprecated
 keepalive 1                    # Interval between heartbeat (HB) packets.
 deadtime 10                   # How quickly HB determines a dead node.
 warntime 5                    # Time HB will issue a late HB.
 initdead 120                  # Time delay needed by HB to report a dead node.
 udpport 694                  # UDP port HB uses to communicate between nodes.
 bcast eth2                    # Which interface to use for HB packets.
 auto_failback off         # Auto promotion of primary node upon return to cluster.
 node    db1 # Node name 1.
 node    db2 # Node name 2.
 
 respawn hacluster /usr/lib/heartbeat/ipfail
 # Specifies which programs to run at startup
 
 use_logd yes                  # Use system logging.
 logfile /var/log/hb.log    # Heartbeat logfile.
 debugfile /var/log/heartbeat-debug.log # Debugging logfile.

Hier eine Beispielconfig für die haresources:

 db1 IPaddr::213.95.201.230/27 drbddisk::mysql Filesystem::/dev/drbd1::/data::ext3::defaults mysql


Die haresources muss zwingend auf beiden Nodes identisch sein! Sie beschreibt die Cluster-Adresse sowie die zu startenden Dienste. Das Angeben einer Cluster-Adresse ist zwingend erforderlich und darf nicht anderweitig in der Netzwerk-Konfiguration auftauchen. Die Config wird beim starten von links nach rechts gelesen, beim beenden von recht nach links.

<Clustername> <Clusteradresse> <aktiveren/deaktivieren der DRBD-Resource mysql> <DRBD-Device> <Mountpoint> <Serverdaemon der gestarter/gestoppt wird>

Hier eine Beispielconfig für die authkeys:

 auth 2
 2 crc

Im Anschluss kann man heartbeat auf beiden Nodes starten.

Nodes per Heartbeat schwenken

Einfach auf der einen Node den Heartbeat-Daemon stoppen. Dabei übernimmt die andere Node dann den konfigurierten Dienst.

Split Brain

Um Split-Brain zu umgehen, diese Zeile in die "ressource"-Sektion in die drbd.conf eintragen:

 net { after-sb-0pri discard-older-primary; after-sb-1pri discard-secondary; after-sb-2pri disconnect; }


Zur Erklärung:

  • after-sb-0pri regelt das Verhalten, wenn beide Nodes den Status Secondary haben. In diesem Fall findet keine automatische Synchronisation statt
  • after-sb-1pri regelt das Verhalten, wenn einer von den beiden Nodes Primary ist. Dieser Punkt ist für die Kombination von Heartbeat und DRBD wichtig, da DRBD hier dafür sorgt das ein Node Primary wird
  • after-sb-2pri regelt das Verhalten, wenn beide Nodes Primary sind. Auch hier wird nichts gemacht und es wird getrennt

Weiterführende Literatur


Meine Werkzeuge