18
0
Fork 0

premier jet d'écriture de la documentation

This commit is contained in:
emorino 2022-08-10 15:32:09 +02:00
parent 9078c84fec
commit a9c1edd067
1 changed files with 100 additions and 0 deletions

100
Howtoetcd.md Normal file
View File

@ -0,0 +1,100 @@
---
title: Howto etcd
categories: databases
...
* Documentation : https://etcd.io/docs/v3.5/
[Etcd](https://etcd.io/) est un système de stockage clé-valeur distribué fortement cohérent qui fournit un moyen fiable de stocker des données auxquelles un système distribué ou un cluster de machines doit accéder. Il gère les élections de primaire lors de problème réseau, et peux tolérer les pannes de machines, même sur le nœud primaire.
**ATTENTION : Documentation en cours d'écriture !**
# Installation
En Debian 11 on installe le client et / ou le serveur etcd comme ceci :
~~~
# apt install etcd-client etcd-server
~~~
Si on doit utilisé etcd via une API en python, comme pour Patroni par exemple, on peux installer ces paquets supplémentaires :
~~~
# apt install python3-etcd python3-psycopg2
~~~
# Configuration
etcd écoute, par défaut, sur deux port bien distinct, le port 2379 et le port 2380.
Le port 2379 sert pour la communication pour les requêtes des clients, et le port 2380 sert pour la communication des noeuds.
Voici la définition des variables d'environnement que nous utilisons le plus souvent :
`ETCD_NAME` : défini le noms du nœud
`ETCD_DATA_DIR` : répertoire du datadir des WAL etcd
`ETCD_LOG_OUTPUTS` : défini la sortie des logs, peux être défini sur `stdout` ou `stderr`, ça skippe la remonté des logs dans journald.
`ETCD_LISTEN_PEER_URLS` : défini la liste des URLs sur laquelle écoute le trafic des pairs. Seule une adresse IP est valide, si on indique `0.0.0.0:PORT` cela écoute sur toutes les interfaces réseau de la machine.
Un nom de domaine n'est pas valide pour l'écoute.
`ETCD_LISTEN_CLIENT_URLS` : défini la liste des URLs sur laquelle écoute le trafic des clients. Seule une adresse IP est valide, si on indique `0.0.0.0:PORT` cela écoute sur toutes les interfaces réseau de la machine.
Un nom de domaine n'est pas valide pour l'écoute.
`ETCD_INITIAL_ADVERTISE_PEER_URLS` : liste des URLs homologue de ce nœud a annoncer au reste du cluster. Ces adresses sont utilisées pour communiquer les données etcd autour du cluster, et elle peuvent contenir des noms de domaine.
`ETCD_INITIAL_CLUSTER` : configuration initiale du cluster pour l'amorçage.
`ETCD_ADVERTISE_CLIENT_URLS` : liste des URL client de ce membre à annoncer au reste du cluster, peux contenir des noms de domaine.
`ETCD_INITIAL_CLUSTER_TOKEN` : défini le token d'initialisation pour l'amorçage du cluster etcd.
`ETCD_INITIAL_CLUSTER_STATE` : état initial du cluster, peut être défini sur `new` ou `existing`. Si cette option est définie sur existant, etcd tentera de rejoindre le cluster existant. Si la mauvaise valeur est définie, etcd tentera de démarrer mais échouera en toute sécurité.
## Etcd en stand alone sur un seul nœud
Si on veux utilisé etcd sur un seul serveur, et pas en mode cluster, on utilisera la configuration suivante dans `/etc/default/etcd` :
~~~
ETCD_NAME="etcd-foo"
ETCD_LISTEN_PEER_URLS="http://192.0.1.2:2380"
ETCD_DATA_DIR="/var/lib/etcd/foo.etcd"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://192.0.1.2:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.0.1.2:2380"
ETCD_INITIAL_CLUSTER="etcd-foo=http://192.0.1.2:2380,"
ETCD_ADVERTISE_CLIENT_URLS="http://192.0.1.2:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-foo"
ETCD_INITIAL_CLUSTER_STATE="new"
~~~
Dans cet exemple l'ip `192.0.1.2` est l'ip locale de la machine, on le fait écouter à la fois sur `localhost` et l'ip locale.
## Etcd en mode cluster
Si on veux utilisé etcd en mode cluster, on utilisera la configuration suivante :
~~~
ETCD_NAME="etcd-foo1"
ETCD_DATA_DIR="/var/lib/etcd/foo.etcd"
ETCD_LOG_OUTPUTS="stdout"
ETCD_LISTEN_PEER_URLS="http://10.0.0.1:2380"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://10.0.0.1:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.1:2380"
ETCD_INITIAL_CLUSTER="etcd-foo1=http://10.0.0.1:2380,etcd-foo2=http://10.0.0.2:2380,etcd-foo3=http://10.0.0.3:2380,"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.1:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-foo"
ETCD_INITIAL_CLUSTER_STATE="new"
~~~
On fait écouter etcd sur le port `2379` sur l'ip publique ou LAN de la machine, et également sur `localhost`.
On défini la variable `ETCD_INITIAL_CLUSTER` vers tous les nœud etcd du cluster, dans cet exemple il y a 3 nœuds sur 3 machines différentes.
On défini la variable `ETCD_NAME` sur chaque nœud avec un nom différent.
La variable `ETCD_INITIAL_CLUSTER_TOKEN` doit avoir un nom commun sur les nœuds du cluster.
On met en place cette configuration sur tous les nœuds, en modifiant les variables `ETCD_LISTEN_PEER_URLS` / `ETCD_LISTEN_CLIENT_URLS` et `ETCD_INITIAL_ADVERTISE_PEER_URLS` sur chaque nœud avec les valeurs spécifiques a ces machines.