Vue imprimable multi-pages de cette section.
Cliquer ici pour imprimer .
Retour à la version par défaut .
Tâches de l'opérateur Guides opérationnels pour déployer, configurer et maintenir un cluster etcd.
1 - Comment configurer un cluster étcd de démonstration Guide de configuration d’un cluster dans etcd
Sur chaque nœud etcd, précisez les membres du cluster :
TOKEN = token-01
CLUSTER_STATE = new
NAME_1 = machine-1
NAME_2 = machine-2
NAME_3 = machine-3
HOST_1 = 10.240.0.17
HOST_2 = 10.240.0.18
HOST_3 = 10.240.0.19
CLUSTER = ${ NAME_1 } = http://${ HOST_1 } :2380,${ NAME_2 } = http://${ HOST_2 } :2380,${ NAME_3 } = http://${ HOST_3 } :2380Exécutez ceci sur chaque machine :
# For machine 1
THIS_NAME = ${ NAME_1 }
THIS_IP = ${ HOST_1 }
etcd --data-dir= data.etcd --name ${ THIS_NAME } \
--initial-advertise-peer-urls http://${ THIS_IP } :2380 --listen-peer-urls http://${ THIS_IP } :2380 \
--advertise-client-urls http://${ THIS_IP } :2379 --listen-client-urls http://${ THIS_IP } :2379 \
--initial-cluster ${ CLUSTER } \
--initial-cluster-state ${ CLUSTER_STATE } --initial-cluster-token ${ TOKEN }
# For machine 2
THIS_NAME = ${ NAME_2 }
THIS_IP = ${ HOST_2 }
etcd --data-dir= data.etcd --name ${ THIS_NAME } \
--initial-advertise-peer-urls http://${ THIS_IP } :2380 --listen-peer-urls http://${ THIS_IP } :2380 \
--advertise-client-urls http://${ THIS_IP } :2379 --listen-client-urls http://${ THIS_IP } :2379 \
--initial-cluster ${ CLUSTER } \
--initial-cluster-state ${ CLUSTER_STATE } --initial-cluster-token ${ TOKEN }
# For machine 3
THIS_NAME = ${ NAME_3 }
THIS_IP = ${ HOST_3 }
etcd --data-dir= data.etcd --name ${ THIS_NAME } \
--initial-advertise-peer-urls http://${ THIS_IP } :2380 --listen-peer-urls http://${ THIS_IP } :2380 \
--advertise-client-urls http://${ THIS_IP } :2379 --listen-client-urls http://${ THIS_IP } :2379 \
--initial-cluster ${ CLUSTER } \
--initial-cluster-state ${ CLUSTER_STATE } --initial-cluster-token ${ TOKEN } Ou utilisez notre service de découverte public :
curl https://discovery.etcd.io/new?size= 3
https://discovery.etcd.io/a81b5818e67a6ea83e9d4daea5ecbc92
# grab this token
TOKEN = token-01
CLUSTER_STATE = new
NAME_1 = machine-1
NAME_2 = machine-2
NAME_3 = machine-3
HOST_1 = 10.240.0.17
HOST_2 = 10.240.0.18
HOST_3 = 10.240.0.19
DISCOVERY = https://discovery.etcd.io/a81b5818e67a6ea83e9d4daea5ecbc92
THIS_NAME = ${ NAME_1 }
THIS_IP = ${ HOST_1 }
etcd --data-dir= data.etcd --name ${ THIS_NAME } \
--initial-advertise-peer-urls http://${ THIS_IP } :2380 --listen-peer-urls http://${ THIS_IP } :2380 \
--advertise-client-urls http://${ THIS_IP } :2379 --listen-client-urls http://${ THIS_IP } :2379 \
--discovery ${ DISCOVERY } \
--initial-cluster-state ${ CLUSTER_STATE } --initial-cluster-token ${ TOKEN }
THIS_NAME = ${ NAME_2 }
THIS_IP = ${ HOST_2 }
etcd --data-dir= data.etcd --name ${ THIS_NAME } \
--initial-advertise-peer-urls http://${ THIS_IP } :2380 --listen-peer-urls http://${ THIS_IP } :2380 \
--advertise-client-urls http://${ THIS_IP } :2379 --listen-client-urls http://${ THIS_IP } :2379 \
--discovery ${ DISCOVERY } \
--initial-cluster-state ${ CLUSTER_STATE } --initial-cluster-token ${ TOKEN }
THIS_NAME = ${ NAME_3 }
THIS_IP = ${ HOST_3 }
etcd --data-dir= data.etcd --name ${ THIS_NAME } \
--initial-advertise-peer-urls http://${ THIS_IP } :2380 --listen-peer-urls http://${ THIS_IP } :2380 \
--advertise-client-urls http://${ THIS_IP } :2379 --listen-client-urls http://${ THIS_IP } :2379 \
--discovery ${ DISCOVERY } \
--initial-cluster-state ${ CLUSTER_STATE } --initial-cluster-token ${ TOKEN } etcd est maintenant prêt ! Pour vous connecter à etcd avec etcdctl :
export ETCDCTL_API = 3
HOST_1 = 10.240.0.17
HOST_2 = 10.240.0.18
HOST_3 = 10.240.0.19
ENDPOINTS = $HOST_1 :2379,$HOST_2 :2379,$HOST_3 :2379
etcdctl --endpoints= $ENDPOINTS member list 2 - Comment effectuer l'élection du leader dans un cluster etcd Étapes pour effectuer une élection de leader via le client etcdctl
Prérequis Vérifiez que etcd
et etcdctl
sont installés. Vérifiez l’état du cluster etcd actif. Conduire l’élection du leader La commande etcdctl est utilisée pour effectuer des élections de leader dans un cluster etcd. Elle garantit qu’un seul client peut devenir leader à la fois.
etcdctl --endpoints=$ENDPOINTS elect <election-name> [proposal]
etcdctl --endpoints= $ENDPOINTS elect election-name p1 Options Adresse de chaque membre du cluster etcd.
election-name chaîne de caractèresIdentifiant sous forme de chaîne pour l’élection. Tous les participants en compétition pour la direction doivent utiliser le même nom d’élection.
leader-name chaîne de caractèresValeur de proposition du nouveau leader.
Exemple ./etcdctl elect my-election proposal1
my-election/694d99fafea88404
proposal1
another election:
./etcdctl elect new-election proposal1
new-election/694d99fafea8840f
proposal1 3 - Comment vérifier l'état du cluster Guide de vérification de l’état du cluster etcd
Prérequis Vérifier l’état global endpoint status pour vérifier l’état global de chaque point de terminaison spécifié dans le drapeau --endpoints :
etcdctl endpoint status ( --endpoints= $ENDPOINTS | --cluster) Options --cluster[= false] : use all endpoints from the cluster member list Vérifier l’état de santé endpoint health pour vérifier l’état de santé de chaque point de terminaison spécifié dans le drapeau --endpoints :
etcdctl endpoint health ( --endpoints= $ENDPOINTS | --cluster) Options --cluster[= false] : use all endpoints from the cluster member list Vérifier le hachage KV endpoint hashkv pour vérifier le hachage de l’historique des paires clé-valeur de chaque point de terminaison spécifié dans le drapeau --endpoints :
etcdctl endpoint hashkv ( --endpoints= $ENDPOINTS | --cluster) [ rev = $REV ] Options --cluster[= false] : use all endpoints from the cluster member list
--rev= 0: maximum revision to hash ( default: latest revision) Options héritées des commandes parentes --endpoints= "127.0.0.1:2379" : gRPC endpoints
-w, --write-out= "simple" : set the output format ( fields, json, protobuf, simple, table) Exemples etcdctl --write-out= table --endpoints= $ENDPOINTS endpoint status
+------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| 10.240.0.17:2379 | 4917a7ab173fabe7 | 3.5.0 | 45 kB | true | false | 4 | 16726 | 16726 | |
| 10.240.0.18:2379 | 59796ba9cd1bcd72 | 3.5.0 | 45 kB | false | false | 4 | 16726 | 16726 | |
| 10.240.0.19:2379 | 94df724b66343e6c | 3.5.0 | 45 kB | false | false | 4 | 16726 | 16726 | |
+------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------| etcdctl --endpoints= $ENDPOINTS endpoint health
10.240.0.17:2379 is healthy: successfully committed proposal: took = 3.345431ms
10.240.0.19:2379 is healthy: successfully committed proposal: took = 3.767967ms
10.240.0.18:2379 is healthy: successfully committed proposal: took = 4.025451ms etcdctl --cluster endpoint hashkv --write-out= table
+------------------+------------+---------------+
| ENDPOINT | HASH | HASH REVISION |
+------------------+------------+---------------+
| 10.240.0.17:2379 | 3892279174 | 3 |
| 10.240.0.18:2379 | 3892279174 | 3 |
| 10.240.0.19:2379 | 3892279174 | 3 |
+------------------+------------+---------------+ 4 - Comment sauvegarder la base de données Guide de prise d’un instantané de la base de données etcd
Prérequis Effectuer un instantané d’une base de données snapshot pour sauvegarder un instantané du stockage etcd à un instant donné :
etcdctl --endpoints= $ENDPOINT snapshot save DB_NAME Options globales etcdctl --endpoints=[ 127.0.0.1:2379] , gRPC endpoints Un instantané ne peut être demandé qu’à un nœud etcd, donc le drapeau --endpoints ne doit contenir qu’un seul point de terminaison.
etcdutl -w, --write-out string set the output format ( fields, json, protobuf, simple, table) ( default "simple" ) Exemple ENDPOINTS = $HOST_1 :2379
etcdctl --endpoints= $ENDPOINTS snapshot save my.db
Snapshot saved at my.db etcdutl --write-out= table snapshot status my.db
+---------+----------+------------+------------+
| HASH | REVISION | TOTAL KEYS | TOTAL SIZE |
+---------+----------+------------+------------+
| c55e8b8 | 9 | 13 | 25 kB |
+---------+----------+------------+------------+ 5 - Comment ajouter et supprimer des membres Guide de gestion de la configuration du cluster dans etcd
member pour ajouter, supprimer ou mettre à jour le membre :
# For each machine
TOKEN = my-etcd-token-1
CLUSTER_STATE = new
NAME_1 = etcd-node-1
NAME_2 = etcd-node-2
NAME_3 = etcd-node-3
HOST_1 = 10.240.0.13
HOST_2 = 10.240.0.14
HOST_3 = 10.240.0.15
CLUSTER = ${ NAME_1 } = http://${ HOST_1 } :2380,${ NAME_2 } = http://${ HOST_2 } :2380,${ NAME_3 } = http://${ HOST_3 } :2380
# For node 1
THIS_NAME = ${ NAME_1 }
THIS_IP = ${ HOST_1 }
etcd --data-dir= data.etcd --name ${ THIS_NAME } \
--initial-advertise-peer-urls http://${ THIS_IP } :2380 \
--listen-peer-urls http://${ THIS_IP } :2380 \
--advertise-client-urls http://${ THIS_IP } :2379 \
--listen-client-urls http://${ THIS_IP } :2379 \
--initial-cluster ${ CLUSTER } \
--initial-cluster-state ${ CLUSTER_STATE } \
--initial-cluster-token ${ TOKEN }
# For node 2
THIS_NAME = ${ NAME_2 }
THIS_IP = ${ HOST_2 }
etcd --data-dir= data.etcd --name ${ THIS_NAME } \
--initial-advertise-peer-urls http://${ THIS_IP } :2380 \
--listen-peer-urls http://${ THIS_IP } :2380 \
--advertise-client-urls http://${ THIS_IP } :2379 \
--listen-client-urls http://${ THIS_IP } :2379 \
--initial-cluster ${ CLUSTER } \
--initial-cluster-state ${ CLUSTER_STATE } \
--initial-cluster-token ${ TOKEN }
# For node 3
THIS_NAME = ${ NAME_3 }
THIS_IP = ${ HOST_3 }
etcd --data-dir= data.etcd --name ${ THIS_NAME } \
--initial-advertise-peer-urls http://${ THIS_IP } :2380 \
--listen-peer-urls http://${ THIS_IP } :2380 \
--advertise-client-urls http://${ THIS_IP } :2379 \
--listen-client-urls http://${ THIS_IP } :2379 \
--initial-cluster ${ CLUSTER } \
--initial-cluster-state ${ CLUSTER_STATE } \
--initial-cluster-token ${ TOKEN } Ensuite, remplacez un membre avec les commandes member remove et member add :
# get member ID
export ETCDCTL_API = 3
HOST_1 = 10.240.0.13
HOST_2 = 10.240.0.14
HOST_3 = 10.240.0.15
etcdctl --endpoints= ${ HOST_1 } :2379,${ HOST_2 } :2379,${ HOST_3 } :2379 member list
# remove the member
MEMBER_ID = 278c654c9a6dfd3b
etcdctl --endpoints= ${ HOST_1 } :2379,${ HOST_2 } :2379,${ HOST_3 } :2379 \
member remove ${ MEMBER_ID }
# add a new member (node 4)
export ETCDCTL_API = 3
NAME_1 = etcd-node-1
NAME_2 = etcd-node-2
NAME_4 = etcd-node-4
HOST_1 = 10.240.0.13
HOST_2 = 10.240.0.14
HOST_4 = 10.240.0.16 # new member
etcdctl --endpoints= ${ HOST_1 } :2379,${ HOST_2 } :2379 \
member add ${ NAME_4 } \
--peer-urls= http://${ HOST_4 } :2380 Ensuite, démarrez le nouveau membre avec le drapeau --initial-cluster-state existing :
# [WARNING] If the new member starts from the same disk space,
# make sure to remove the data directory of the old member
#
# restart with 'existing' flag
TOKEN = my-etcd-token-1
CLUSTER_STATE = existing
NAME_1 = etcd-node-1
NAME_2 = etcd-node-2
NAME_4 = etcd-node-4
HOST_1 = 10.240.0.13
HOST_2 = 10.240.0.14
HOST_4 = 10.240.0.16 # new member
CLUSTER = ${ NAME_1 } = http://${ HOST_1 } :2380,${ NAME_2 } = http://${ HOST_2 } :2380,${ NAME_4 } = http://${ HOST_4 } :2380
THIS_NAME = ${ NAME_4 }
THIS_IP = ${ HOST_4 }
etcd --data-dir= data.etcd --name ${ THIS_NAME } \
--initial-advertise-peer-urls http://${ THIS_IP } :2380 \
--listen-peer-urls http://${ THIS_IP } :2380 \
--advertise-client-urls http://${ THIS_IP } :2379 \
--listen-client-urls http://${ THIS_IP } :2379 \
--initial-cluster ${ CLUSTER } \
--initial-cluster-state ${ CLUSTER_STATE } \
--initial-cluster-token ${ TOKEN }