NOTE

Etcd put 请求过程:EtcdServer 处理概述

文章目录 EtcdServer 发送请求到 Raft Raft 处理请求 Raft 将请求写入 propc channel Raft 消费 propc channel stepFollower stepLeader 这部分从 EtcdSer...

Golang 反向代理 reverse proxy 示例

一个 golang 反向代理的极简实现。关于反向代理,实际包含三部分:客户端、反向代理、服务端。其请求流程如下: 客户端 --> 反向代理 --> 服务端 也就是客户端先将请求发给反向代理,反向代理再将请求转发给服务端,这里反向代理也是一个服务器,监听在某个端口。具体实现如下。 客户端 客户端向反向代理发送请求,所以客户端需要知道反向代理的地址(这不是废话吗),依我现在的看...

Etcd raft 模块应用案例解析:raftexample

etcd 中的 etcd-raft 模块是一个 raft 的标准实现,raftexample 通过这个 etcd-raft 模块构建了一个分布式的一致性的存储驱动,通过 raftexample 这个例子可以看下使用 raft 的设计思想。从这例子中可以看出 raft 是跟业务无关的,它只关心数据在几个 raft 实例之间的一致性,具体是什么数据它不关心。同时它也不关心数据持久化的问题,他只是...

Raft 在 Etcd 中的实现[转载]

本文为转载,原文信息如下,请移步原文阅读。 Raft 在 etcd 中的实现 作者:喵叔没话说 参考的 etcd 版本为 v3.3.10 Overview Etcd将raft协议实现为一个library,然后本身作为一个应用使用它。当然,可能是为了推广它所实现的这个library,etcd还额外提供了一个叫 raftexample 的示例程序,向用户 展示怎样在它所提供的raft...

流式 gRPC 示例

目录 总结 服务端流式 gRPC 客户端流式 gRPC 双向 gRPC 流式 gRPC 示例及理解,参考《gRPC 与云原生应用开发》,下面有服务端流式 gRPC、客户端 gRPC、双向 gRPC 的示例。 总结 对于一个服务方法(在 service 中定义的方法) 如果返回值带着 stream 表示服务端以流的形式返回数据,客户端要在 for 循环里不断的通过...

《In search of an Understandable Consensus Algorithm》Etcd 论文简析

今天去参加前同事聚会了,大佬们都很厉害,我什么时候才能成为大佬。 前言 理解一下 etcd 论文,目的在理解其核心思想。在阅读 etcd 源码时,能够分清哪些东西是为了实现协议额外添加的,哪些是 etcd 自身的东西。同时,这些东西比较零碎,记在这里,能够随时回来翻一下。对于论文中不明确的内容,将以英文的形式直接列出来,避免引起误导。 etcd 论文中提供的方法在实现时可能略有差异,有些细...

too many open files 问题排查

经常在集群中遇到 too many open files 问题,整理下原因与配置 相关现象 进程日志 问题发生时的 etcd 日志: 2021-12-27 08:49:13.292514 I | embed: rejected connection from "172.16.16.22:41266" (error "open /etc/kubernetes/ssl/kube-etcd-17...

Etcd 超时:read-only request took too long to execute

背景 etcd 的日志中,经常有下面的 warning 信息,这个东西本没有什么好分析的,只不过自己太懒了,只能靠一边写博客一边分析,这样才有点动力。 2021-10-24 01:36:29.048037 W | etcdserver: read-only range request "key:\"/registry/roles/cattle-global-data/mcapprevisio...

Etcd put 请求过程:clientv3 发送请求到 EtcdServer

看一下 Etcd clientv3 将请求发送给 EtcdServer 的过程,本文基于的 Etcd 版本为 3.4。 从 clientv3 说起 在《在本地安装 Etcd 集群进行测试》 中介绍了 etcd clientv3 客户端的使用。大概有三个小步骤:1)配置一个 client config;2)通过 config 生成一个 client;3)通过这个 client 生成一个 KV...

K8s Apiserver 中的存储层调用链路梳理

"参考《Kubernetes 源码剖析》"

这两天在家看了一下《Kubernetes 源码剖析》,主要是关于 Apiserver / etcd 的部分,感觉受益颇多,这里整理一下。总的来说,对于特定资源的处理函数我们只需要关注两个文件就可以了。参考下图,以 Deployment 为例,一个是处理文件 storage.go,定义了该资源的 Storage.Interface 实现,其实一般用的是默认的 CacherStorage,只有个...