Cette section propose des guides axés sur les tâches destinés aux développeurs développant des applications avec etcd, ainsi qu’aux opérateurs chargés du déploiement, de la configuration et de la maintenance des clusters etcd.
etcd est maintenant prêt ! Pour vous connecter à etcd avec etcdctl :
exportETCDCTL_API=3HOST_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
1.2 - Comment effectuer l'élection du leader dans un cluster etcd
Étapes pour effectuer une élection de leader via le client etcdctl
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.
Ensuite, remplacez un membre avec les commandes member remove et member add :
# get member IDexportETCDCTL_API=3HOST_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 memberMEMBER_ID=278c654c9a6dfd3b
etcdctl --endpoints=${HOST_1}:2379,${HOST_2}:2379,${HOST_3}:2379 \
member remove ${MEMBER_ID}# add a new member (node 4)exportETCDCTL_API=3NAME_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 memberetcdctl --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' flagTOKEN=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 memberCLUSTER=${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}
2 - Tâches de développement
Guides pas à pas pour les développeurs utilisant etcd en tant que magasin clé-valeur dans leurs applications.
2.1 - Lecture depuis etcd
Lecture d’une valeur dans un cluster etcd
Prérequis
Installer etcdctl
Procédure
Utilisez la sous-commande get pour lire depuis etcd :
$ etcdctl --endpoints=$ENDPOINTS get foo
foo
Hello World!
$
où :
foo est la clé demandée
Hello World! est la valeur récupérée
Or, pour une sortie formatée :
$ etcdctl --endpoints=$ENDPOINTS --write-out="json" get foo
{"header":{"cluster_id":289318470931837780,"member_id":14947050114012957595,"revision":3,"raft_term":4,
"kvs":[{"key":"Zm9v","create_revision":2,"mod_revision":3,"version":2,"value":"SGVsbG8gV29ybGQh"}]}}
$
où write-out="json" fait que la valeur est sortie au format JSON (notez que la clé n’est pas renvoyée).
2.2 - Écriture dans etcd
Ajout d’une paire clé-valeur à un cluster etcd
Prérequis
Installer etcdctl
Procédure
Utilisez la sous-commande put pour écrire une paire clé-valeur :
etcdctl --endpoints=$ENDPOINTS put foo "Hello World!"
où :
foo est le nom de la clé
"Hello World!" est la valeur délimitée par des guillemets
2.3 - Comment obtenir des clés par préfixe
Guide de extraction des clés etcd par leur préfixe
$ etcdctl --endpoints=$ENDPOINTS get PREFIX --prefix
Options globales
--endpoints=[127.0.0.1:2379], gRPC endpoints
Options
--prefix, get a range of keys with matching prefix
Exemple
etcdctl --endpoints=$ENDPOINTS put web1 value1
etcdctl --endpoints=$ENDPOINTS put web2 value2
etcdctl --endpoints=$ENDPOINTS put web3 value3
etcdctl --endpoints=$ENDPOINTS get web --prefix
del pour supprimer la clé spécifiée ou la plage de clés :
etcdctl del $KEY[$END_KEY]
Options
--prefix[=false]: delete keys with matching prefix
--prev-kv[=false]: return deleted key-value pairs
--from-key[=false]: delete keys that are greater than or equal to the given key using byte compare
--range[=false]: delete range of keys without delay
Options héritées des commandes parentes
--endpoints="127.0.0.1:2379": gRPC endpoints
Exemples
etcdctl --endpoints=$ENDPOINTS put key myvalue
etcdctl --endpoints=$ENDPOINTS del key
etcdctl --endpoints=$ENDPOINTS put k1 value1
etcdctl --endpoints=$ENDPOINTS put k2 value2
etcdctl --endpoints=$ENDPOINTS del k --prefix
2.5 - Comment effectuer plusieurs écritures dans une transaction
txn command est une abréviation de « transaction ». Il lit plusieurs requêtes etcd depuis l’entrée standard et les applique comme une transaction atomique unique. Une transaction se compose d’une liste de conditions, d’une liste de requêtes à appliquer si toutes les conditions sont vraies, et d’une liste de requêtes à appliquer si au moins une condition est fausse. Consultez etcdctl key-value commands
pour plus d’informations.
compare
La clause compare au sein d’une transaction (txn) sert de vérification conditionnelle déterminant si les opérations de la transaction doivent s’exécuter. Elle garantit que les modifications ne sont appliquées que si l’état actuel du magasin clé-valeur correspond aux conditions attendues, assurant ainsi la cohérence des données et évitant les conflits dans les environnements concurrents. Pour voir la structure de la commande, consultez la section Effectuer une transaction
ci-dessous.
Transactions
txn pour traiter toutes les requêtes dans une seule transaction :
etcdctl txn --help
Les transactions dans etcd permettent d’exécuter plusieurs opérations de manière atomique, garantissant que toutes les opérations sont appliquées ou que aucune ne l’est. Cela est essentiel pour maintenir la cohérence des données lors de mises à jour liées. En savoir plus sur les transactions dans la documentation de l’API
.
Exemple
Considérons un scénario dans lequel vous souhaitez mettre à jour l’e-mail et le numéro de téléphone d’un utilisateur dans une seule transaction. Cela garantit que les deux mises à jour sont appliquées ensemble.
0. Variables et indicateurs utilisés
Variables
/users/{<user_id>/email : clé etcd représentant l’adresse e-mail d’un utilisateur.
/users/<user_id>/phone : clé etcd représentant le numéro de téléphone d’un utilisateur.
Drapeaux
--interactive
: Drapeau permettant d’entrer manuellement les données de transaction
1. Configurer les données initiales
Tout d’abord, créez un utilisateur avec quelques données initiales.
etcdctl put /users/12345/email "old.address@johndoe.com"etcdctl put /users/12345/phone "123-456-7890"
2. Effectuer une transaction
Mettez à jour l’e-mail et le numéro de téléphone de l’utilisateur dans une seule transaction.
etcdctl txn --interactive
compares:
value("/users/12345/email")="old.address@johndoe.com"success requests (get, put, delete):
put /users/12345/email "new.address@johndoe.com"put /users/12345/phone "098-765-4321"failure requests (get, put, delete):
get /users/12345/email
Comparaison : Vérifiez que l’e-mail actuel correspond à “old.address@johndoe.com
”. Cela garantit que la transaction ne s’effectue que si les données sont telles qu’attendu.
Succès : Si la comparaison est vraie, mettez à jour à la fois l’e-mail et le numéro de téléphone.
Échec : Si la comparaison échoue, récupérez l’e-mail actuel afin de comprendre pourquoi la transaction n’a pas pu s’effectuer.
Considérations importantes
Atomicité : La transaction garantit que la mise à jour de l’e-mail et du numéro de téléphone s’effectue ensemble. Si la condition initiale (comparaison) n’est pas remplie, aucune mise à jour n’est appliquée.
Consistance : L’utilisation des transactions assure la cohérence des données, notamment lors de mises à jour multiples liées.
Éviter plusieurs opérations put sur la même clé : Ne pas effectuer plusieurs mises à jour pour la même clé au sein d’une même transaction, car cela peut entraîner des résultats imprévus. Chaque clé ne doit être mise à jour qu’une seule fois par transaction.
watch pour être notifié des modifications futures :
etcdctl watch $KEY[$END_KEY]
Options
-i, --interactive[=false]: interactive mode
--prefix[=false]: watch on a prefix if prefix is set--rev=0: Revision to start watching
--prev-kv[=false]: get the previous key-value pair before the event happens
--progress-notify[=false]: get periodic watch progress notification from server
Options héritées des commandes parentes
--endpoints="127.0.0.1:2379": gRPC endpoints
Exemples
etcdctl --endpoints=$ENDPOINTS watch stock1
etcdctl --endpoints=$ENDPOINTS put stock1 1000etcdctl --endpoints=$ENDPOINTS watch stock --prefix
etcdctl --endpoints=$ENDPOINTS put stock1 10etcdctl --endpoints=$ENDPOINTS put stock2 20
2.7 - Comment créer un bail
Guide de création d’un bail dans etcd
lease pour écrire avec un TTL :
etcdctl --endpoints=$ENDPOINTS lease grant 300# lease 2be7547fbc6a5afa granted with TTL(300s)etcdctl --endpoints=$ENDPOINTS put sample value --lease=2be7547fbc6a5afa
etcdctl --endpoints=$ENDPOINTS get sample
etcdctl --endpoints=$ENDPOINTS lease keep-alive 2be7547fbc6a5afa
etcdctl --endpoints=$ENDPOINTS lease revoke 2be7547fbc6a5afa
# or after 300 secondsetcdctl --endpoints=$ENDPOINTS get sample
2.8 - Comment créer des verrous
Guide de création de verrous distribués avec etcd
LOCK acquiert un verrou distribué portant un nom donné. Une fois le verrou acquis, il reste détenu jusqu’à la terminaison d’etcdctl.