源碼解讀etcd heartbeat,election timeout之間的拉鋸
- 2022 年 5 月 24 日
- 筆記
转一个我在知乎上回答的有关raft election timeout/ heartbeat interval 的回答吧。 答:准确来讲: election是timeout,而heartbeat 是interval, 这样就很容易理解了。 heartbeat interval 是leader 安抚fo …
Continue Reading转一个我在知乎上回答的有关raft election timeout/ heartbeat interval 的回答吧。 答:准确来讲: election是timeout,而heartbeat 是interval, 这样就很容易理解了。 heartbeat interval 是leader 安抚fo …
Continue Reading本次将记录[利用etcd选主sdk实践master/slave高可用], 并利用etcdctl原生脚本验证选主sdk的工作原理。 master/slave高可用集群 本文目标 在异地多机房部署节点,slave作为备用实例启动,但不接受业务流量, 监测到master宕机,slave节点自动提升为mas …
Continue Reading1. 用户态和内核态 Linux整个体系分为用户态和内核态(或者叫用户空间和内核空间), 那内核态究竟是什么呢? 本质上我们所说的内核态, 它是一种特殊的软件程序,特殊在哪? 统筹计算机的硬件资源,例如协调CPU资源、分配内存资源、并且提供稳定的环境供应用程序运行。 2. 为什么线程切换会导致用户态 …
Continue Reading最近优化了一版程序:用到了golang的优雅退出机制。 程序使用etcd的 election sdk 做高可用选主,需要在节点意外下线的时候,主动去etcd卸任(删除10s租约), 否则已经下线的节点还会被etcd认为是leader。 所以在这里,优雅退出是技术刚需。 另外根据[云原生十二要素方法论 …
Continue Reading
最近部署的web程序,在服务器上出现不少 time_wait 的连接状态,会占用tcp端口,费了几天时间排查。 之前我有结论:HTTP keep-alive 是在应用层对TCP连接的滑动续约复用,如果客户端、服务器稳定续约,就成了名副其实的长连接。 目前所有的HTTP网络库(不论是客户端、服务端)都 …
Continue Reading上文讲到使用ioutil.ReadAll读取大的Response Body,出现读取Body超时的问题。 前人引路 Stackoverflow 的 morganbaz 的看法是: 使用 iotil.ReadAll 去读取go语言里大的Response Body,是非常低效的; 另外如果Respons …
Continue Reading
故障现场 本人负责的 主备集群 ,发出的 HttpClient 请求有 30%概率超时, 报 context deadline exceeded (Client.Timeout or context cancellation while reading body) 异常 Kibana 显示 Ngin …
Continue Reading
去年的时候写了一篇原创《前后端分离,如何在前端项目中动态插入后端API基地址?(in docker)》, 我自认为这篇生产实践是对大前端、 容器化、CI/CD的得意之作。 对于前后端分离的web项目,在容器启动的瞬间,通过脚本替换待部署环境的特定变量,形成了 一个镜像,多环境部署 的效果。 Dock …
Continue Reading当一个运行中的容器被终止时,如何能够执行一些预定义的操作,比如在容器彻底退出之前清理环境。这是一种类似于 pre stop 的钩子体验。但 docker 本身无法提供这种能力,本文结合 Linux 内置命令 trap ,实现在容器优雅关闭之前,可以执行自定义的操作。 如何关闭容器 我了解有三种方式可 …
Continue Reading
Pod 是在 Kubernetes 体系中,承载用户业务负载的一种资源。Pod 们运行的好坏,是用户们最为关心的事情。在业务流量高峰时,手动快速扩展 Pod 的实例数量,算是玩转 Kubernetes 的基本操作。实际上这个操作还可以更加自动化,运维人员可以事先设置好规则,让 Pod 实例的数量,在 …
Continue Reading