3.5.9
,当前服务器芯片为 x86,安装包为:etcd-3.5.9-amd64.tar.gz
,对于 ARM64 环境请安装带 aarch64
标识的版本。注意 etcd 服务个数应该为奇数个,每个服务都对应不同的节点,为了保证高可用性最少为3个(允许1个节点故障),在大型的生产环境通常会配置5个节点(允许2个节点故障),例如在停掉其中1个节点维护的同时,还可以允许再有1个节点故障。
10.0.1.21 ec1
10.0.1.22 ec2
10.0.1.23 ec3
/data/etcd
我们首先需要在每个机器上进行安装,然后再修改配置,最后修改完成后启动服务。
# 在所有节点上执行安装
tar -xvzf etcd-3.5.9-amd64.tar.gz
cd etcd-3.5.9-amd64
./install.sh
安装好之后我们需要为所有的节点都创建数据目录:
mkdir -p /data/etcd
查看 etcd 版本:
etcd --version
这样 etcd 就安装到所有节点的系统上了,接下来我们开始配置。
我们挨个节点对配置进行修改,因为每个节点的配置都需要和当前的节点 IP 相关,所以配置不能直接同步。
我们首先生成一个集群 UUID 用于集群的初始化隔离:
uuidgen
# 没有上面命令也可以使用内核提供的 UUID 生成器
cat /proc/sys/kernel/random/uuid
假如现在生成的 UUID 是:fba89b9c-52c9-48d2-a9a8-9a12c975d32c
,这个 UUID 我们待会要填写到配置文件中,并且整个集群都要保持一致。
执行完上面的安装后会自动生成配置文件 /etc/etcd/etcd.yml
,然后我们编辑配置文件内容如下:
# This is the configuration file for the etcd server.
# Human-readable name for this member.
name: 'ec1'
# Path to the data directory.
data-dir: /data/etcd
# List of comma separated URLs to listen on for peer traffic.
listen-peer-urls: http://10.0.1.21:2380
# List of comma separated URLs to listen on for client traffic.
listen-client-urls: http://10.0.1.21:2379
# List of this member's peer URLs to advertise to the rest of the cluster.
# The URLs needed to be a comma-separated list.
initial-advertise-peer-urls: http://10.0.1.21:2380
# List of this member's client URLs to advertise to the public.
# The URLs needed to be a comma-separated list.
advertise-client-urls: http://10.0.1.21:2379
# Comma separated string of initial cluster configuration for bootstrapping.
# Example: initial-cluster: "infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380"
initial-cluster: "ec1=http://10.0.1.21:2380,ec2=http://10.0.1.22:2380,ec3=http://10.0.1.23:2380"
# Initial cluster token for the etcd cluster during bootstrap.
initial-cluster-token: 'fba89b9c-52c9-48d2-a9a8-9a12c975d32c'
# Initial cluster state ('new' or 'existing').
initial-cluster-state: 'new'
# Enable debug-level logging for etcd.
#log-level: debug
简单解释下配置项的内容:
new
,如果是加入已经存在的集群需要填写 existing
修改无误后保存配置,然后剩余的节点也都修改一下,主要是修改主机名和 IP 的值,配置比较简单,具体就不再详细叙述了,所有节点修改完就配置完毕了。
在所有节点上依次启动 etcd 服务:
# 所有节点都需要执行
systemctl start etcd.service
# 查看运行状态
systemctl status etcd.service
启动之后可以查看集群节点的状态:
etcdctl --write-out=table --endpoints=ec1:2379,ec2:2379,ec3:2379 endpoint status
可以看到每个节点的情况,比如 ID、数据库大小等,比如 IS_LEADER 这一栏表示领导者,我们这里有一个是领导者值为 true,其余的都是 false。
还可以查看集群健康情况:
etcdctl --endpoints=ec1:2379,ec2:2379,ec3:2379 endpoint health
查看成员列表:
etcdctl --write-out=table --endpoints=ec1:2379,ec2:2379,ec3:2379 member list
这样可以看到每个节点成员的访问地址、状态等信息。
Reference: