一、etcd介绍
etcd 是一个高度一致的分布式键值 (key-value) 存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以优雅地处理网络分区期间的领导者选举,即使在领导者节点中也可以容忍机器故障。
etcd 是用 Go 语言编写的,它具有出色的跨平台支持,小的二进制文件和强大的社区。 etcd 机器之间的通信通过 Raft 共识算法处理。
1.服务发现
服务发现要解决的也是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务,要如何才能找到对方并建立连接。
本质上来说,服务发现就是想要了解集群中是否有进程在监听 udp 或 tcp 端口,并且通过名字就可以查找和连接。
要解决服务发现的问题,需要有下面三大支柱,缺一不可 :
一个强一致性、高可用的服务存储目录。基于 Raft 算法的 etcd 天生就是这样一个强一致性高可用的服务存储目录。
一种注册服务和监控服务健康状态的机制。用户可以在 etcd 中注册服务,并且对注册的服务设置 key TTL ,定时保持服务的心跳以达到监控健康状态的效果。
一种查找和连接服务的机制。通过在 etcd 指定的主题下注册的服务也能在对应的主题下查找到。为了确保连接,我们可以在每个服务机器上都部署一个 Proxy 模式的 etcd ,这样就可
以确保能访问 etcd 集群的服务都能互相连接.

2.Raft选举算法
集群一般是由两个或两个以上的服务器组建而成,每个服务器都是一个节点。数据库集群、管理集群 ... 数据库集群提供了读写功能,管理集群提供了管理、故障恢复等功能。
对于一个集群来说,多个节点的协同和管理是非常重要的。而主节点则实现了协同和管理,主节点的存在,就可以保证其他节点的有序运行,以及数据库集群中的写入数据在每个节点上的一致性。
这里的一致性是指,数据在每个集群节点中都是一样的,不存在不同的情况。分布式选举的作用就是选出一个主节点,由它来协调和管理其他节点,以保证集群有序运行和节点间数据的一致性。
Raft 算法是典型的多数派投票选举算法,其选举机制与我们日常生活中的民主投票机制类似,核心思想是 “ 少数服从多数 ” 。
也就是说, Raft 算法中,获得投票最多的节点成为主节点。
采用 Raft 算法选举,集群节点的角色有 3 种:
①Leader: 即主节点,同一时刻只有一个 Leader ,负责协调和管理其他节点;
②Candidate: 即候选者,每一个节点都可以成为 Candidate ,节点在该角色下才可以被选为新的 Leader ;
③Follower: Leader 的跟随者,不可以发起选举。
Raft 选举的流程,可以分为以下几步:
1. 初始化时,所有节点均为 Follower 状态。
2. 开始选主时,所有节点的状态由 Follower 转化为 Candidate ,并向其他节点发送选举请求。
3. 其他节点根据接收到的选举请求的先后顺序,回复是否同意成为主。这里需要注意的是,在每一轮选举中,一个节点只能投出一张票。
4. 若发起选举请求的节点获得超过一半的投票,则成为主节点,其状态转化为 Leader ,其他节点的状态则由 Candidate 降为 Follower 。 Leader 节点与 Follower 节点之间会定期发送
心跳包,以检测主节点是否活着。
5. 当 Leader 节点的任期到了,即发现其他服务器开始下一轮选主周期时, Leader 节点的状态由 Leader 降级为 Follower ,进入新一轮选主
二、etcd术语

三、etcd安装(centos)
1.上传etcd安装包(网络下载太慢了)
tar -zxvf etcd-v3.4.3-linux-amd64.tar.gz
2.切换至etcd根目录,将etcd和etcdctl二进制文件复制到/usr/local/bin目录这样系统中可以直接调用etcd/etcdctl这两个程序
cp etcd etcdctl /usr/local/bin
3.查看etcd版本
etcd --version
4.输入命令etcd,即可启动一个单节点的etcd服务,ctrl+c即可停止服务
5.创建一个etcd服务
建立 etcd 相关目录 ( 即数据文件和配置文件的保存位置 )
mkdir - p / var / lib / etcd / && mkdir - p / etc / etcd /
创建 etcd 配置文件
vim / etc / etcd / etcd . conf
etcd . conf内容
# 节点名称
ETCD_NAME="etcd0"
# 指定数据文件存放位置
ETCD_DATA_DIR="/var/lib/etcd/"
创建 systemd 配置文件
vim / etc / systemd / system / etcd . service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
User=root
Type=notify
WorkingDirectory=/var/lib/etcd/
## 根据实际情况修改EnvironmentFile和ExecStart这两个参数值
## 1.EnvironmentFile即配置文件的位置,注意“-”不能少
EnvironmentFile=-/etc/etcd/etcd.conf
## 2.ExecStart即etcd启动程序位置
ExecStart=/usr/local/bin/etcd
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
启动 / 停止 / 查看 etcd 服务
systemctl daemon - reload && systemctl enable etcd && systemctl start etcd && systemctl status etcd
四、etcd的基本使用
1.帮助命令
etcdctl -h
2.put 放入数据
etcdctl put / testdir / testkey "Hello world"
-- sort 对结果进行排序
-- consistent 将请求发给主节点,保证获取内容的一致性
3.del 删除数据
清空数据
etcdctl del / -- prefix
删除所有 / test 前缀的节点
etcdctl del / test -- prefix
4.watch,监测一个键值的变化,一旦键值发生更新,就会输出最新的值并退出
etcdctl watch key1
本文详细介绍了etcd,一个基于Raft共识算法的高度一致性的分布式键值存储。etcd用于服务发现,通过强一致性、高可用的服务存储目录实现。同时,文章阐述了Raft选举算法的工作原理,解释了选举过程和节点角色。此外,还提供了etcd在CentOS上的安装步骤及基本使用方法。

被折叠的 条评论
为什么被折叠?



