etcd集群有两种启动方式 — 静态配置、服务发现。其中服务发现又包含etcd自发现和DNS自发现两种模式,本文首先简单介绍一下这两种集群启动方式,然后以静态配置为例,进行实践,讲解etcd集群的部署过程。
etcd集群的部署方式
1. 静态配置
比较适用于线下环境,集群节点个数已知,各节点地址也已知的情况。一旦集群启动后,后续“--initial-cluster”参数的更新将会被忽略。
同一个集群各个节点的配置参数需要保持相同。
2. 服务发现
(1)etcd自发现模式
新集群的每个etcd节点通过现有的etcd集群进行自注册,一旦所有的member都注册完成,就组成了一个新集群。
新集群节点启动时使用参数 --discovery 指定服务发现URL,这个URL可以是你自己现有的etcd集群节点地址,也可以使用etcd公共的服务发现,但首先需要先设置集群的节点数量。以etcd公共的服务发现为例,设置集群大小为3:
curl https://discovery.etcd.io/new?size=3
此请求会返回一个服务发现URL,假设其为:https://discovery.etcd.io/cce153802aeb2adc70eb142c2e5ccf92,则新集群节点启动设置参数为:
--discovery https://discovery.etcd.io/cce153802aeb2adc70eb142c2e5ccf92
另外,同一个集群的每个节点都必须使用参数 --name 设置一个唯一标识自己的名称,否则服务发现会因为重名而失败。
(3)DNS自发现模式
etcd还支持使用DNS的SRV记录进行服务发现,启动集群。此方式需要先在DNS服务器上进行相应的配置,然后在etcd集群节点启动时使用参数 --discovery-srv 指定DNS服务器域名。
静态配置部署etcd集群
接下来使用静态配置的方式进行实践,部署一个三节点的etcd集群。三个节点名称与ip分别如下:
etcd01:192.168.3.102
etcd02:192.168.3.105
etcd03:192.168.3.103
对每个节点都按如下步骤进行部署。
1. 下载安装包
这里下载最新版本:v3.5.0
2. 解压
tar -zxvf etcd-v3.5.0-linux-amd64.tar.gz
解压后将文件夹改名为 etcd,放在 /usr/local/ 目录下。
3. 创建数据存储目录
mkdir /usr/local/etcd/data
解压后将文件夹改名为 etcd,放在 /usr/local/ 目录下。
4. 设置配置文件
创建配置文件 /usr/local/etcd/conf.yml,三个节点配置文件内容分别如下:
(1)etcd01:192.168.3.102
name: etcd01
data-dir: /usr/local/etcd/data
initial-advertise-peer-urls: http://192.168.3.102:2380
listen-peer-urls: http://192.168.3.102:2380
listen-client-urls: http://192.168.3.102:2379,http://127.0.0.1:2379
advertise-client-urls: http://192.168.3.102:2379
initial-cluster-token: shiajun-etcd-cluster
initial-cluster: etcd01=http://192.168.3.102:2380,etcd02=http://192.168.3.105:2380,etcd03=http://192.168.3.103:2380
initial-cluster-state: new
(2)etcd02:192.168.3.105
name: etcd02
data-dir: /usr/local/etcd/data
initial-advertise-peer-urls: http://192.168.3.105:2380
listen-peer-urls: http://192.168.3.105:2380
listen-client-urls: http://192.168.3.105:2379,http://127.0.0.1:2379
advertise-client-urls: http://192.168.3.105:2379
initial-cluster-token: shiajun-etcd-cluster
initial-cluster: etcd01=http://192.168.3.102:2380,etcd02=http://192.168.3.105:2380,etcd03=http://192.168.3.103:2380
initial-cluster-state: new
(3)etcd03:192.168.3.103
name: etcd03
data-dir: /usr/local/etcd/data
initial-advertise-peer-urls: http://192.168.3.103:2380
listen-peer-urls: http://192.168.3.103:2380
listen-client-urls: http://192.168.3.103:2379,http://127.0.0.1:2379
advertise-client-urls: http://192.168.3.103:2379
initial-cluster-token: shiajun-etcd-cluster
initial-cluster: etcd01=http://192.168.3.102:2380,etcd02=http://192.168.3.105:2380,etcd03=http://192.168.3.103:2380
initial-cluster-state: new
配置参数解析:
name:当前etcd节点名称。
data-dir:数据存储目录。
initial-advertise-peer-urls:集群的其他节点通过该地址与当前节点通信。
listen-peer-urls:当前节点通过该地址监听集群其他节点发送的信息。
listen-client-urls:当前节点通过该地址监听客户端发送的信息。
advertise-client-urls:客户端通过该地址与当前节点通信
initial-cluster-token:用于区分不同的集群,同一集群的所有节点配置相同的值。
initial-cluster:当前集群的所有节点信息,当前节点根据此信息与其他节点取得联系。
initial-cluster-state: 本次是否为新建集群,有两个取值:new和existing。
5. 开放端口
etcd server默认使用2379端口监听客户端的请求,使用2380端口监听其他server的请求。本文配置使用的也是2379和2380两个端口。
(1)开放 2379 和 2380 两个端口:
firewall-cmd --zone=public --add-port=2379/tcp --permanent
firewall-cmd --zone=public --add-port=2380/tcp --permanent
(2)重启防火墙:
firewall-cmd --reload
(3)验证端口是否开放成功:
firewall-cmd --zone=public --query-port=2379/tcp
firewall-cmd --zone=public --query-port=2380/tcp
6. 配置服务
(1)创建服务配置文件 /usr/lib/systemd/system/etcd.service,内容如下:
[Unit]
Description=etcd
After=network.target
[Service]
Type=notify
ExecStart=/usr/local/etcd/etcd --config-file=/usr/local/etcd/conf.yml
[Install]
WantedBy=multi-user.target
(2)启动服务:
systemctl daemon-reload
systemctl start etcd.service
(3)查看服务是否启动成功:
systemctl status etcd.service
(4)设置服务为开机自启动:
systemctl enable etcd.service
7. 验证
(1)将 etcdctl 二进制文件复制到 /usr/local/bin/ 目录下,方便执行命令:
cp /usr/local/etcd/etcdctl /usr/local/bin/
(2)查看集群成员列表:
(3)查看集群成员健康情况:
(4)查看etcd版本
可使用 etcd 二进制进行查看,也可执行 etcdctl 进行查看,其中etcd二进制支持离线查看。
(5)在其中一个节点设置一个key-value,到其他节点查看。
8. 开启鉴权
(1)添加root用户
在开启鉴权之前必须先创建root用户,否则无法启用身份认证功能。
etcd默认创建root用户时即创建了root角色,并为其绑定了该角色,该角色拥有所有权限。
(2)开启鉴权
(3)验证
开启鉴权后,客户端请求etcd server需要使用选项 --user 带上用户名和密码,否则会报错。