微服务自动化.01etcd基本介绍

etcd

在云计算时代,如何让服务快速透明地接入到计算集群中,如何让共享配置信息快速被集群中的所有机器发现,更为重要的是,如何构建这样一套高可用、安全、易于部署以及响
应快速的服务集群,已经成为了迫切需要解决的问题。

Etcd介绍

etcd 是一个高度一致的分布式键值 (key-value) 存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以优雅地处理网络分区期间的领导者选举,即使在
领导者节点中也可以容忍机器故障。
etcd 是用 Go 语言编写的,它具有出色的跨平台支持,小的二进制文件和强大的社区。 etcd 机器之间的通信通过 Raft 共识算法处理。

服务发现

服务发现要解决的也是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务,要如何才能找到对方并建立连接。
本质上来说,服务发现就是想要了解集群中是否有进程在监听 udp tcp 端口,并且通过名字就可以查找和连接。
要解决服务发现的问题,需要有下面三大支柱,缺一不可 :
一个强一致性、高可用的服务存储目录。基于 Raft 算法的 etcd 天生就是这样一个强一致性高可用的服务存储目录。
一种注册服务和监控服务健康状态的机制。用户可以在 etcd 中注册服务,并且对注册的服务设置 key TTL ,定时保持服务的心跳以达到监控健康状态的效果。
一种查找和连接服务的机制。通过在 etcd 指定的主题下注册的服务也能在对应的主题下查找到。为了确保连接,我们可以在每个服务机器上都部署一个 Proxy 模式的 etcd ,这样就可
以确保能访问 etcd 集群的服务都能互相连接。

 

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 ,进入新一轮选主

每一轮选举,每个节点只能投一次票。
这种选举就类似人大代表选举,正常情况下每个人大代表都有一定的任期,任期到后会触发重新选举,且投票者只能将自己手里唯一的票投给其中一个候选者。
对应到 Raft 算法中,选主是周期进行的,包括选主和任值两个时间段,选主阶段对应投票阶段,任值阶段对应节点成为主之后的任期。
但也有例外的时候,如果主节点故障,会立马发起选举,重新选出一个主节点。

Google 开源的 Kubernetes ,擅长容器管理与调度,为了保证可靠性,通常会部署 3 个节点用于数据备份。
3 个节点中,有一个会被选为主,其他节点作为备份。
Kubernetes 的选主采用的是开源的 etcd 组件。而, etcd 的集群管理器 etcd ,是一个高可用、强一致性的服务发现存储仓库,就是采用了 Raft 算法来实现选主和一致性的。
Raft 算法具有选举速度快、算法复杂度低、易于实现的优点;
缺点是,它要求系统内每个节点都可以相互通信,且需要获得过半的投票数才能选主成功,因此通信量大。
该算法选举稳定性比 Bully 算法好,这是因为当有新节点加入或节点故障恢复后,会触发选主,但不一定会真正切主,除非新节点或故障后恢复的节点获得投票数过半,才会导致切主。

etcd术语

Raft etcd 所采用的保证分布式系统强一致性的算法。
Node :一个 Raft 状态机实例。
Member : 一个 etcd 实例。它管理着一个 Node ,并且可以为客户端请求提供服务。
Cluster :由多个 Member 构成可以协同工作的 etcd 集群。
Peer :对同一个 etcd 集群中另外一个 Member 的称呼。
Client : 向 etcd 集群发送 HTTP 请求的客户端。
WAL :预写式日志, etcd 用于持久化存储的日志格式。
snapshot etcd 防止 WAL 文件过多而设置的快照,存储 etcd 数据状态。
Proxy etcd 的一种模式,为 etcd 集群提供反向代理服务。
Leader( 领导者 ) Raft 算法中通过竞选而产生的处理所有数据提交的节点。
Follower( 跟随者 ) :竞选失败的节点作为 Raft 中的从属节点,为算法提供强一致性保证。
Candidate :当 Follower 超过一定时间接收不到 Leader 的心跳时转变为 Candidate 开始 Leader 竞选。
Term :某个节点成为 Leader 到下一次竞选开始的时间周期,称为一个 Term
Index :数据项编号。 Raft 中通过 Term Index 来定位数据。

etcd安装(centos)

上传etcd安装包(网络下载太慢了)

tar -zxvf etcd-v3.4.3-linux-amd64.tar.gz

切换至etcd根目录,将etcdetcdctl二进制文件复制到/usr/local/bin目录这样系统中可以直接调用etcd/etcdctl这两个程序

cp etcd etcdctl / usr / local / bin

查看etcd版本  注:退回到home目录执行该指令

etcd -- version

输入命令etcd,即可启动一个单节点的etcd服务,ctrl+c即可停止服务

xxxx - xx - xx xx : xx : xx . xxxxxx I | embed : name = default
xxxx - xx - xx xx : xx : xx . xxxxxx I | embed : data dir = default . etcd
xxxx - xx - xx xx : xx : xx . xxxxxx I | embed : member dir = default . etcd / member
xxxx - xx - xx xx : xx : xx . xxxxxx I | embed : heartbeat = 100 ms
xxxx - xx - xx xx : xx : xx . xxxxxx I | embed : election = 1000 ms
xxxx - xx - xx xx : xx : xx . xxxxxx I | embed : snapshot count = 100000
xxxx - xx - xx xx : xx : xx . xxxxxx I | embed : advertise client URLs = http : //localhost:2379
xxxx - xx - xx xx : xx : xx . xxxxxx I | etcdserver : starting member 8e9 e05c52164694d in cluster cdf818194e3a8c32

 

1.name 表示节点名称,默认为 default
2.data-dir 保存日志和快照的目录,默认为当前工作目录 default.etcd/ 目录下。
3. http://localhost:2380 和集群中其他节点通信。
4. http://localhost:2379 提供客户端交互。
5.heartbeat 100ms ,该参数的作用是 leader 多久发送一次心跳到 followers ,默认值是 100ms
6.election 1000ms ,该参数的作用是重新投票的超时时间,如果 follow 在该时间间隔没有收到心跳包,会触发重新投票,默认为 1000ms
7.snapshot count 10000 ,该参数的作用是指定有多少事务被提交时,触发截取快照保存到磁盘。
8. 集群和每个节点都会生成一个 uuid
9. 启动的时候会运行 raft ,选举出 leader

创建一个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

在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基本使用 

etcdctl 是一个命令行客户端,可以对 etcd 服务进行测试或者手动修改数据库内容。另外, etcdctl 还支持 HTTP API( 之后介绍 )
etcdctl 支持的命令大体上分为数据库操作和非数据库操作两类

帮助命令

etcdctl - h

put 放入数据

etcdctl put / testdir / testkey "Hello world"
-- sort 对结果进行排序
-- consistent 将请求发给主节点,保证获取内容的一致性。

 

 del 删除数据

清空数据
etcdctl del / -- prefix
删除所有 / test 前缀的节点
etcdctl del / test -- prefix

watch,监测一个键值的变化,一旦键值发生更新,就会输出最新的值并退出

etcdctl watch key1 

etcd基本使用 

高可用集群

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值