文章目录

  • 前言
  • 一、环境信息
  • 二、搭建步骤
  • 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}的方法查看日志

参考