go get 指定版本_Go语言基础(十六)

7dc98f4da330192de7c23e3e9e3b230f.png

Go语言基础(十六)

一、etcd介绍

二、etcd架构

三、Go语言连接etcd

四、思考题


一、etcd介绍

etcd是使用Go语言开发的一个开源的、高可用的分布式key-value存储系统,可以用于配置共享和服务的注册和发现。类似的项目有zookeeper和consul。现在都用etcd而不用zookeeper了。

etcd具有以下特点:

  • 高全复制:集群中每个节点都可以使用完整的文档;
  • 高可用性:Etcd可用于避免硬件的单点故障或网络问题;
  • 一致性:每次读取都会返回跨主机的最新写入;
  • 简单:包括一个定义良好、面向用户的API
  • 安全:实现了带有可选的客户端证书身份验证的自动化TLS;
  • 快速:每秒10000次写入的基准速度;
  • 可靠:使用Raft算法实现强一致、高可用的服务存储目录;

etcd的应用场景一:服务发现

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

etcd应用场景二:配置中心

将一些配置信息放到etcd上进行集中管理。应用在启动的时候主动从etcd获取一次配置信息,同时在etcd节点注册一个watcher并等待,以后每次配置有更新的时候,etcd都会实时通知订阅者,以此达到获取最新配置信息的目的。

etcd的应用场景三:分布式锁

因为etcd使用Raft算法保持了数据的强一致性,某次存储操作到集群中的值必然是全局一致的,所以很容易实现分布锁,锁服务有两种使用方式:一是保持独占,二是控制时序。

二、etcd架构

7c3a855d6d5f9be597af124b8a71fd0f.png

etcd主要分为四个部分:

  • Http Server:用于处理用户发送的API请求以及其他etcd节点的同步与心跳信息请求
  • Store:用于处理etcd支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是etcd对用户提供的大多数API功能的具体实现。
  • Raft:Raft强一致性算法的具体实现,是etcd的核心。
  • WAL:write ahead log预写式日志,是etcd的数据存储方式。

etcd集群作为一个高可用键值存储系统,由于Raft算法在做决策时,需要多数节点的投票,因此etcd一般部署集群推荐奇数个节点。

1、etcd下载

下载地址:https://github.com/etcd-io/etcd/releases

2aeda8e335a6473bee1e808867a3cb24.png

下载完成之后解压,在bin目录下找到tecd.exe,默认会在2379端口监听客户端通信,在2380端口监听节点通信。

cc89db3f641eff9c24e107c2af0827f1.png

2、修改环境变量

注意连接etcd,默认的etcdctrl使用的是v2版本的命令,因此需要设置环境变量ETCDCTL_API=3来使用v3版本的API,而默认是v2版本的API。修改环境变量指定使用API版本,这个可能最新版本已经改过了,但为了确保一定是v3版本,还是设置一下环境变量。

SET 

d689d8dcb4c88580591f19c96407e45f.png

3、etcd操作

可以试着重新启动cmd,使用命令put设置:在执行这个命令之前一定要先启动etcd.exe

etcdctl

d934849438fd603a86aab87c289eb981.png

出现这种情况,就是因为版本不对,因此需要设置环境变量,指定v3版本:

d571955e1d08959a10169f12baa6f808.png

继续操作:使用命令get获取,使用命令del删除:

14e22607eaa3ad9efe3a2a6cec5a2dce.png

三、Go语言连接etcd

etcd第三方库:

go 

e604eb7de2cf7c3ab88058f68ce50068.png

这样虽然已经成功安装了etcd,但是也为后面买下了伏笔。

1、Put/Get

go连接etcd:

package 

在终端中打开,go mod init, go build失败,

17839f9056550d508d4b07efc9e07f88.png

打开生成的go.mod文件:

d23b68fb7e9b57740f0280615d28b1a3.png

主要原因是因为这行,在这里将v1.27.1修改为v1.26.0,再次go build,即编译成功,在运行.exe之前,一定要先启动etcd.exe。

ca3dcb04b419b1bf241b8d1642835927.png

2、Watch

package 

在终端中打开,go mod init, go build失败,修改go.mod文件,将http://google.golang.org/grpc v1.27.1修改为v1.26.0,然后再次编译,执行.exe之前,一定要先启动etcd.exe。

然后新启动一个cmd

82fe8dbed8f20501ace4aafe390bb6a8.png

92af314372cdf60d64158ad1fa1bfefd.png

3、etcd的logagent实现

f991efe024eae6b4d30ebf267135a702.png

config.ini

[

config.go

package 

etcd.go

package 

kafka.go

package 

taillog.go

package 

taillog_mgr.go

package 

main.go

package 

4、logagent根据IP拉取自己的配置

utils/ip.go

package 

在main函数中稍作修改:

ecead107d1a8ff5ea80cf98a69790bd9.png

四、思考题

1、Raft协议

2、watch底层实现原理

我是尾巴~

每日一句毒鸡汤:谁说时间一定会给答案,时间只教会一个人伪装,把最重要的事情变得一般重要,把一般重要的事情变得不那么重要。

本次推荐:学术导航网站

Google学术搜索镜像_sci-hub网址_大木虫学术导航

Google学术搜索|SCI-HUB网址|谷歌学术搜索|龙猫学术导航

谷歌学术_SCI-HUB网址-科研干货导航

http://www.20009.net

http://www.sci-hub.ac.cn

继续加油~!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值