To learn about ETCD – A Distributed Key-Value Store
etcd is a strongly consistent, distributed key-value store that provides a reliable way to store data that needs to be accessed by a distributed system or cluster of machines. It is an open-source project maintained by CNCF. Most notably, it manages the configuration data, state data, and metadata for Kubernetes, the popular container orchestration platform.
etcd has its roots with the developers at CoreOS. The name comes from the idea of distributing the Unix “/etc” directory, where many configuration files live, across multiple machines – /etc distributed thus as etcd. It uses a consensus algorithm called RAFT. It is the ‘go-to’ algorithm that developers use to write systems that agree on the state of values. In etcd’s case, those values represent a hierarchical keyspace with directories and keys.
Features of ETCD
- Simple Interface: Values can be read and written using standard HTTP tools such as curl.
- Key-value storage: Data can be stored in hierarchically organized directories as a standard filesystem.
- Watch for changes: Watch specific keys or directories for changes and react to changes in values.
- Provide SSL client certificate authentication and TTLs for key expiration.
- Provides etcdctl, a command-line tool to interact with etcd, the server which is written in Go programming language.
Further, we will explore more about ETCD, for this firstly install etcd and then see its basic implementation to learn more about it and after this, we will be seeing on how to set up a local 3-node etcd cluster.
ETCD Installation
- To get started with etcd, first, let’s install etcd by running the script file.
bash ./lab.sh
- Check the etcd and etcdctl version.
etcd --version
etcdctl version
Now we will be seeing how to interact with the etcd server by performing some basic operations on it.
- Start the etcd server
etcd &
Interact with the etcd server through the etcdctl command-line tool.
Basic Interaction with ETCD
Here, we will be seeing how to interact with the etcd server with these different commands.
Create a key
etcdctl put key1 bar1
This will make a new key-pair with key as key1 and value as a bar1
etcdctl put key2 bar2
This will make a new key-pair with key as key2 and value as a bar2
etcdctl put color blue
This will make another key-pair with key as color and value as blue
Retrieve key
etcdctl get key1
This will give the key-value pair of key key1
etcdctl get key1 --hex
This will return the key-value pair in hexadecimal format.
etcdctl get key1 --print-value-only
This will only print the value of key1
Delete a key
etcdctl del color
This will delete the specified key i.e. color and return the number of keys deleted.
Batch queries
etcdctl get --prefix key
This will return all the keys which have prefixes as key along with their values like key1-bar1 and key2-bar2 key-value pair.
Putting lease on key
etcdctl lease grant 100
This returns a LEASE_ID
(alphanumeric) which will be used to put a lease(timer) on a key for 100 seconds.
This is generally used to manage temporary keys, for example, to keep a watch on Kubernetes events.
Stop the ETCD Server
- Now stop the etcd server through
pkill
command.
pkill etcd
Setting up a local ETCD cluster
To set up a three-node local etcd cluster, first, install a goreman which manages procfile-based applications.
Procfile is used for declaring a set of commands that can be run by an application at the start and is currently present at the root directory.
Goreman Installation
- Install goreman with the below command
wget https://github.com/mattn/goreman/releases/download/v0.3.7/goreman_v0.3.7_linux_amd64.tar.gz
tar xzvf goreman_v0.3.7_linux_amd64.tar.gz
- Move
goreman
to/usr/local/bin
mv goreman_v0.3.7_linux_amd64/goreman /usr/local/bin
- And its installation can be checked by executing a
goreman
command.
goreman
Interacting with local cluster via goreman
- After installing this generate a Procfile that has all the cluster details currently present in the root directory.
cat Procfile
On observing you can see that there are three processes as etcd1 , etcd2 , etcd3 and each one of them have given names as node1, node2 , node3 respectively with their respective URLs and port numbers.
Along with it, the nodes have also information about other nodes for peer-to-peer communication.
NOTE: The official etcd ports are 2379 for client requests, and 2380 for peer communication.
- Now, run the goreman by running a command
goreman start
goreman start
- Now, print the nodes of the cluster in form of a table
etcdctl --write-out=table --endpoints=localhost:2379 member list
Fault tolerance testing to check the working of nodes in the cluster.
- Identify the process name of the member to be stopped. For example, consider the member with the process name, etcd2.
Stop the member:
goreman run stop etcd2
Store a key
etcdctl put location earth
Retrieve the key that is stored in the previous step:
etcdctl get location
Retrieve a key from the stopped member:
etcdctl --endpoints=localhost:22379 get location
NOTE : The command should display an error caused by connection failure.
Restart the stopped member:
goreman run restart etcd2
Get the key from the restarted member:
etcdctl --endpoints=localhost:22379 get location
And to know about how to configure etcd cluster with TLS certificate, click here
Conclusion
In this blog, we have learned about etcd with its basic commands and learned how to set up a three-node local etcd cluster and interact with it.