Etcd Watch 机制 在启用缓存之后就会面临本地缓存更新的问题,因为 etcd 是一个分布式的 KV 存储,允许多个客户端并发操作并保证一致性,那么如果其他客户端更新了 etcd 中的数据,那么如何更新本客户端本地缓存中的数据呢 etcd 和客户端的负担。 幸运的是 etcd 提供了 watch 机制可以克服轮询方案的弊端。etcd 的 watch 机制允许客户端告诉 etcd 它要关注的 key,如果该 key 有任何修改,etcd 会通知客户端。 客户端缓存的实现 有了 etcd 的 watch 机制和 revision 我们就可以实现一个客户端的缓存。 总 结 本文介绍了如何基于 etcd 的 watch 机制来实现客户端缓存,有了客户端缓存,极大地降低了访问 etcd 的延迟并提高了吞吐,非常适合读多写少的场景。
Etcd Workbench我相信很多人在开始管理ETCD的时候都去搜了Etcd客户端工具,然后找到了官方的Etcd Manager,但用完之后发现它并不好用,还不支持多连接和代码格式化,并且已经好几年不更新了 ,于是市面上就有了好多其他客户端工具,Etcd Workbench就是其中为数不多好用且免费的一个,下面来介绍一下。 App版支持了常规的身份认证和SSL连接,这个没什么说的,你按照提示添加相应证书就好了,这里需要提一下它同时还支持SSH Tunnel功能,这个是很多其他Etcd客户端没有的。 如果你有一些连接信息需要迁移到别的设备的Etcd Workbench,可以在这里导出连接配置为一个文件,到另一台电脑里面打开Etcd Workbench同样在这里选择导入配置即可完成配置迁移。 有什么需求或者Bug可以在GitHub提交issue,也可以直接联系这个客户端的作者。注:这篇文章是从本人 CSDN 原创文章搬运而来,如需转载请注明出处
存取测试 [root@docker etcd-v2.2.4-linux-amd64]# . /etcdctl set keytest "hello world for etcd test" hello world for etcd test [root@docker etcd-v2.2.4-linux-amd64 /etcdctl get keytest hello world for etcd test [root@docker etcd-v2.2.4-linux-amd64]# ---- 单点运行 [root @docker etcd-v2.2.4-linux-amd64]# netstat -ant | grep -E '(2379|2380)' [root@docker etcd-v2.2.4-linux-amd64 /etcd 2016-02-01 22:54:18.977681 I | etcdmain: etcd Version: 2.2.4 2016-02-01 22:54:18.977850 I | etcdmain
确保 2379 和 2380 端口被打开,默认情况下 2379 用来监听客户端请求 2380 用来进行节点间通讯 Tip: CentOS Linux 7 中使用的 firewalld 来管理防火墙设置 Note: 其它节点也要确保这两个端口是开放的,否则无法正常工作 ---- 配置启动集群 [root@docker etcd-v2.2.4-linux-amd64]# . /etcd -name docker -initial-advertise-peer-urls http://192.168.100.103:2380 \ > -listen-peer-urls http http://192.168.100.104:2380 \ > -initial-cluster-state new 2016-02-16 15:35:49.278204 I | etcdmain: etcd /etcd -name h104 -initial-advertise-peer-urls http://192.168.100.104:2380 \ > -listen-peer-urls http
搭完集群后,我开始体验下etcd如何使用 1,设置key,进行前缀查询操作 ENDPOINTS=http://127.0.0.1:22379 etcdctl --endpoints=$ value3 查询 etcdctl --endpoints=$ENDPOINTS get web --prefix web1 value1 web2 value2 web3 value3 2,前缀删除 ------------+-----------+------------+--------------------+--------+ | http://127.0.0.1:22379 | 91bc3c398fb3c146 foo bar # read key in etcd v2 etcdctl --endpoints=$ENDPOINTS --output="json" get foo # stop etcd node --data-dir="default.etcd" --wal-dir="default.etcd/member/wal" # restart etcd node after migrate, one
本文内容基于 etcd3。 CoreOS 中的 etcd 是以 rkt 容器方式启动的。自带的 etcd2 命令已经过时,操作请使用 etcdctl。 $ rkt list UUID APP IMAGE NAME STATE CREATED STARTED NETWORKS 57581644 etcd quay.io/coreos/etcd :v3.2.10 running 1 minute ago 1 minute ago 先设置环境变量(不是必须),经过我的验证,如果 etcd 启动成功,不用设置也行。 $ export ETCDCTL_API=3 使用 Docker 模拟集群 你也可以使用 Docker Compose 模拟一个集群 具体请查看:https://github.com/yeasy/docker_practice /blob/master/etcd/cluster.md 查看节点列表 core@coreos1 ~ $ etcdctl member list 3ce690f11cfd6851: name=97dd4eb227ed416989800aab22ebafc8
《彻底搞懂 etcd 系列文章》将会从 etcd 的基本功能实践、API 接口、实现原理、源码分析,以及实现中的踩坑经验等几方面具体展开介绍 etcd。 1 proto3 etcd v3 的通信基于 gRPC,proto 文件是定义服务端和客户端通讯接口的标准。 即客户端该传什么样的参数,服务端该返回什么样子的参数,客户端该怎么调用,是阻塞还是非阻塞,是同步还是异步。 4 小结 所有 etcd3 API 均在 gRPC 服务中定义,该服务对 etcd 服务器可以理解的远程过程调用(RPC)进行分类。 本篇主要介绍了 proto3 相关的定义概念,为后面具体学习 gRPC 的接口储备一些必要的知识。下篇文章我们将具体介绍 etcd3 的 gRPC API 核心接口。
etcd clientv3 客户端 etcd 客户端 clientv3 接入的示例将会以 Go 客户端为主,读者需要准备好基本的开发环境。 首先是 etcd clientv3 的初始化,我们根据指定的 etcd 节点,建立客户端与 etcd 集群的连接。 etcd 客户端初始化 解决完包依赖之后,我们初始化 etcd 客户端。 proto3 etcd v3 的通信基于 gRPC,proto 文件是定义服务端和客户端通讯接口的标准。 选举,暴露客户端选举机制。 image.png 请求和响应 etcd3 中的所有 RPC 都遵循相同的格式。
etcd3 ab147-1vmabujczdkr4tgiezkkfag.png 我们将讨论最新版本的etcd(etcd v3),与之前的etcd v2相比,它有很大的变化。 etcd3 拥有一个滑动窗口来保留旧事件,以便断开连接不会导致所有事件丢失。 缺点 请注意,如果客户端超时或者客户端与 etcd 成员之间出现网络中断,客户端的运行状态可能不确定。 结论 我们讨论了 Apache ZooKeeper 和 etcd3 的主要特性和优缺点。 尽管 Apache ZooKeeper 是稳定的,并且以出色的分布式协调系统而闻名,但 etcd3 作为后起之秀很有前途。 由于 etcd 是用 Go 编写的,所以良好的客户端库不适用于 Java。 Introduction to etcd3 by CoreOS CTO Brandon Philips etcd3 API Apache Curator in 5 Minutes
:/data/etcd_backup_dir/ $ scp /data/etcd_backup_dir/etcd-snapshot-20191222.db root@k8s-master3:/data/ etcd_backup_dir/ 恢复备份 # k8s-master1 机器上操作 $ ETCDCTL_API=3 etcdctl snapshot restore /data/etcd_backup_dir # k8s-master2 机器上操作 $ ETCDCTL_API=3 etcdctl snapshot restore /data/etcd_backup_dir/etcd-snapshot- https://192.168.1.37:2380 \ --data-dir=/var/lib/etcd/default.etcd # k8s-master3 机器上操作 $ ETCDCTL_API =3 etcdctl snapshot restore /data/etcd_backup_dir/etcd-snapshot-20191222.db \ --name etcd-2 \ --initial-cluster
本文主要介绍etcd 的clientv3的基本使用。 package main import ( "context" "fmt" "github.com/google/uuid" "go.etcd.io/etcd/clientv3" "time " ) func main() { rootContext := context.Background() cli, err := clientv3.New(clientv3.Config{ 获取值,设置值) func testFunc(cli *clientv3.Client, rootContext context.Context) { kvc := clientv3.NewKV(cli 注意:在引入包的go.etcd.io/etcd/clientv3 的时候有的时候是不成功的,问题大多出现在这里: github.com/coreos/go-systemd 这时候我们可以在mod中使用replace
Etcd Assistant——Etcd 可视化管理工具,GUI 客户端下载地址:http://www.redisant.cn/etcd主要功能:支持多标签页,同时连接到多个集群以漂亮的格式显示JSON 、XML、MessagePack、十六进制等数据格式浏览、创建、编辑、删除键导出和导出数据键的展示支持多种视图:树状视图或列表视图支持基于用户名和密码的基本身份验证、HTTPS客户端证书认证支持 HTTP 和 HTTPS 连接显示 etcd 集群及其节点的基本信息管理租约:列出和撤销租约,查看详细信息管理用户:创建、更新或删除用户管理角色和权限:创建、更新删除角色软件截图快速连接到您的 Etcd 集群并开始工作 Etcd Assistant 可以连接 etcd v3 集群,支持基本认证、TLS证书认证、支持 SSL/TLS 安全连接;随时查看您的 etcd 健康指标图片支持丰富的数据格式Etcd Assistant 会自动识别并格式化不同的数据格式,包括Text、JSON、XML、HEX、MessagePack,以及各种整数、浮点类型图片管理集群成员、租约和用户通过 Etcd Assistant 查看及群里所有节点的详细信息
目录: (1).第三方仓库与版本选择 (2).kubesphere部署etcd (3).kubesphere部署apisix与apisix-dashboard 1.创建运维用apisix 1.1.部署apisix-devops rootPassword:设置为etcd@P3d8UiA 如果启动etcd报这个错,密码怎么改都不对,说明你之前在pv中有密码,两者不一致,最简单的做法是删除pvc/pv,生产别这么干。 rootPassword:设置为etcd@P3d8UiA apisix的replicaCount默认为1,不变。 1.3.部署apisix-devops-dashboard 修改etcd相关配置: rootPassword:设置为etcd@P3d8UiA 但是不支持修改前缀,需要手动修改对应的configmap 2.3.部署apisix-biz-dashboard 修改etcd相关配置: rootPassword:设置为etcd@P3d8UiA 但是不支持修改前缀,需要手动修改对应的configmap: kubectl
,赢百万奖金......了解更多详情>>> 获得etcd 版本号 可以从/version端点获取特定实例的etcd版本。 curl -L http://127.0.0.1:2379/version etcd 2.0.12 检查一个etcd成员节点的健康状况 etcd提供了一个/health端点来验证特定成员的运行状况。
它类似 TTL(Time To Live),用于 etcd 客户端与服务端之间进行活性检测。在到达 TTL 时间之前,etcd 服务端不会删除相关租约上绑定的键值对;超过 TTL 时间,则会删除。 因此我们需要在到达TTL时间之前续租,以实现客户端与服务端之间的保活。 Lease 也是 etcd v2 与 v3 版本之间的重要变化之一。 etcd v3 则在 v2 的基础上进行了重大升级,每个 Lease 都设置了一个 TTL 时间,具有相同TTL时间的 key 绑定到同一个 Lease,实现了 Lease 的复用,并且基于 gRPC 下图是客户端创建一个指定 TTL 的租约流程,当 etcd 服务端的 gRPC Server 接收到创建 Lease 的请求后,Raft 模块首先进行日志同步;接着 MVCC 调用 Lease 模块的 clientv3 包中定义好了 Lease 相关的实现,基于客户端 API 进行调用会更加简单。
; 数据持久化:etcd默认数据一更新就进行持久化; 安全:etcd支持SSL客户端安全认证。 3.etcd架构 etcd分为四个部分: HTTP Server:用于处理用户发送的API请求以及其他etcd节点的同步与心跳请求; Store:用于处理etcd所支持的各类功能的事务,包括 数据索引 示例:搭建3个节点的etcd集群 export ETCDCTL_API=3 TOKEN=token-01 CLUSTER_STATE=new NAME_1=machine-1 NAME_2=machine 1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380 TOKEN:标识etcd ,同龄人,所以指代的是节点之间 --advertise-client-urls 2379 客户端连接 --initial-cluster:初始化一个集群 在n2节点执行命令以启动etcd etcd -
安装etcd集群: node1:192.168.133.140 node2:192.168.133.141 node3:192.168.133.142 1,安装ntp服务: yum install /0.0.0.0:2379,http://0.0.0.0:4001" #监听etcd客户端的地址 #ETCD_MAX_SNAPSHOTS="5" #ETCD_MAX_WALS="5" #ETCD_CORS ETCD_INITIAL_CLUSTER="master1=http://192.168.133.140:2380,master2=http://192.168.133.141:2380,master3 启动etcd集群 并设置开机启动 systemctl start etcd && systemctl enable etcd python调etcd的接口 安装etcd3的模块 pip install etcd3 import etcd3 #往etcd中存数据 client = etcd3.client(host='192.168.133.140') #连接etcd r = client.put
目录 (1).下载 (2).etcd配置文件与启动 1.etcd启动参数说明 2.启动脚本模版 3.启动etcd集群 (3).验证etcd集群 (4).参考资料 一共3台机器。 /app/3rd ln -s /app/3rd/etcd-v3.5.0/etcd /usr/local/bin/etcd ln -s /app/3rd/etcd-v3.5.0/etcdctl /usr \ #和集群内其他节点通信的地址, http://ip:2380 --listen-peer-urls=http://etcd-current-master-node:2380 \ #节点与客户端通信的地址 ,比如 http://ip:2379,http://127.0.0.1:2379,客户端会连接到这里和 etcd 交互 --listen-client-urls=http://etcd-current-master-node 3.启动etcd集群 启动脚本:start.sh (3).验证etcd集群 查看集群节点: etcdctl member list -w table 都不是learner节点就对了(learner节点不参与投票选举
[root@192-168-3-114 ~]# ETCDCTL_API=3 etcdctl --cert="/etc/etcd/peer.crt" --key=/etc/etcd/peer.key -- cacert="/etc/etcd/ca.crt" --endpoints="https://192.168.3.112:2379,\ https://192.168.3.113:2379,\ https [root@192-168-3-114 ~]# ETCDCTL_API=3 etcdctl --cert="/etc/etcd/peer.crt" --key=/etc/etcd/peer.key -- cacert="/etc/etcd/ca.crt" --endpoints="https://192.168.3.112:2379,\ https://192.168.3.113:2379,\ https 参考: https://medium.com/opsguru/securing-kubernetes-secrets-how-to-efficiently-secure-access-to-etcd-and-protect-your-secrets-b147791da768
之前说了etcd的简介,命令行使用,一些基本原理。这次来说说现实一点的集群部署和golang版本的客户端使用。 https://doczhcn.gitbook.io/etcd/index/index-1/clustering Golang客户端使用 这里来实际用代码操作一下etcd,还是和之前使用命令行一样,get /put/del/watch/lease用一下这些操作,其他操作请查看doc https://godoc.org/github.com/coreos/etcd/clientv3 客户端下载 这里不建议使用 "context" "fmt" "go.etcd.io/etcd/clientv3" "go.etcd.io/etcd/mvcc/mvccpb" "time" ) func main() { // 配置客户端连接 client, err := clientv3.New(clientv3.Config{ // Endpoints: []string