#import "../Helpers/code-snippets.typ": code

== Etcd
Ein Patroni Cluster benötigt einen Distributed Consensus Store (DCS), um den Zustand des Postgres-Clusters zu speichern und zu verwalten. Der DCS fungiert als Quelle der Wahrheit für Patroni, um zu entscheiden, welche Aktionen durchgeführt werden sollen. Patroni unterstützt die DCS etcd, Consul und ZooKeeper.

Folgendes waren die Gründe für den Entscheid für etcd:

- Einfaches und starkes Konsistenz-Modell
- Simple Integration in Patroni
- Niedrige Komplexität bei Installation und Betrieb
=== Installation
Etcd ist in den offiziellen Ubuntu Repositories vorhanden, wir konnten es daher einfach in der Version 3.3 installieren, indem wir das folgende Kommando ausführten:
#code(numbers: true)[```bash
apt install etcd -y
```]
=== Konfiguration
Die Konfigurationsdatei von etcd befindet sich unter `/etc/default/etcd`. Wir haben die folgenden Änderungen vorgenommen:
#figure(
  code(
    numbers: true,
    caption: "etcd"
  )[```bash
  ETCD_LISTEN_PEER_URLS="http://<k3s-node-ip>:3380"
  ETCD_LISTEN_CLIENT_URLS="http://<k3s-node-ip>:3379,http://127.0.0.1:3379"
  ETCD_INITIAL_ADVERTISE_PEER_URLS="http://<k3s-node-ip>:3380"
  ETCD_INITIAL_CLUSTER="k3s-01=http://10.0.10.11:3380, k3s-02=http://10.0.10.12:3380, k3s-03=http://10.0.10.13:3380"
  ETCD_INITIAL_CLUSTER_STATE="new"
  ETCD_INITIAL_CLUSTER_TOKEN="supersecret"
  ETCD_ADVERTISE_CLIENT_URLS="http://<k3s-node-ip>:3379"
  ```]
)
Die benötigten Parameter haben wir aus der offiziellen Etcd Dokumentation für Cluster abgeleitet (https://etcd.io/docs/v3.3/op-guide/clustering/#static). Speziell ist, dass wir die Ports gegenüber den Standard-Ports um 1000 erhöht haben, weil die Standard-Ports bereits vom etcd in k3s verwendet wurden.

Nachdem wir die Konfiguration geändert haben, haben wir den etcd-Dienst neu gestartet, beim Booten aktiviert und die Firewall-Regeln angepasst:
#code(numbers: true)[```bash
systemctl restart etcd
systemctl enable etcd
ufw allow 3379:3380/tcp
```]