1. 二进制文件安装
1.1 脚本安装
linux /mac-os系统脚本如下:
修改对应的ETCD_VER 和 OUTPUT_DIR参数来指定下载的版本和对应的安装路径
#!/bin/bash
# etcd 安装的脚本
ETCD_VER=v3.5.2
GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
# etcd 安装的目录
OUTPUT_DIR=/root/etcd
rm -f ${OUTPUT_DIR}/${ETCD_VER}-linux-amd64.tar.gz
mkdir -p ${OUTPUT_DIR}
curl -L ${GITHUB_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o ${OUTPUT_DIR}/${ETCD_VER}-linux-amd64.tar.gz
tar -xzvf ${OUTPUT_DIR}/${ETCD_VER}-linux-amd64.tar.gz -C ${OUTPUT_DIR}
rm -f ${OUTPUT_DIR}/${ETCD_VER}-linux-amd64.tar.gz
1.2 验证
打开之前指定的安装目录
[root@iZuf6g3hri8hvnuqng6id7Z etcd] cd /root/etcd
[root@iZuf6g3hri8hvnuqng6id7Z etcd] ls
etcd-v3.5.2-linux-amd64
etcd-v3.5.2-linux-amd64 这个包就是对应的etcd 解压后的安装包,里面包括如下的文件:
Documentation etcd etcdctl etcdutl README-etcdctl.md README-etcdutl.md README.md READMEv2-etcdctl.md
其中etcd 文件就是server 启动服务,etcdctl 对应的客户端服务
查看server 端client 版本
# 服务端
[root@iZuf6g3hri8hvnuqng6id7Z etcd-v3.5.2-linux-amd64] ./etcd --version
etcd Version: 3.5.2
Git SHA: 99018a77b
Go Version: go1.16.3
Go OS/Arch: linux/amd64
#客户端
[root@iZuf6g3hri8hvnuqng6id7Z etcd-v3.5.2-linux-amd64] ./etcdctl version
etcdctl version: 3.5.2
API version: 3.5
将etcd 设置环境变量,方便以后的直接使用
在家目录下 打开.bashrc文件,在末尾添加如下
# ETCD_HOME 对应的etcd 所在的路径
export ETCD_HOME=/root/etcd/etcd-v3.5.2-linux-amd64
export PATH=$PATH:$ETCD_HOME
添加完成后:
source .bashrc
此时不需要在etcd 的路径下就可直接使用etcd 命令
2. 集群(以命令行参数启动)
集群的启动方式:
- 静态启动
- etcd动态发现
- DNS动态发现
参考: https://etcd.io/docs/v3.5/op-guide/clustering/
参数解析:
参数名 | 含义 |
---|---|
name | 集群中的节点名称,集群内唯一 |
data-dir | 指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群初始化配置,Snapshot文件,若未指定-wal-dir,还会存储WAL文件;如果不指定会用缺省目录 |
listen-client-urls | 监听用于客户端通信的url,可以监听多个 |
advertise-client-urls | 建议使用的客户端通信url,客户端该url 与etcd 节点通信 |
listen-peer-urls | 监听用于etcd 节点间通信的url,可以监听多个 |
initial-advertise-peer-urls | 建议用于集群中各节点间通信的url |
initial-cluster-token | 用于区分不同集群。本地如有多个集群要设为不同 |
initial-cluster | 描述集群中所有节点的信息,集群间节点通过此信息与其他节点通信 |
initial-cluster-state | 用于指示本次是否为新建集群。有两个取值new和existing |
wal-dir | 存放预写式日志,最大的作用是记录了整个数据变化的全部历程。默认共用data-dir文件所在目录 |
snapshot-count | 数据快照触发数量,etcd处理指定的次数的事务提交后,生产数据快照,默认100000 |
discovery | 集群发现服务地址 |
enable-pprof | |
logger | |
log-outputs |
详细参数配置参考:https://etcd.io/docs/v3.5/op-guide/configuration/
2.1 静态启动
以单机多节点为例, 在一台服务器启动三个etcd 服务组成集群
hostName | IP | 客户端交互端口 | 节点间交互端口 |
---|---|---|---|
test1 | 127.0.0.1 | 12379 | 12380 |
tes2 | 127.0.0.1 | 22379 | 22380 |
test3 | 127.0.0.1 | 32379 | 32380 |
节点1
# 节点1 (test1)
etcd --name test1 --data-dir /root/etcd/node1/data --listen-client-urls http://127.0.0.1:12379 --advertise-client-urls http://127.0.0.1:12379 --listen-peer-urls http://127.0.0.1:12380 --initial-advertise-peer-urls http://127.0.0.1:12380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'test1=http://127.0.0.1:12380,test2=http://127.0.0.1:22380,test3=http://127.0.0.1:32380' --initial-cluster-state new
节点2
# 节点2(test2)
etcd --name test2 --data-dir /root/etcd/node2/data --listen-client-urls http://127.0.0.1:22379 --advertise-client-urls http://127.0.0.1:22379 --listen-peer-urls http://127.0.0.1:22380 --initial-advertise-peer-urls http://127.0.0.1:22380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'test1=http://127.0.0.1:12380,test2=http://127.0.0.1:22380,test3=http://127.0.0.1:32380' --initial-cluster-state new
节点3
# 节点3(test3)
etcd --name test3 --data-dir /root/etcd/node3/data --listen-client-urls http://127.0.0.1:32379 --advertise-client-urls http://127.0.0.1:32379 --listen-peer-urls http://127.0.0.1:32380 --initial-advertise-peer-urls http://127.0.0.1:32380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'test1=http://127.0.0.1:12380,test2=http://127.0.0.1:22380,test3=http://127.0.0.1:32380' --initial-cluster-state new
2.2 etcd动态发现模式(etcd-discovery)
etcd提供了多种部署集群的方式,在通过静态发现方式部署etcd集群我们介绍了如何通过静态发现方式部署集群。
不过很多时候,你只知道你要搭建一个多大(包含多少节点)的集群,但是并不能事先知道这几个节点的ip,从而无法使用--initial-cluster
参数。
这个时候,你就需要使用discovery的方式来搭建etcd集群。discovery方式有两种:etcd discovery
和DNS discovery
2.2.1 etcd discovery
这种启动方式依赖另外一个ETCD集群,在该集群中创建一个目录,并在该目录中创建一个_config的子目录,并且在该子目录中增加一个size节点,指定集群的节点数目。在这种情况下,将该目录在ETCD中的URL作为节点的启动参数,即可完成集群启动。
etcd discovery集群方式分为两种:自定义的etcd discovery
和公共 etcd discovery
公共的discovery就是通过CoreOS提供的公共discovery服务申请token
自定义etcd discovery
这种方式就是利用一个已有的etcd集群来提供discovery服务,从而搭建一个新的etcd集群。
假设已有的etcd集群的一个访问地址http://192.168.2.210:2379,那么我们首先需要在已有etcd中创建一个特殊的key,方法如下
curl http://192.168.2.210:2379/v2/keys/discovery/8ebee6723eaf3f5c7724e879f8797e85/_config/size -d value=3
{"action":"create","node":{"key":"/discovery/8ebee6723eaf3f5c7724e879f8797e85/_config/size/00000000000000000011","value":"3","modifiedIndex":11,"createdIndex":11}}
其中value=3表示本集群的大小,即: 有多少集群节点。而 8ebee6723eaf3f5c7724e879f8797e85就是用来做discovery的token, 可通过uuidgen
指令生成uuid 作为token。
此时对应的discovery url为:http://192.168.2.210:2379/v2/keys/discovery/8ebee6723eaf3f5c7724e879f8797e85
值得注意的是:如果实际启动的etcd节点个数大于discovery token创建时指定的size,多余的节点会自动变为proxy节点,作为反向代理把客户的请求转发给可用的etcd集群,新节点加入集群如果核心节点数已满足要求,则自动转化为proxy模式,此项不会在节点不足时逆向转化为实际节点
公共 etcd discovery
如果没有搭建好的etcd集群用于注册和发现,
可使用etcd公有服务来进行服务注册发现。公有etcd服务上创建用于发现的url为:
curl https://discovery.etcd.io/new?size=3
来获取对应的discovery url,其中size 就是集群的大小:
https://discovery.etcd.io/a6a292c79fff6d25ef09243e3dfd2043
启动节点
在每个节点的配置参数添加discover 并设置该参数为上述两种的discovery url之一,删除 initial-cluster-token, initial-cluster initial-cluster-state new 参数即可
节点1
etcd --name test1 --data-dir /root/etcd/node1/data --listen-client-urls http://127.0.0.1:12379 --advertise-client-urls http://127.0.0.1:12379 --listen-peer-urls http://127.0.0.1:12380 --discovery https://discovery.etcd.io/a6a292c79fff6d25ef09243e3dfd2043
节点2
etcd --name test2 --data-dir /root/etcd/node2/data --listen-client-urls http://127.0.0.1:22379 --advertise-client-urls http://127.0.0.1:22379 --listen-peer-urls http://127.0.0.1:22380 --discovery https://discovery.etcd.io/a6a292c79fff6d25ef09243e3dfd2043
节点3
etcd --name test3 --data-dir /root/etcd/node3/data --listen-client-urls http://127.0.0.1:32379 --advertise-client-urls http://127.0.0.1:32379 --listen-peer-urls http://127.0.0.1:32380 --initial-advertise-peer-urls http://127.0.0.1:32380 --discovery https://discovery.etcd.io/a6a292c79fff6d25ef09243e3dfd2043
2.2.2 DNS discovery
//todo
参考https://www.hi-linux.com/posts/55447.html
3. 查看集群状态
参考https://www.jianshu.com/p/67cbef492812