一 环境准备
ntp配置:略 #建议配置ntp服务,保证时间一致性
etcd版本:v3.3.9
防火墙及SELinux:关闭防火墙和SELinux
名称 | 地址 | 主机名 | 备注 |
---|---|---|---|
etcd1 | 172.24.8.71 | etcd1.example.com | |
etcd2 | 172.24.8.72 | etcd2.example.com | |
etcd3 | 172.24.8.73 | etcd3.example.com |
1 # hostnamectl set-hostname etcd1.example.com
2 # hostnamectl set-hostname etcd2.example.com
3 # hostnamectl set-hostname etcd3.example.com
二 docker etcd集群部署
2.1 安装docker
见《docker版本及安装》。
2.2 etcd基础配置
代码语言:javascript复制 1 # mkdir -p /var/log/etcd/ #建议创建etcd日志保存目录
2 # mkdir -p /data/etcd #建议创建单独的etcd数据目录
3 # REGISTRY=gcr.io/etcd-development/etcd #配置etcd镜像的仓库,不推荐使用
4 # REGISTRY=quay.io/coreos/etcd #建议使用此仓库
5 # ETCD_VERSION=latest #设置etcd版本
6 # TOKEN=my-etcd-01 #设置唯一集群ID
7 # CLUSTER_STATE=new #置为新建集群
8 # NAME_1=etcd1
9 # NAME_2=etcd2
10 # NAME_3=etcd3 #设置三个节点的name
11 # HOST_1=172.24.8.71
12 # HOST_2=172.24.8.72
13 # HOST_3=172.24.8.73 #设置三个节点的IP
14 # CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380 #设置集群所有节点信息
15 # DATA_DIR=/data/etcd #设置集群etcd数据节点
提示:以上所有操作需要在所有节点操作。
2.3 启动docker etcd集群
代码语言:javascript复制 1 [root@etcd1 ~]# THIS_NAME=${NAME_1}
2 [root@etcd1 ~]# THIS_IP=${HOST_1}
3 [root@etcd1 ~]# docker run
4 -p 2379:2379
5 -p 2380:2380
6 --volume=${DATA_DIR}:/etcd-data
7 --name etcd ${REGISTRY}:${ETCD_VERSION}
8 /usr/local/bin/etcd
9 --data-dir=/etcd-data --name ${THIS_NAME}
10 --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380
11 --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379
12 --initial-cluster ${CLUSTER}
13 --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
14
15 [root@etcd2 ~]# THIS_NAME=${NAME_2}
16 [root@etcd2 ~]# THIS_IP=${HOST_2}
17 [root@etcd2 ~]# docker run
18 -p 2379:2379
19 -p 2380:2380
20 --volume=${DATA_DIR}:/etcd-data
21 --name etcd ${REGISTRY}:${ETCD_VERSION}
22 /usr/local/bin/etcd
23 --data-dir=/etcd-data --name ${THIS_NAME}
24 --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380
25 --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379
26 --initial-cluster ${CLUSTER}
27 --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
28
29 [root@etcd3 ~]# THIS_NAME=${NAME_3}
30 [root@etcd3 ~]# THIS_IP=${HOST_3}
31 [root@etcd3 ~]# docker run
32 -p 2379:2379
33 -p 2380:2380
34 --volume=${DATA_DIR}:/etcd-data
35 --name etcd ${REGISTRY}:${ETCD_VERSION}
36 /usr/local/bin/etcd
37 --data-dir=/etcd-data --name ${THIS_NAME}
38 --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380
39 --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379
40 --initial-cluster ${CLUSTER}
41 --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
提示:quay.io/coreos/etcd镜像国内可能无法pull,可在国外节点pull,然后scp至集群节点。
2.4 确认验证
代码语言:javascript复制 1 [root@etcd1 ~]# docker ps
代码语言:javascript复制 1 [root@etcd2 ~]# docker ps
代码语言:javascript复制 1 [root@etcd3 ~]# docker ps
代码语言:javascript复制 1 [root@etcd1 ~]# docker exec -it 21e6cf6e5e89 /usr/local/bin/etcdctl cluster-health
代码语言:javascript复制 1 [root@etcd1 ~]# netstat -nltp | grep 2380