单机 Docker Compose 部署
封装了启动命令的 sh 文件:
#!/bin/sh
/usr/local/bin/etcd --data-dir=${DATA_DIR} -name ${NAME} --initial-advertise-peer-urls http://${HOST}:2380 --listen-peer-urls http://0.0.0.0:2380 --advertise-client-urls http://${HOST}:2379 --listen-client-urls http://0.0.0.0:2379 --initial-cluster ${CLUSTER} --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
下面是 Docker Compose 文件:
version: '3.2'
services:
etcd-1:
container_name: etcd-1
image: quay.io/coreos/etcd:v3.5.0
environment:
- ETCD_AUTO_COMPACTION_MODE=revision
- ETCD_QUOTA_BACKEND_BYTES=8589934592
- ETCD_SNAPSHOT_COUNT=500
- HOST_1=etcd-1
- HOST_2=etcd-2
- HOST_3=etcd-3
- CLUSTER_STATE=new
- DATA_DIR=/etcd
- CLUSTER=etcd-1=http://etcd-1:2380,etcd-2=http://etcd-2:2380,etcd-3=http://etcd-3:2380
- NAME=etcd-1
- HOST=etcd-1
ports:
- 1379:2379
- 1380:2380
volumes:
- ./etcd/data:/etcd
- ./etcd/start.sh:/scripts/start.sh
command: sh "/scripts/start.sh"
etcd-2:
container_name: etcd-2
image: quay.io/coreos/etcd:v3.5.0
environment:
- ETCD_AUTO_COMPACTION_MODE=revision
- ETCD_QUOTA_BACKEND_BYTES=8589934592
- ETCD_SNAPSHOT_COUNT=500
- HOST_1=etcd-1
- HOST_2=etcd-2
- HOST_3=etcd-3
- CLUSTER_STATE=existing
- DATA_DIR=/etcd
- CLUSTER=etcd-1=http://etcd-1:2380,etcd-2=http://etcd-2:2380,etcd-3=http://etcd-3:2380
- NAME=etcd-2
- HOST=etcd-2
ports:
- 2379:2379
- 2380:2380
volumes:
- ./etcd/data:/etcd
- ./etcd/start.sh:/scripts/start.sh
command: sh "/scripts/start.sh"
etcd-3:
container_name: etcd-3
image: quay.io/coreos/etcd:v3.5.0
environment:
- ETCD_AUTO_COMPACTION_MODE=revision
- ETCD_QUOTA_BACKEND_BYTES=8589934592
- ETCD_SNAPSHOT_COUNT=500
- HOST_1=etcd-1
- HOST_2=etcd-2
- HOST_3=etcd-3
- CLUSTER_STATE=existing
- DATA_DIR=/etcd
- CLUSTER=etcd-1=http://etcd-1:2380,etcd-2=http://etcd-2:2380,etcd-3=http://etcd-3:2380
- NAME=etcd-3
- HOST=etcd-3
ports:
- 3379:2379
- 3380:2380
volumes:
- ./etcd/data:/etcd
- ./etcd/start.sh:/scripts/start.sh
command: sh "/scripts/start.sh"
针对上面的文件解释一下:
-
etcd启动的时候,执行的是第一个sh文件。sh文件中的很多参数都是取得在Docker Compose中设置的环境变量。 -
ETCD_AUTO_COMPACTION_MODE: 自动压缩保留模式,可选:periodic基于时间的保留,如果未提供时间单位,则默认为小时。如果使用此参数,需要额外设置一个环境变量ETCD_AUTO_COMPACTION_RETENTIONrevision基于修订号的保留。
-
ETCD_QUOTA_BACKEND_BYTES: 存储的配额限制。单位字节。 -
ETCD_SNAPSHOT_COUNT: 保留最新的快照数。 -
HOST_1、HOST_2、HOST_3: 用于设置etcd集群中每个节点的主机名或IP地址的环境变量。 -
CLUSTER_STATE: 初始化的cluster状态。new代表新建集群,existing代表集群已存在。 -
DATA_DIR: 数据存储路径。 -
CLUSTER: 集群地址列表。 -
NAME: 当前节点名称。 -
HOST: 当前节点地址。
启动时,先启动 etcd-1,再启动另外两个。
多机 Docker 部署
根据上面的 sh 及 Docker Compsose 编写。执行前替换相应的地址及端口。
docker run -d \
--name etcd-1 \
-p 2379:2379 \
-p 2380:2380 \
-v ./etcd/data:/etcd \
-v ./etcd/start.sh:/scripts/start.sh \
-e ETCD_AUTO_COMPACTION_MODE=revision \
-e ETCD_QUOTA_BACKEND_BYTES=8589934592 \
-e ETCD_SNAPSHOT_COUNT=500 \
-e HOST_1=etcd-1 \
-e HOST_2=etcd-2 \
-e HOST_3=etcd-3 \
-e CLUSTER_STATE=new \
-e DATA_DIR=/etcd \
-e CLUSTER=etcd-1=http://etcd-1:2380,etcd-2=http://etcd-2:2380,etcd-3=http://etcd-3:2380 \
-e NAME=etcd-1 \
-e HOST=etcd-1 \
quay.io/coreos/etcd:v3.5.0 sh "/scripts/start.sh"