etcd学习和实战:1、etcd了解、安装和应用场景
文章目录
1. 前言
之前简单提过我们的5G智能网关应用程序使用微服务的方式对内管理配置各个处于网关中的子设备,对外提供控制、OTA等服务,而各个处于网关中的子设备可能也具有比较丰富的功能需要和网关对接,比如IPC的AI功能、高清显示屏的控制及配置功能、各类传感器的配置采集功能等也需要提供服务接口来和网关交互,再通过网关和外网交互(部分资源足够的设备也可以直接上云,在云端各个设备平台直接交互,但是各个设备上云的前提就是网络,网关可以对各个设备做联网前的统一管理,即使联网后也可以对其局域网络下的设备做集中管理,这样再上报到云端管理平台的话可以提供更加统一的接口和协议,对于一些实在不好联网的模块也可以直接集成在网关中通过网关的底层处理模块获取信息),扯了这么多,我们可以发现实际上在网关及其子设备这一级也存在很多服务需要管理,算是一个微型的分布式系统,各个设备包括网关都作为单个的网络节点对外提供服务以将设备连接到更大的网络平台上进行管理,并以此提供各个物联网设备的信息和服务,而这些服务的管理也是比较麻烦的,最终确认通过etcd+grpc的方式实现服务的注册来实现网关及其子设备的服务共享,在网关上搭建etcd,将网关内部的服务及其子设备提供的服务都通过etcd的方式统一进行注册管理,让网关具备一定程度上的平台功能,通过服务主动注册的方式添加服务而不是网关主动添加服务,这样的方式显然可扩展性和灵活性更强,网关可以更加灵活的集成更多服务。
2. etcd资料和总结说明
2.1 什么是etcd
etcd是一种高度一致的分布式键值存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它在网络分区期间优雅地处理领导者选举,并且可以容忍机器故障,即使在领导节点中也是如此。
比如著名的Kubernetes(k8s)就是使用的etcd实现部分组件。
2.2 相关资料
GitHub地址:https://github.com/etcd-io/etcd
gitpage主页:https://etcd.io/
主页上有比较详细的安装教程、库和工具、集成环境下的管理、服务发现协议等,所以接下来我们根据官网主页的内容在虚拟机Ubuntu上安装etcd,然后在Ubuntu和Windows下进行模拟并分别开发go和java微服务程序来注册etcd服务进行验证和总结。
3. Ubuntu安装etcd
3.1 安装go
这个再简单说一下,ubuntu安装go可以通过apt-get安装或者二进制发行版解压安装,不明白的可以通过官网查看或者看这里:https://blog.csdn.net/weixin_39510813/article/details/114892586
注意:看下你要安装的etcd对go版本的要求,比如我这里要安装的etcd2.4需要go1.13+,我在Ubuntu16.04上默认安装后目前为go1.6.2,不满足我的要求,所以我们需要安装二进制发行版:(默认的地址是谷歌的地址,所以需要VPN或者用国内的下载镜像比如中国科技大学的:https://mirrors.ustc.edu.cn/golang/,go语言中文网的:https://studygolang.com/dl,这里我们使用wget方式从go中文网中下载安装)
wget https://studygolang.com/dl/golang/go1.16.4.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.16.4.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
sudo -s
echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile
source /etc/profile
测试:
$ go version
go version go1.16.4 linux/amd64
设置GOPATH和GO代理,否则Go开发和一些包功能都无法使用:
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export GO111MODULE=on' >> ~/.bashrc
echo 'export GOPROXY=https://goproxy.io' >> ~/.bashrc
source ~/.bashrc
root用户同理。
3.2 安装etcd
安装etcd也可以从源码编译安装或者apt-get安装,官网上有源码编译安装的方式,apt-get安装的版本目前是v2的,所以我们使用编译源码的方式进行安装(如下以3.4为例):
git clone -b v3.4.16 https://github.com/etcd-io/etcd.git
cd etcd
./build.sh
echo 'export PATH=$PATH:$HOME/etcd/bin' >> ~/.bashrc
source ~/.bashrc
3.3 启动etcd
etcd
3.4 测试etcd(设置并获取key)
简单理解就是设置key-value以及通过key获取value:
从另一个终端,使用 etcdctl 设置一个键:
$ etcdctl put greeting "Hello, etcd"
OK
现在已经设置了一个键,检索它:
$ etcdctl get greeting
greeting
Hello, etcd
4. 下一步可以了解的etcd内容
- Explore the gRPC API.
探索gRPC API,我们对etcd的远程操作其实都是基于gRPC的远程过程调用。
- Set up a multi-machine cluster.
搭建多机集群,如何在分布式集群机器中搭建etcd
- Learn how to configure etcd.
如何配置etcd
库和工具,这里面有java、go、c++、python、php、rust等等很多语言的可调用库以及一些工具。
- Use TLS to secure an etcd cluster.
使用TLS保护etcd集群。
调整etcd。
5. 应用场景和开发者指南
通过官网的学习对etcd的概念其实还是有些模糊,给人的印象更像是一个应用于分布式系统的key-value数据库,我们可以方便在分布式系统中存取key对应的value数据,但在分布式场景下由其提供的API(比如3.4的api扩展出了较多的应用场景(根据云原生社区的这篇博客),目前主要如下:
- 键值对存取
- 服务注册与发现
- 消息订阅与发布
- 分布式通知与协调
- 分布式锁
而我们对etcd的应用主要是服务注册与发现的场景,接下来我们主要针对该场景的应用做更多的学习和总结,其它应用场景等有需要时再做更多的学习和总结。