文章目录
- 前言
- 一、环境信息
- 二、搭建步骤
- 1.准备前置条件
- 1.1 安装Docker
- 1.2 拉取镜像
- 2.安装Etcd
- 2.1 新建目录
- 2.2 编辑脚本
- 2.3 执行部署
- 三、结果验证
- 在这里插入图片描述
- 总结
- 参考
前言
本文介绍使用docker搭建一个etcd集群,附带对应的搭建脚本。我极力希望讲操作步骤和原理说明的尽量详细,能够让读者更容易理解。
一、环境信息
使用本地的vmstation创建3个虚拟机,信息如下
节点名称 | 节点IP | 节点配置 | 操作系统 | Etcd版本 | Docker版本 |
etcd1 | 192.168.82.128 | 1c1g 20g | CentOS7.4 | v3.5 | 13.1 |
etcd2 | 192.168.82.129 | 1c1g 20g | CentOS7.4 | v3.5 | 13.1 |
etcd3 | 192.168.82.130 | 1c1g 20g | CentOS7.4 | v3.5 | 13.1 |
说明:服务器应该能够访问公网,以便能够下载对应的etcd镜像
二、搭建步骤
1.准备前置条件
1.1 安装Docker
代码如下(示例):
# 安装docker
yum install -y docker
# 重启docker
systemctl restart docker
# 验证docker
docker ps
备注,需要关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
1.2 拉取镜像
代码如下(示例):
# 拉取镜像
docker pull quay.io/coreos/etcd:v3.5.0
# 验证镜像
docker images|grep etcd
2.安装Etcd
2.1 新建目录
分别在3台机器上都新建目录 /data/etcd,用于挂载到容器中,能够讲etcd的数据持久化到本地磁盘。需要注意的是,再生产环境中尽可能的将etcd的数据目录单独挂载一个磁盘,磁盘的io性能越快越好。磁盘的io带宽尽量需要保证在40MByte/s以上。否则etcd会因为磁盘性能差,导致不断的切主或者无法完成基础的wal&snapshot写入,导致整体集群异常
2.2 编辑脚本
保存如下命令到脚本/data/start.sh,用于搭建etcd集群
代码如下(示例):
#! /bin/sh
name="etcd1"
host="192.168.92.128"
cluster="etcd1=http://192.168.92.128:2380,etcd2=http://192.168.92.129:2380,etcd3=http://192.168.92.130:2380"
docker run -d -p 2379:2379 -p 2380:2380 -v /data/etcd:/etcd-data/ --name $name --net=host quay.io/coreos/etcd:v3.5.0 /usr/local/bin/etcd --name $name --data-dir /data/etcd/data --listen-client-urls http://$host:2379 --advertise-client-urls http://$host:2379 --listen-peer-urls http://$host:2380 --initial-advertise-peer-urls http://$host:2380 --initial-cluster $cluster --initial-cluster-token tkn --initial-cluster-state new --log-level info --logger zap --log-outputs stderr
说明:分别在不同机器部署时,分别替换脚本中的host和name即可。
2.3 执行部署
分别在3个节点上,编辑和调整完脚本的host、name配置后,执行bash /data/start.sh命令,创建etcd集群。
三、结果验证
任意选一个节点,执行如下命令,进行集群验证,验证是否已经搭建完成。
代码如下(示例):
export ETCDCTL_API=3
export ETCD_ENDPOINTS=192.168.92.128:2379,192.168.92.129:2379,192.168.92.130:2379
/usr/local/bin/etcdctl --endpoints=192.168.92.128:2379 --write-out=table member list
/usr/local/bin/etcdctl --endpoints=$ETCD_ENDPOINTS --write-out=table endpoint status
注意 member list是记录整个集群中的所有节点信息。并不能反应集群当前的运行状态
endopont status是反应当前集群的运行状态,需要有Leader节点,并且datasize不为0,则说明集群搭建正常
总结
如果单机节点运行bash /data/start.sh
后,可以通过执行docker ps -a|grep etcd
验证容器是否创建。并通过docker logs ${dockerid}
的方法查看日志
参考