单机 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_RETENTION
revision
基于修订号的保留。
-
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"