暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Etcd 快速搭建一个 etcd 集群的两个方法

AustinDatabases 2022-02-08
2373

最近一直在学习ETCD,搭建一个快速的学习环境是最重要的,官方给了一些搭建的方法,通过git 的方式。这边没有采用,还是使用传统的老的方法。

下载已经编译好的文件,直接放到3台虚拟机中的LINUX 中的 /usr/local/etcd 目录中, 并建立/data  数据和日志存储的目录


本身etcd 的执行文件由三个文件组成,etcd  etcdctl  etcdutl, 老的ETCD 版本只有两个文件,服务执行文件 etcd 和 客户端文件 etcdutl ,这边新的版本添加了 etcdutl 其中部分功能代替了 etcdctl 的部分功能。


目前ETCD 支持两个版本 V2  V3  ,V2 提供的是纯内存的方式进行数据存储,V3 采用的方法是对数据持久化的数据存储方式。


这边先跳过ETCD 以及分布式的原理,先来简单的部署一个ETCD的3节点的集群。将从ETCD 官方网站上下载的文件都放到/usr/local/etcd/中后,就需要对ETCD的数据目录,以及日志目录,和配置文件进行设置。


这边以ETCD 3.5 为基础,一下是配置文件中的配置项,当然也可以将这些配置项写到执行命令的参数中。


name: 每个ETCD都有自己的节点名字,这个与节点初始化有关,在给定名字后尽量就不要在修改了,一般以主机名,同一个集群中的节点名字不要重复。

 绑定的变量为  ETCD_NAME


data-dir: 数据目录,ETCD 自V3后数据是存储在物理磁盘上的,所以需要设置ETCD的数据目录


wal-dir:这个指的是ETCD的日志存储的目录 ,数据是定期刷到磁盘上的,但保证数据在单点的数据安全性,就需要与传统数据库一样,将数据的操作在写入的时刻,用日志的方式写到磁盘介质。


snapshot-count :这里是的是写入多少数据这里以transaction作为触发的单位,达到一定程度后,就直接触发将数据写到磁盘上,这里默认的值为100000


heartbeat-interval 在集群中多个节点要判断对方是否正常就需要定期的发送心跳,通过心跳来证明自己或对方节点的是否在线,心跳这里默认值是100 单位毫秒


election-timeout  在集群中当主节点失效后,就会存在一个问题,从新选举出来一个主节点失败后的超时时间。


initial-election-tick-advance  提高选举的初始化的速度,默认为true,在跨数据中心的初始化选举中,如果默认为true则会降低整体的分布式数据中心的选择过程


listen-peer-urls  listen-peer-urls 相当于监听地址


listen-client-urls  监听客户访问的地址,这个与上面的地址不能一样,一般以端口号进行分割


max-snapshots 保留snapshot 文件的数量默认为5个


initial-advertise-peer-urls     在集群中自己标明的访问地址


initial-cluster    这里写清楚集群中的每个节点的地址


initial-cluster-state   初始化集群的状态,如果是第一次状态都设置为NEW


initial-cluster-token 初始etcd集群的令牌


advertise-client-usrls 通告给其他客户端的集群的服务地址


基本上初次搭建ETCD 使用上面的配置就已经足够了


这里确认关闭防火墙,设置好selinux 

systemctl stop firewalld
systemctl disable firewalld


安装方法  1   使用配置文件的方法

在三台服务器中的 /etc/目录下建立etcd.conf 或者 etcd,yml 问题文件并将下面的内容粘贴到每个服务器的文件中,这里注意标注粗体的在每个服务器上都不一样。


name: 'etcd2'

data-dir: '/data'

wal-log: '/wal'

snapshot-count: 10000

heartbeat-interval: 100

election-timeout: 1000

listen-peer-urls: 'http://192.168.198.101:2380'

listen-client-urls: 'http://192.168.198.101:2379'

max-snapshots: 5

max-wals: 5

cors:

initial-advertise-peer-urls: 'http://192.168.198.101:2380'

advertise-client-urls: 'http://192.168.198.101:2379'

initial-cluster: 'etcd1=http://192.168.198.100:2380,etcd2=http://192.168.198.101:2380,etcd3=http://192.168.198.102:2380'

initial-cluster-token: 'etcd'

initial-cluster-state: 'new'

strict-reconfig-check: false

enable-v2: true

enable-pprof: true

debug: false

logger: zap

log-outputs: [stderr]

~                         

然后直接在每个机器上执行ETCD 命令启动ETCD 

 etcd --config-file /etc/etcd.conf > /wal/etcd1.log 2>&1 &


启动后可以从三个节点中,找到哪个是leader


这是第一种简易的安装方法,这个方法好的地方是安装简单方便,但不好的地方是每次启动和关闭都比较麻烦。


下面是第二种安装的方法, 这个方法本身是通过service中的配置进行的,加粗的地方是需要根据服务器的状态进行变化的


cat << EOF > /lib/systemd/system/etcd.service

[Unit]

Description=etcd service

Documentation=https://github.com/coreos/etcd

 

[Service]

User=root

Type=notify

ExecStart=/usr/local/etcd \\

 --name etcd-3 \\

 --data-dir /data \\

 --initial-advertise-peer-urls http://192.168.198.102:2380 \\

 --listen-peer-urls http://192.168.198.102:2380 \\

 --listen-client-urls http://192.168.198.102:2379,http://127.0.0.1:2379 \\

 --advertise-client-urls http://192.168.198.102:2379 \\

 --initial-cluster-token etcd-cluster \\

 --initial-cluster etcd-1=http://192.168.198.100:2380,etcd-2=http://192.168.198.101:2380,etcd-3=http://192.168.198.102:2380 \\

 --initial-cluster-state new \\

 --heartbeat-interval 1000 \\

 --election-timeout 5000

Restart=on-failure

RestartSec=5

 

[Install]

WantedBy=multi-user.target

EOF


通过将这些服务注册到系统中,打开ETCD

sudo systemctl daemon-reload

sudo systemctl enable etcd

sudo systemctl start etcd


同样ETCD 也可以被启动和运行。





文章转载自AustinDatabases,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论