1. 概念介绍
etcd
是 CoreOS
团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。 etcd
内部采用raft协议作为一致性算法,etcd
基于 Go语言
实现。
特点如下:
- 简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
- 安全:支持SSL证书验证
- 快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作
- 可靠:采用raft算法,实现分布式系统数据的可用性和一致性
- 开源:etcd项目地址:https://github.com/coreos/etcd/
2. 环境准备
此处安装,是利用下载的 etcd
源文件,利用 docker build
构建完整镜像,具体操作如下:
2.1. 新建文件夹
在磁盘某个路径下新建一个文件夹,用处操作 Dockerfile 和 源文件。
演示中的路径在 /data/docker-compose/etcd
,如特殊说明,否则都在此路径,以下简称 ETCD_HOME
2.2. 下载
在 ETCD_HOME
中下载最新版本,官方下载地址如下: wget https://github.com/etcd-io/etcd/releases/download/v3.4.20/etcd-v3.4.20-linux-amd64.tar.gz
2.3. 文件解压
解压文件 tar.gz
得到 etcd-v3.4.20-linux-amd64
文件夹。
tar -zxvf etcd-v3.4.20-linux-amd64.tar.gz
2.4. 文件拷贝
在 etcd-v3.4.20-linux-amd64
文件夹下,有 etcd
和 etcdctl
两个文件,拷贝至与 etcd-v3.4.20-linux-amd64
同一级。
cp etcd-v3.4.20-linux-amd64/etcd etcd-v3.4.20-linux-amd64/etcdctl .
最终目录结构如下
etcd\
|----------etcd-v3.4.20-linux-amd64
|----------etcd
|----------etcdctl
|----------etcd-v3.4.20-linux-amd64.tar.gz
3. 安装
3.1. Dockerfile编写
FROM alpine:latest
ADD etcd /usr/local/bin/
ADD etcdctl /usr/local/bin/
RUN mkdir -p /var/etcd/
RUN mkdir -p /var/lib/etcd/
RUN echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf
EXPOSE 2379 2380
CMD ["/usr/local/bin/etcd"]
3.2. 构建etcd镜像
docker build -t etcd .
构建过程可能会比较久,与本地环境有关系,耐心等待即可!
3.3. 查看构建etcd镜像
4. 启动
因为是开发环境,不做集群演示,仅单服务启动。
docker run -d -v /usr/share/ca-certificates/:/etc/ssl/certs -p 4001:4001 -p 2380:2380 -p 2379:2379 \
--name etcd etcd /usr/local/bin/etcd \
-name etcd0 \
-advertise-client-urls http://0.0.0.0:2379 \
-listen-client-urls http://0.0.0.0:2379 \
-initial-advertise-peer-urls http://0.0.0.0:2380 \
-listen-peer-urls http://0.0.0.0:2380 \
-initial-cluster-token etcd-cluster-1 \
-initial-cluster etcd0=http://0.0.0.0:2380 \
-initial-cluster-state new
- name: 节点名称
- advertise-client-urls: 知客户端url, 也就是服务的url
- initial-advertise-peer-urls: 告知集群其他节点url
- listen-peer-urls: 监听URL,用于与其他节点通讯
- initial-cluster-token: 集群的ID
- initial-cluster: 集群中所有节点
5. 验证
为了方便可视化,此处验证服务,我用了 ETCD 可视化工具,etcd-manager
。