微服务自动化之etcd基本介绍

目录

 

一、etcd的诞生

二、etcd介绍

1、etcd简介:

2、etcd概念:

3、etcd特点:

4、etcd应用场景: 

       1、服务发现:

       2、Leader选举: 

5、etcd术语: 

 三、关于Raft选举算法

         1、前引

         2、介绍

         3、Raft算法选举的三种角色

         4、Raft选举过程 

         5、Raft选举算法优缺点

                  1、优点:

                  2、缺点:

四、etcd安装

        1、上传etcd安装包,并解压在对应目录

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

        3、 查看etcd版本

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

        5、创建一个etcd服务 

                 1、建立etcd相关目录(即数据文件和配置文件的保存位置)

                 2、创建etcd配置文件

                 3、创建systemd配置文件 

                 4、启动/停止/查看etcd服务

五、etcd基本使用

         1、帮助命令

         2、put 放入数据

         3、del 删除数据 

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


一、etcd的诞生

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

二、etcd介绍

1、etcd简介:

etcd是一个高可用的分布式的键值对存储系统,常用做配置共享和服务发现,由CoreOS公司发起的一个开源项目,受到ZooKeeper与doozer启发而催生的项目,名称”etcd”源自两个想法,即Unix的”/etc”文件夹和”d”分布式系统。”/etc”文件夹是用于存储单个系统的配置数据的地方,而etcd用于存储大规模分布式的配置信息

2、etcd概念:

etcd 是一个高度一致的分布式键值(key-value)存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以优雅地处理网络分区期间的领导者选举,即使在
领导者节点中也可以容忍机器故障

3、etcd特点:

是用Go语言编写的,它具有出色的跨平台支持,小的二进制文件和强大的社区。etcd机器之间的通信通过Raft共识算法处理

  • 简单:基于HTTP+JSON的API,用curl就可以轻松使用。
  • 可信:使用Raft算法充分实现了分布式。
  • 安全:可选SSL客户认证机制。
  • 快速:每个节点可支持上万QPS读写

4、etcd应用场景: 

       1、服务发现:

服务发现要解决的也是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务,要如何才能找到对方并建立连接。
本质上来说,服务发现就是想要了解集群中是否有进程在监听udp或tcp端口,并且通过名字就可以查找和连接

       2、解决服务发现三大支柱:

1、一个强一致性、高可用的服务存储目录。基于Raft算法的etcd天生就是这样一个强一致性高可用的服务存储目录。


2、一种注册服务和监控服务健康状态的机制。用户可以在etcd中注册服务,并且对注册的服务设置key TTL,定时保持服务的心跳以达到监控健康状态的效果。


3、一种查找和连接服务的机制。通过在etcd指定的主题下注册的服务也能在对应的主题下查找到。为了确保连接,我们可以在每个服务机器上都部署一个Proxy模式的etcd,这样就可
以确保能访问etcd集群的服务都能互相连接。

(1) 在微服务中使用etcd服务发现

随着Docker容器的流行,多种微服务共同协作,构成一个相对功能强大的组织架构。使用etcd服务发现机制,在etcd中注册某个服务名字的目录,在该目录下存储可用的服务节点的IP。服务使用者从etcd目录下查找可用的服务节点IP来连接和调用,达到透明化的动态添加这些服务目的,示意图如下图所示:

(2) 在PaaS平台中使用etcd服务发现

PaaS平台中的应用一般都有多个实例,通过域名不仅可以透明的对多个实例进行访问,而且还可以做到负载均衡。但是应用的某个实例随时都有可能故障重启,这时就需要动态的配置域名解析(路由)信息,通过etcd的服务发现功能就可以轻松解决这个动态配置的问题,实现多实例与实例故障重启透明化目的,示意图如下图所示:

       2、Leader选举: 

使用分布式锁,可以完成Leader竞选。这种场景通常是一些长时间CPU计算或者使用IO操作的机器,只需要竞选出的Leader计算或处理一次,就可以把结果复制给其他的Follower,从而避免重复劳动,节省计算资源。

可使用在搜索系统中建立全量索引。如果每个机器都进行一遍索引的建立,不但耗时而且建立索引的一致性不能保证。通过在etcd的CAS机制同时创建一个节点,创建成功的机器作为Leader,进行索引计算,然后把计算结果分发到其它节点。

5、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来定位数据。

 三、关于Raft选举算法

         1、前引

集群一般是由两个或两个以上的服务器组建而成,每个服务器都是一个节点。数据库集群、管理集群...数据库集群提供了读写功能,管理集群提供了管理、故障恢复等功能。


对于一个集群来说,多个节点的协同和管理是非常重要的。而主节点则实现了协同和管理,主节点的存在,就可以保证其他节点的有序运行,以及数据库集群中的写入数据在每个节点上的一致性。


这里的一致性是指,数据在每个集群节点中都是一样的,不存在不同的情况。分布式选举的作用就是选出一个主节点,由它来协调和管理其他节点,以保证集群有序运行和节点间数据的一致性。

         2、介绍

Raft 算法是典型的多数派投票选举算法,其选举机制与我们日常生活中的民主投票机制类似,核心思想是“少数服从多数”。也就是说,Raft 算法中,获得投票最多的节点成为主节点

         3、Raft算法选举的三种角色

1、Leader: 即主节点,同一时刻只有一个 Leader,负责协调和管理其他节点;
2、Candidate: 即候选者,每一个节点都可以成为 Candidate,节点在该角色下才可以被选为新的 Leader;
3、Follower: Leader 的跟随者,不可以发起选举。

         4、Raft选举过程 

1. 初始化时,所有节点均为 Follower 状态。


2. 开始选主时,所有节点的状态由 Follower 转化为 Candidate,并向其他节点发送选举请求。


3. 其他节点根据接收到的选举请求的先后顺序,回复是否同意成为主。这里需要注意的是,在每一轮选举中,一个节点只能投出一张票。


4. 若发起选举请求的节点获得超过一半的投票,则成为主节点,其状态转化为 Leader,其他节点的状态则由 Candidate 降为 Follower。Leader 节点与 Follower 节点之间会定期发送心跳包,以检测主节点是否活着。


5. 当 Leader 节点的任期到了,即发现其他服务器开始下一轮选主周期时,Leader 节点的状态由 Leader 降级为 Follower,进入新一轮选主

         5、Raft选举算法优缺点

                  1、优点:

算法具有选举速度快、算法复杂度低、易于实现的优点

                  2、缺点:

                它要求系统内每个节点都可以相互通信,且需要获得过半的投票数才能选主成功,因此通信量大。

四、etcd安装

        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版本

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

etcd服务我已开启

        5、创建一个etcd服务 

                 1、建立etcd相关目录(即数据文件和配置文件的保存位置)

mkdir -p /var/lib/etcd/ && mkdir -p /etc/etcd/   -p:可建立多级目录,如果没有当前目录就会建立    &&:表示同时运行

                 2、创建etcd配置文件

vim /etc/etcd/etcd.conf

 将一下内容编辑到etcd配置文件中

# 节点名称
ETCD_NAME="etcd0"
# 指定数据文件存放位置
ETCD_DATA_DIR="/var/lib/etcd/"

                 3、创建systemd配置文件 

vim /etc/systemd/system/etcd.service

 将一下内容编辑到systemd配置文件中 

[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

                 4、启动/停止/查看etcd服务

systemctl daemon-reload && systemctl enable etcd && systemctl start etcd && systemctl status etcd

五、etcd基本使用

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

         1、帮助命令

etcdctl -h

         2、put 放入数据

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

         3、del 删除数据 

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

/testdir/这种情况也会进行删除

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

etcdctl watch key1

先开一个窗口,对键ben进行操作,同时来监听ben键

对ben键进行删除,另一窗口进行监听

 监听成功: 

有几个链接对学习etcd非常有用,建议大家访问

etcd介绍:etcd | ETCD中文网站

etcd基本使用:API保证 - etcd官方文档中文版

etcd基础与使用etcd基础与使用 | vison的博客

高可用集群高可用 | Kuboard Spray

服务发现:ETCD 简介 + 使用_菲宇运维-CSDN博客_etcd

etcd术语:术语 - etcd官方文档中文版

今天的知识分享到这了,希望能够帮助到你! 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值