Skip to content

Commit

Permalink
Update "Implementation of a Cloud HA infrastructure with Keepalived" (h…
Browse files Browse the repository at this point in the history
  • Loading branch information
svenja11 authored Dec 5, 2023
1 parent fd5e899 commit 2402e36
Show file tree
Hide file tree
Showing 2 changed files with 172 additions and 158 deletions.
163 changes: 85 additions & 78 deletions tutorials/configure-cloud-ha-keepalived/01.de.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ path: "/tutorials/configure-cloud-ha-keepalived/de"
slug: "configure-cloud-ha-keepalived"
date: "2021-05-19"
title: "Umsetzung einer Cloud HA Infrastruktur mit Keepalived"
short_description: "Konfiguration einer HA Struktur in der Cloud mithilfe von Floating-IPs und Keepalived"
short_description: "Konfiguration einer HA Struktur in der Cloud mithilfe von Floating IPs und Keepalived"
tags: ["HA", "Lang:Go", "linux", "keepalived", "floating-ip", "cloud"]
author: "Markus"
author_link: "https://github.com/BackInBash"
Expand All @@ -17,121 +17,113 @@ header_img: "header-8"

## Einleitung

In diesem Tutorial wird die Einrichtung eines Cloud HA Clusters mithilfe von Keepalived und Floating-IPs beschrieben.
In diesem Tutorial wird die Einrichtung eines Cloud HA Clusters mithilfe von Keepalived und Floating IPs beschrieben. Das Tutorial wird als Beispiel anhand von zwei Servern erklärt. Sollte der erste (originale) Server nicht mehr erreichbar sein, wird die Floating IP automatisch dem zweiten "Ersatz"-Server zugewiesen. Sobald der originale Server wieder erreichbar ist, wird die Floating IP automatisch wieder diesem zugewiesen. Dadurch bleibt die Anwendung auch dann erreichbar, wenn der Server ausfällt.

Zu beachten ist das diese form der Hochverfügbarkeit nicht von allen Anwendungen unterstützt wird. Dies sollte im ersten Schritt geprüft werden.
Zu beachten ist, dass diese Form der Hochverfügbarkeit nicht von allen Anwendungen unterstützt wird. Dies sollte im ersten Schritt geprüft werden.

**Voraussetzungen**

+ min. 2 Cloud Server
+ Eine Floating-IP
+ Min. 2 Cloud Server
+ Eine Floating IP

**Empfehlung**

>Für den HA Service sollte ein eigenes Cloud Projekt angelegt werden, da auf den Servern **kritische** Zugangsdaten im **klartext** abgelegt werden müssen.
>Mit einem seperaten Projekt kann bei einer möglichen kompromitierung der Schaden minimiert werden.
> Für den HA Service sollte ein eigenes Cloud Projekt angelegt werden, da auf den Servern **kritische** Zugangsdaten im **klartext** abgelegt werden müssen.
> Mit einem seperaten Projekt kann bei einer möglichen kompromitierung der Schaden minimiert werden.
## Schritt 1 - Einrichtung des automatischen IP Rerouting

In diesem Schritt geht es um das automatische Failover, dabei soll die Floating-IP automatisch dem anderen Server zugewiesen werden. Damit dieser unter der gleichen Adresse den ausgefallenen Dienst wieder aufnehmen stellen kann.
In diesem Schritt geht es um das automatische Failover, dabei soll die Floating IP automatisch dem anderen Server zugewiesen werden, damit dieser unter der gleichen Adresse den ausgefallenen Dienst wieder aufnehmen stellen kann.

### Schritt 1.1 - Erstellung eines Cloud API Tokens

Dieser Token wird benötigt um später vom Server aus die Floating-IP zuordnung zu steuern.
Dieser Token wird benötigt um später vom Server aus die Floating IP Zuweisung zu steuern.

In der Cloud Console muss unter **"Sicherheit"** --> **"API-Tokens"** ein **Lese/Schreib** API Token angelegt werden.
In der Cloud Console muss unter **"Sicherheit"** » **"API-Tokens"** ein **Lese/Schreib** API Token angelegt werden.

![](images/api.png)

> Hinweis: Da der Token nur einmal ausgelesen werden kann empfiehlt es sich diesen zwischenzuspeichern.
> **Hinweis:** Da der Token nur einmal ausgelesen werden kann, empfiehlt es sich diesen zwischenzuspeichern.
### Schritt 1.2 - Anlegen eines Cloud Netzwerks

Für den `VRRP` Heartbeat wird ein privater Netzwerkkanal benötigt dieser wird über die Funktion der Cloud Netzwerke realisiert.
Für den `VRRP` Heartbeat wird ein privater Netzwerkkanal benötigt. Dieser wird über die Funktion der Cloud Netzwerke realisiert.

Solche ein Cloud Netzwerk kann in der Cloud Console unter "Netzwerke" angelegt werden.
Solch ein Cloud Netzwerk kann in der Cloud Console unter "Netzwerke" angelegt werden.

Hier kann ein Netzwerk mit beliebiger größe (größer 32) angelegt und den beiden Server auch gleich zugewiesen werden.
Hier kann ein Netzwerk mit beliebiger Größe (größer 32) angelegt und den beiden Server auch gleich zugewiesen werden.

![](images/network.png)

### Schritt 1.3 - Installation der IP Failover Software

In diesm Schritt wird die Software installiert, die für die Provisionierung der Floating-IP zuständig ist.
In diesem Schritt wird auf beiden Servern die Software installiert, die für die Provisionierung der Floating IP zuständig ist.

Dabei handelt es sich um die Open Source Software [hcloud-ip](https://github.com/FootprintDev/hcloud-ip) um die Software zu installieren kann entweder auf die prebuilt-Binaries zurückgegriffen werden oder man kompiliert die Software selbst.
Dabei handelt es sich um die Open Source Software [hcloud-ip](https://github.com/FootprintDev/hcloud-ip). Um die Software zu installieren, kann entweder auf die prebuilt-Binaries zurückgegriffen werden oder man kompiliert die Software selbst.

**Für eine installation mit den prebuilt-Binaries sind folgende Schritte notwendig**

```bash
wget -O /opt/hcloud-ip https://github.com/FootprintDev/hcloud-ip/releases/download/v0.0.1/hcloud-ip-linux64
chmod +x /opt/hcloud
chmod +x /opt/hcloud-ip
```

**Um die Software selbst zu kompiliert sind folgende Schritte notwendig**
**Um die Software selbst zu kompilieren, sind folgende Schritte notwendig**

1. Installation der Abhängigkeiten

Ubuntu / Debian:

```bash
apt install git wget
```

CentOS / RHEL:

```bash
yum install git wget
```

Fedora:

```bash
dnf instal git wget
```

openSUSE / SLES:

```bash
zypper install git wget
```

Ubuntu / Debian:
```bash
apt install git wget
```

CentOS / RHEL:
```bash
yum install git wget
```

Fedora:
```bash
dnf instal git wget
```

openSUSE / SLES:
```bash
zypper install git wget
```

2. Golang Installation

```bash
wget https://golang.org/dl/go1.16.2.linux-amd64.tar.gz
tar xfvz go1.16.2.linux-amd64.tar.gz
export PATH=$(pwd)/go/bin:$PATH
```
```bash
wget https://go.dev/dl/go1.21.4.linux-amd64.tar.gz
tar xfvz go1.21.4.linux-amd64.tar.gz
export PATH=$(pwd)/go/bin:$PATH
```

3. Clonen des Repositories

```bash
git clone https://github.com/FootprintDev/hcloud-ip /tmp/hcloud-ip && cd /tmp/hcloud-ip
```
```bash
git clone https://github.com/FootprintDev/hcloud-ip /tmp/hcloud-ip && cd /tmp/hcloud-ip
```

4. Projekt Bauen
```bash
go build
```

```bash
go build
```

Nun sollte sich im aktuellen Ordner ein Programm mit dem Namen `hcloud-ip` befinden, dies kann entsprechend ausführbar gemacht und abgespeichert werden.
Nun sollte sich im aktuellen Ordner ein Programm mit dem Namen `hcloud-ip` befinden. Dies kann entsprechend ausführbar gemacht und abgespeichert werden.

```bash
chmod +x hcloud-ip
mv hcloud-ip /opt
```

### Schritt 1.4 - Konfiguration der Floating-IP
### Schritt 1.4 - Konfiguration der Floating IP

Damit die Floating-IP bei einem Failover auf allen Servern funktioniert, muss diese in die Netzwerkkonfiguration aufgenommen werden.
Eine Anleitung hierfür befindet sich auf [docs.hetzner.com](https://docs.hetzner.com/cloud/floating-ips/persistent-configuration)
Damit die Floating IP bei einem Failover auf allen Servern funktioniert, muss diese in die Netzwerkkonfiguration aufgenommen werden.
Eine Anleitung hierfür befindet sich auf [docs.hetzner.com](https://docs.hetzner.com/de/cloud/floating-ips/persistent-configuration/)

## Schritt 2 - Einrichtung von Keepalived

Keepalived ist ein Linux Daemon der Systeme oder Dienste überwacht und im Fehlerfall ein Failover anstößt.
Keepalived ist ein Linux Daemon der Systeme oder Dienste überwacht und im Fehlerfall ein Failover anstößt. Keepalived muss auf beiden Servern installiert werden.

### Schritt 2.1 - Installation von Keepalived

Expand Down Expand Up @@ -177,18 +169,19 @@ chkconfig keepalived on

Die hier gezeigte Konfiguration entspricht einem Beispiel anhand eines HA Webservers (nginx).

**Konfiguration des Master Servers**
**Konfiguration auf dem Master Server**

`/etc/keepalived/keepalived.conf`

```Console
```conf
vrrp_script chk_nginx {
script "/usr/bin/pgrep nginx"
interval 2
weight 101
}
vrrp_instance VI_1 {
interface [cloud_network_adapter]
interface [cloud_private_network_adapter]
state MASTER
priority 200
Expand All @@ -200,7 +193,7 @@ vrrp_instance VI_1 {
authentication {
auth_type PASS
auth_pass [password]
auth_pass [random_password]
}
track_script {
Expand All @@ -211,20 +204,20 @@ vrrp_instance VI_1 {
}
```

> Hinweis: Die umrandeten Werte `[]` sind durch eigene Angaben auszutauschen.
> **Hinweis:** Die umrandeten Werte `[]` sind durch eigene Angaben auszutauschen. Für `auth_pass` kann ein beliebiges Passwort gewählt werden. Für den Master und den Slave sollte aber dasselbe Passwort angegeben werden.
**Konfiguration des Slave Servers**
**Konfiguration auf dem Slave Server**

`/etc/keepalived/keepalived.conf`

```Console
```conf
vrrp_script chk_nginx {
script "/usr/bin/pgrep nginx"
interval 2
}
vrrp_instance VI_1 {
interface [cloud_network_adapter]
interface [cloud_private_network_adapter]
state SLAVE
priority 100
Expand All @@ -236,7 +229,7 @@ vrrp_instance VI_1 {
authentication {
auth_type PASS
auth_pass [password]
auth_pass [random_password]
}
track_script {
Expand All @@ -247,13 +240,15 @@ vrrp_instance VI_1 {
}
```

> Hinweis: Die umrandeten Werte `[]` sind durch eigene Angaben auszutauschen.
> **Hinweis:** Die umrandeten Werte `[]` sind durch eigene Angaben auszutauschen. Für `auth_pass` kann ein beliebiges Passwort gewählt werden. Für den Master und den Slave sollte aber dasselbe Passwort angegeben werden.
**Inhalt der `failover.sh`**
**Inhalt der `failover.sh` auf beiden Servern**

Das Script beinhaltet die Aktionen die bei einem Failover ausgeführt werden sollen.
`/etc/keepalived/failover.sh`

```bash
Das Script beinhaltet die Aktionen, die bei einem Failover ausgeführt werden sollen.

```sh
#!/bin/bash
IP='[Floating-IP-Name]'
TOKEN='[CloudToken]'
Expand All @@ -269,7 +264,19 @@ do
done
```

> Hinweis: Die umrandeten Werte `[]` sind durch eigene Angaben auszutauschen.
> **Hinweis:** Die umrandeten Werte `[]` sind durch eigene Angaben auszutauschen.
Die Datei kann nun ausführbar gemacht werden:

```bash
chmod 755 /etc/keepalived/failover.sh
```

Auf systemd basierten Systemen kann Keepalived jetzt gestartet werden:

```bash
systemctl start keepalived
```

## Schritt 3 - Testen der Konfiguration

Expand All @@ -283,9 +290,9 @@ Sobald dieser ausfällt gibt es ein Failover auf den Slave Webserver.

Sobald der Master Webserver wieder erreichbar ist wird wieder auf diesen gewechselt.

## Fazit
## Ergebnis

In diesem Beitrag wird beschreiben wie man eine High Availability Cloud Umgebung mithilfe von keepalived erstellt.
Die High Availability Cloud Umgebung sollte nun erstellt sein.

##### License: MIT

Expand Down
Loading

0 comments on commit 2402e36

Please sign in to comment.