etcd-1:部署etcd集群

2021-10-18 18:04:53 浏览数 (1)

目录

(1).下载

(2).etcd配置文件与启动

1.etcd启动参数说明

2.启动脚本模版

3.启动etcd集群

(3).验证etcd集群

(4).参考资料

一共3台机器。每台机器都需要按照如下步骤进行。

每台机器部署一个etcd实例:etcd-master1、etcd-master2、etcd-master3。

统一在用户app下操作,这是良好习惯。

(1).下载

下载页面:

https://github.com/etcd-io/etcd/releases

选择最新稳定版:3.5.0

wget https://github.com/etcd-io/etcd/releases/download/v3.5.0/etcd-v3.5.0-linux-amd64.tar.gz

mv etcd-v3.5.0-linux-amd64 etcd-v3.5.0

mv etcd-v3.5.0 /app/3rd

ln -s /app/3rd/etcd-v3.5.0/etcd /usr/local/bin/etcd

ln -s /app/3rd/etcd-v3.5.0/etcdctl /usr/local/bin/etcdctl

ln -s /app/3rd/etcd-v3.5.0/etcdutl /usr/local/bin/etcdutl

export PATH="$PATH:/usr/local/bin"

在root和app用户下都要执行:

source /etc/profile

(2).etcd配置文件与启动

1.etcd启动参数说明

nohup /usr/local/bin/etcd

#方便理解的节点名称,默认为 default,在集群中应该保持唯一,可以使用 hostname

--name=etcd-current-master-node-name

#节点与其他节点通信的地址,会通告给集群的其他成员。这个地址用来传输集群数据。因此这个地址必须是可以被集群中所有的成员访问http://ip:2380

--initial-advertise-peer-urls=http://etcd-current-master-node:2380

#和集群内其他节点通信的地址, http://ip:2380

--listen-peer-urls=http://etcd-current-master-node:2380

#节点与客户端通信的地址,比如 http://ip:2379,http://127.0.0.1:2379,客户端会连接到这里和 etcd 交互

--listen-client-urls=http://etcd-current-master-node:2379,http://127.0.0.1:2379

#对外通告的该节点客户端监听地址,http://ip:2379,这个值会通知集群中其他节点

--advertise-client-urls=http://etcd-current-master-node:2379

#创建集群的 token,这个值每个集群保持唯一。这样的话,如果你要重新创建集群,即使配置和之前一样,也会再次生成新的集群和节点 uuid;否则会导致多个集群之间的冲突,造成未知的错误

--initial-cluster-token=etcd-cluster-for-apisix

#集群中所有节点的信息,格式为 node1=http://ip1:2380,node2=http://ip2:2380,…。注意:这里的 node1 是节点的 --name 指定的名字;后面的 ip1:2380 是 --initial-advertise-peer-urls 指定的值

--initial-cluster=etcd-master0=http://etcd-master0-ip:2380,etcd-master1=http://etcd-master1-ip:2380,etcd-master2=http://etcd-master2-ip:2380

#新建集群的时候,这个值为 new;假如已经存在的集群,这个值为 existing

--initial-cluster-state=new

#服务运行数据保存的路径,默认为 ${name}.etcd

--data-dir=/app/data/etcd

#leader 多久发送一次心跳到 followers。默认值是 100ms

--heartbeat-interval=250

#重新投票的超时时间,如果 follow 在该时间间隔没有收到心跳包,会触发重新投票,默认为 1000 ms

--election-timeout=2000

--log-level='info'

--log-outputs='/app/logs/etcd/etcd.log'

--enable-log-rotation='true'

#fs.StringVar(&cfg.ec.LogRotationConfigJSON, "log-rotation-config-json", embed.DefaultLogRotationConfig, "Configures log rotation if enabled with a JSON logger config. Default: MaxSize=100(MB), MaxAge=0(days,no limit), MaxBackups=0(no limit), LocalTime=false(UTC), Compress=false(gzip)")

--log-rotation-config-json='{"maxsize": 100, "maxage": 7, "maxbackups": 7, "localtime": false, "compress": true}' >/dev/null 2>&1 &

etcd日志使用UTC时间。

2.启动脚本模版

注意要建立启动参数中提到的目录:

mkdir -p /var/lib/etcd

mkdir -p /app/data/etcd

mkdir -p /app/logs/etcd

否则会有问题。

启动脚本模版:

nohup /usr/local/bin/etcd --name=etcd-current-master-node-name --initial-advertise-peer-urls=http://etcd-current-master-node:2380 --listen-peer-urls=http://etcd-current-master-node:2380 --listen-client-urls=http://etcd-current-master-node:2379,http://127.0.0.1:2379 --advertise-client-urls=http://etcd-current-master-node:2379 --initial-cluster-token=etcd-cluster-for-apisix --initial-cluster=etcd-master0=http://etcd-master0-ip:2380,etcd-master1=http://etcd-master1-ip:2380,etcd-master2=http://etcd-master2-ip:2380 --initial-cluster-state=new --data-dir=/app/data/etcd --heartbeat-interval=250 --election-timeout=2000 --log-level='info' --log-outputs='/app/logs/etcd/etcd.log' --enable-log-rotation='true' --log-rotation-config-json='{"maxsize": 100, "maxage": 7, "maxbackups": 7, "localtime": false, "compress": true}' >/dev/null 2>&1 &

master0需要替换的字符:apisix-user-cluster-1是master0

:%s/etcd-current-master-node-name/etcd-master0/g

:%s/etcd-current-master-node/0内网IP/g

:%s/etcd-master0-ip/0内网IP/g

:%s/etcd-master1-ip/1内网IP/g

:%s/etcd-master2-ip/2内网IP/g

master1需要替换的字符:apisix-user-cluster-2是master1

:%s/etcd-current-master-node-name/etcd-master1/g

:%s/etcd-current-master-node/1内网IP/g

:%s/etcd-master0-ip/0内网IP/g

:%s/etcd-master1-ip/1内网IP/g

:%s/etcd-master2-ip/2内网IP/g

master2需要替换的字符:apisix-market-cluster-1是master2

:%s/etcd-current-master-node-name/etcd-master2/g

:%s/etcd-current-master-node/2内网IP/g

:%s/etcd-master0-ip/0内网IP/g

:%s/etcd-master1-ip/1内网IP/g

:%s/etcd-master2-ip/2内网IP/g

验证是否都修改:

grep -i master start.sh

只命中4个。

3.启动etcd集群

启动脚本:start.sh

(3).验证etcd集群

查看集群节点:

etcdctl member list -w table

都不是learner节点就对了(learner节点不参与投票选举)。

但是我们还需要确认leader情况:

etcdctl -w table --endpoints=etcd0:2379,etcd1:2379,etcd2:2379 endpoint status

leader正常。

或者直接使用:这样不用写--endpoints

etcdctl endpoint status --cluster -w table

再查看一下健康情况:

etcdctl endpoint health --cluster -w table

(4).参考资料

1.Clustering Guide

https://etcd.io/docs/v3.5/op-guide/clustering/

2.快速搭建高可用 ETCD 集群

https://mp.weixin.qq.com/s/HLSh6iknGvsSWYb9p1I-kg

3.Etcd 的分布式一致性详解

https://fuckcloudnative.io/posts/etcd-server-learner/

0 人点赞