最近一直在学习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
代码语言:javascript复制systemctl stop firewalld
systemctl disable firewalld
安装方法 1 使用配置文件的方法
在三台服务器中的 /etc/目录下建立etcd.conf 或者 etcd,yml 问题文件并将下面的内容粘贴到每个服务器的文件中,这里注意标注粗体的在每个服务器上都不一样。
代码语言:javascript复制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
代码语言:javascript复制 etcd --config-file /etc/etcd.conf > /wal/etcd1.log 2>&1 &
启动后可以从三个节点中,找到哪个是leader
这是第一种简易的安装方法,这个方法好的地方是安装简单方便,但不好的地方是每次启动和关闭都比较麻烦。
下面是第二种安装的方法, 这个方法本身是通过service中的配置进行的,加粗的地方是需要根据服务器的状态进行变化的
代码语言:javascript复制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
代码语言:javascript复制sudo systemctl daemon-reload
sudo systemctl enable etcd
sudo systemctl start etcd
同样ETCD 也可以被启动和运行。