## Beispielkonfiguration fuer keepalived _keepalived_ kann verwendet werden, um eine Floating IP automatisch zwischen verschiedenen Servern zu verschieben. Das nachfolgende Beispiel wurde mit zwei Ubuntu 16.04 Cloud Servern bei cloudscale.ch getestet. Fuer dieses Beispiel muss `keepalived`, `nginx` und `curl` installiert und die beiden folgenden Dateien auf jedem Server erstellt werden. Stellen Sie dabei sicher, dass Sie die IP-Adressen der Server, deren UUIDs, die Floating IPs sowie das API-Token anpassen. /etc/keepalived/keepalived.conf: # Definieren Sie das Shell Kommando, mit welchem geprueft wird, ob der Service laeuft # oder nicht. vrrp_script service_check { script "systemctl is-active nginx" interval 2 } # Definieren Sie eine Gruppe von Servern, welche sich eine Reihe von Floating IPs # teilen. vrrp_instance floating_ip { # VID der VRRP-Gruppe. virtual_router_id 23 # Interface und lokale IP-Adresse, welche von dieser VRRP-Instanz verwendet # werden. interface ens3 native_ipv6 unicast_src_ip 2001:db8::2 # Peer IP-Adresse jedes Servers in derselben VRRP-Gruppe. unicast_peer { 2001:db8::3 } # Service Check-Skript, welches von dieser VRRP-Instanz verwendet wird. track_script { service_check } # Skript, um diesem Server die Floating IPs zuzuweisen, sobald er Master wird. notify_master "/etc/keepalived/master.sh" # VRRP-Prioritaet dieses Servers. # Der Server mit der hoechsten Prioritaet wird Master. Verwenden Sie # unterschiedliche Prioritaeten fuer jeden Server innerhalb derselben VRRP-Gruppe. priority 100 } /etc/keepalived/master.sh: #!/bin/sh set -e # API-Token (mit Schreibzugriff), um auf die cloudscale.ch API zuzugreifen. api_token='XXXXXXXXXXXXXXXX' # Eine Reihe von Floating IPs, welche von den Servern innerhalb derselben # VRRP-Gruppe geteilt werden. floating_ipv4='192.0.2.1' floating_ipv6='2001:db8::1' # UUID des Servers, auf welchem dieses Skript laeuft. # Die UUID des Servers kann mit Hilfe der API in Erfahrung gebracht werden. server_uuid='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' # Aufruf der cloudscale.ch API, um diesem Server eine spezifische Floating IP # zuzuweisen. set_master() { curl \ -f \ -H "Authorization: Bearer $api_token" \ -F server="$server_uuid" \ "https://api.cloudscale.ch/v1/floating-ips/$1" } # Zuweisung der Floating IPs an diesen Server. # Verwendung von linear back-off, falls die API temporaer nicht verfuegbar sein sollte. ipv4_set=0 ipv6_set=0 i=1 while [ "$ipv4_set" -lt 1 -o "$ipv6_set" -lt 1 ] ; do if [ "$ipv4_set" -lt 1 ] ; then set_master $floating_ipv4 && ipv4_set=1 fi if [ "$ipv6_set" -lt 1 ] ; then set_master $floating_ipv6 && ipv6_set=1 fi sleep $i i=$(expr $i + 1) done Stellen Sie sicher, dass dieses Skript ausfuehrbar ist (`chmod a+x`). Nachdem Sie die beiden oben erwaehnten Dateien auf jedem Server erstellt haben, muessen Sie den `keepalived` Service neu starten. Der Server mit der hoechsten Prioritaet wird sich die Floating IPs zuweisen. Falls der Service, welcher mittels Check-Skript ueberprueft wird fehlschlaegt oder der Server selbst nicht mehr antwortet, uebernimmt ein anderer Server automatisch.