How to Set Up a Demo etcd Cluster

Guide to setting up a cluster in etcd

01_etcd_clustering_2016050601

On each etcd node, specify the cluster members:

1. TOKEN=token-01
2. CLUSTER_STATE=new
3. NAME_1=machine-1
4. NAME_2=machine-2
5. NAME_3=machine-3
6. HOST_1=10.240.0.17
7. HOST_2=10.240.0.18
8. HOST_3=10.240.0.19
9. CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380

Run this on each machine:

1. # For machine 1
2. THIS_NAME=${NAME_1}
3. THIS_IP=${HOST_1}
4. etcd --data-dir=data.etcd --name ${THIS_NAME} \
5. --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
6. --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
7. --initial-cluster ${CLUSTER} \
8. --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

10. # For machine 2
11. THIS_NAME=${NAME_2}
12. THIS_IP=${HOST_2}
13. etcd --data-dir=data.etcd --name ${THIS_NAME} \
14. --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
15. --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
16. --initial-cluster ${CLUSTER} \
17. --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

19. # For machine 3
20. THIS_NAME=${NAME_3}
21. THIS_IP=${HOST_3}
22. etcd --data-dir=data.etcd --name ${THIS_NAME} \
23. --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
24. --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
25. --initial-cluster ${CLUSTER} \
26. --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

Or use our public discovery service:

1. curl https://discovery.etcd.io/new?size=3
2. https://discovery.etcd.io/a81b5818e67a6ea83e9d4daea5ecbc92

4. # grab this token
5. TOKEN=token-01
6. CLUSTER_STATE=new
7. NAME_1=machine-1
8. NAME_2=machine-2
9. NAME_3=machine-3
10. HOST_1=10.240.0.17
11. HOST_2=10.240.0.18
12. HOST_3=10.240.0.19
13. DISCOVERY=https://discovery.etcd.io/a81b5818e67a6ea83e9d4daea5ecbc92

15. THIS_NAME=${NAME_1}
16. THIS_IP=${HOST_1}
17. etcd --data-dir=data.etcd --name ${THIS_NAME} \
18. --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
19. --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
20. --discovery ${DISCOVERY} \
21. --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

23. THIS_NAME=${NAME_2}
24. THIS_IP=${HOST_2}
25. etcd --data-dir=data.etcd --name ${THIS_NAME} \
26. --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
27. --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
28. --discovery ${DISCOVERY} \
29. --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

31. THIS_NAME=${NAME_3}
32. THIS_IP=${HOST_3}
33. etcd --data-dir=data.etcd --name ${THIS_NAME} \
34. --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
35. --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
36. --discovery ${DISCOVERY} \
37. --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

Now etcd is ready! To connect to etcd with etcdctl:

1. export ETCDCTL_API=3
2. HOST_1=10.240.0.17
3. HOST_2=10.240.0.18
4. HOST_3=10.240.0.19
5. ENDPOINTS=$HOST_1:2379,$HOST_2:2379,$HOST_3:2379

7. etcdctl --endpoints=$ENDPOINTS member list

Last modified June 24, 2025: etcd-website: reorganised tutorials to tasks (b5f1df7)