大家好,欢迎来到IT知识分享网。
一、etcd概要
1.etcd的简介
在做微服务集群开发时,有很多应用,有很多微服务上下游节点,它们本身需要很多存储配置文件,需要有一个地方来存储这些配置文件,因此诞生了etcd,它本质是为了微服务上下游服务去存储一些配置文件,在修改配置文件可以及时生效到上下游微服务,
etcd主要功能:监听时,省去监听资源的消耗,让监听资源放到其他工作资源上。它本身监听一个对象,在对象发生改变的时候弹出这个对象的变化
当你访问api server 和etcd时,本身它们就是支持curl访问API的,etcd本身支持TLS,SSL客户端的双向验证的非对称加密的双向证书验证的方式,数据可以使用https/http, 数据可靠性是使用raft算法保证一致性
2.etcd的主要功能
生产者在注册中心注册完就倒计时,如果数据不被及时更新,数据过了30s之后就自动失效了,就默认此服务不可以进行绑定了,然后当消费者去请求消息时,会看具有某一特定消息的对象值,绑定关系的稳定性由租约决定,如果过期了,消费者就会自动去找下一个具有相同值或者namespace、名称、属性相同的对象,监控是只要到期,服务就挂掉了;服务发现是作为注册之后,它的消费者会自动取etcd寻址对象,根据对象的属性去寻找
CAS:就是当你满足一定条件,然后对其数据做一些操作
3.使用场景
数据库有两种:数据格式工整(mysql),和不要求格式,直接更改yaml,代码频繁变动,数据库结构不固定,中间件etcd, redis
4.键值对存储

总结:存储时,可以是key-value(一个对应关系绑定另一个对应关系),也可以是对象名-对象,而一个字符串string必须绑定另一个字符串string
当这个对象发生变化时,etcd直接弹出一个值,就代表你要消费信息了 ,二叉树,左边存key,右边存value,根据索引查询对应的键值对
5.服务注册和发现
6.消息发布与订阅
本质:生产者和消费者建立了长连接
7.部署etcd
Releases · etcd-io/etcd · GitHub
在实例中,直接使用以下命令去启用etcd
服务调度优先级、服务访问优先级,对内采用peer端口进行通信,对外采用client端口通信
没搭k8s,可以用以下二进制进行搭建etcd

8.etcd练习


9.TTL能力(信息的生命周期)
给一个key设置一个有效期,到期后这个key就会被自动删除掉,这在很多分布式的锁的实现上会用到,可以保证所得实时有效性
10.CAS
判断键值是否符合规则,合规 才进行存储,不合规则不进行存储。当一个键过来时,首先判断,这时候已经有其他的键过来将同样的key占用了,人家数据比较新,但此时已经判断完成,所以把这个后面数据漏了,所以把旧的数据掩盖了,如果加锁,互斥锁,性能变低;乐观锁,容易导致数据落盘混乱错误,最好办法是拿的时候锁住,拿完之后解开
etcd的优点:判断和落盘是同时发生的,提高性能的同时,避免由于判断失误,导致落盘失误,得提前知道落盘的key是多少,才能设置
二、raft协议
1.理解raft
etcd内部有一个一致性模块,所有节点,不论是谁,先接触的消息,缓存完之后交给一致性模块处理,处理完之后,一致性模块做两个事情:第一在多个集群中,将你推送的key-value推送到集群中,同时会将日志信息放到日志模块中,然后日志模块中的信息达到一定水位线之后,push到状态机,在状态机中查看你是否落盘
raft算法三个基本角色:
follower、leader、candidate
其中所有节点默认处于follower状态,只有它接受不到leader请求的时候,才会变为candidate,candidate在发完投票,并且在获得投票之后,会给自己的tearm+1,从此变成一个leader,要么变成一个leader、要么没被选上变成一个follower
2.learner
leader就是把etcd往进加 member add –leader的时候,加进去之后,这个节点处于一个可读可写,但是不可参加选举的状态,知道他们里面的数据量和其他节点处于同步状态的时候,这样它才能成为一个正式的可被投票选举的状态,加入的时候以leader形式加,后面同步的时候再设置member
3.思考
三、etcd如何实现raft协议
1.选举方法
2.日志复制
当leader接收到ack之后,数据一致性模块中,收到的数据确认请求数+1, 这个数>n/2+1时,这个数就会被提交并且追加到本地磁盘中
3.安全性
term选举新的任期,必须包含前几个任期,如果不包含前几个任期,就不配成为新的任期
4.失效处理
5.wal日志
index是多数数据进行同步时,新的数据 进来会更新你的index信号,index属于一直递增的状态,通过index这个值去确定数据是否是最新的状态
etcd-dump-logs是将你的日志从你的存储目录中down下来
6.etcd v3存储机制,watch以及过期机制
图解:
当数据过来时,会进入一个kvstore,这会有个缓存, 缓存之后是其前端,后端是blotdb(谷歌开源数据库),往左边有一个watchablestore,它是用来将数据down下了之后,进行数据监控的,当数据发生变化后,watch是有感知的,然后它会将其变化的数据推送出去,数据要进行等待和验证,验证之后才会到blotdb,这个数据库可以换成任何一种开源的数据库
存储机制:

etcdctl –endpoint=xxxx:xx get /key1 -wjson
reversion概念
一个自增长的值,任何修改都会使得该值增加,当作数据修改的时候,会护法
事务机制
main revision
sub revision
7.etcd数据存储流程
限制包大小,就是限制提交yaml文件的大小 ,然后将数据丢到一致性模块中进行选主,如果是主,继续往下进行,如果不是主,存一条日志,然后返回,在下一次心跳的时候告诉master;确认是主的话,在同步日志的时候,会进行一个raft暂存,暂存之后,然后再日志模块中写入这条日志,选择x为3、y为1或者9,进行数据存储的暂存,同时如果你不是主,在暂存同时,要把这条消息发给leader,如果是主,发出的信息就是日志确认的信息;这条日志通过心跳发送出去,其他节点通过心跳回馈给你的leader,对这一类数据进行同步,一致性模块就会进行检查,是否通过多数选择,如果通过之后,通过MVCC模块会记录并存储这条数据,在内存中正式变更这条数据
过程:
8.etcd的数据一致性
9.watch的机制

10.etcd的相关操作

四、etcd的高可用集群理论
1.成员相关参数

2.安全相关参数
3.灾备
4.碎片整理
5.容量管理
出现alarm,etcd不可以在存储数据,需要进行处理,一般是进行碎片整理

五、etcd生产集群管理
1.高可用的etcd解决方案
基于bitnami安装etcd的高可用集群
每半个小时做snapshot,每半个小时做一个event
所有服务通过API server(冗余部署)去访问etcd,API server就是restserver,其里都是缓存机制
进行压测etc发现300台是3个节点, 1000是5,当节点数据变多,为了保持数据同步,需要同步的资源变多,多数反应需要3个节点
2.k8s如何使用etcd
每个模型都定义了storage.go,决定的事这个代码如何存储
etcd在集群中所处的位置
3.k8s堆叠部署etcd集群
如果master太小的话可以用这种方式
4.etcd的存储规划
保证认证鉴权的安全性,包括通信加密

设置合理的存储配额,控制在8个g,一定要及时维护,避免出现alarm
自动压缩历史版本
定期消除碎片化

六、etcd的常见问题
1.数据备份方案

2.数据加密方案

可以指定一个版本,从某个版本开始watch
这个时候拿到的数据,只要没compact,就是该对象从某个版本开始变动的所有信息
3.resourceVersion
4.遇到的问题
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/112975.html






















































