Etcd 是一个分布式的键值存储系统,用于共享配置和服务发现
Etcd 是一个分布式的键值存储系统,用于共享配置和服务发现。它最初由 CoreOS 开发,并已成为许多分布式系统中的关键组件之一,特别是在 Kubernetes 中扮演着核心角色。Etcd 的设计目标是简单、可靠、安全,并且易于使用。
Etcd 的特点
- 一致性:Etcd 使用 Raft 一致性算法来保证数据的一致性和可靠性。这意味着所有节点上的数据都是相同的,并且即使在网络分区的情况下也能够保证数据的一致性。
- 安全性:Etcd 支持客户端认证和加密通信,可以通过 TLS 加密客户端与服务器之间的通信,并通过证书进行身份验证。
- 简洁性:Etcd 提供了一个简单的 API,可以轻松地通过 RESTful API 访问存储的数据。
- 易用性:Etcd 可以轻松地部署和管理,支持集群模式,允许水平扩展。
Etcd 的用途
Etcd 主要用于以下场景:
- 共享配置:存储分布式系统的配置信息,如数据库连接字符串、API 密钥等。
- 服务发现:存储服务的位置信息,帮助服务间相互发现和通信。
- 分布式锁:提供分布式锁机制,允许多个进程或服务在竞争同一资源时进行协调。
- 状态存储:存储分布式系统的状态信息,如心跳信息、元数据等。
Etcd 的架构
Etcd 通常以集群的形式部署,集群中的每个节点都保存了一份数据副本。集群中的节点通过 Raft 一致性算法来达成一致,并对外提供一致的数据视图。
节点角色
- Leader:负责处理客户端请求,协调数据的一致性。
- Follower:跟随 Leader,参与投票过程。
- Candidate:在 Leader 故障时参与选举成为新的 Leader。
Etcd 的工作流程
- 选举过程:如果集群中的 Leader 故障,其他节点会通过 Raft 算法进行选举产生新的 Leader。
- 写入操作:客户端的写入请求首先发送到 Leader,Leader 将请求广播到所有 Follower,如果大多数节点确认请求,则请求被认为已提交。
- 读取操作:客户端可以从任意节点读取数据,因为所有节点上的数据都是一致的。
Etcd 的数据模型
Etcd 的数据模型基于键值对(key-value pairs),其中键是字符串形式的路径(类似 Unix 文件系统的路径),值可以是任意的字节数组。键可以有层次结构,通过斜杠(/)分隔。
Etcd 的客户端 API
Etcd 提供了多种客户端库,支持多种编程语言,如 Go、Python、Java 等。此外,还提供了命令行工具 etcdctl,用于与 Etcd 交互。
示例命令
-
列出所有键:
Shell深色版本
etcdctl --endpoints=<etcd-endpoint> get / -
设置键值对:
Shell深色版本
etcdctl --endpoints=<etcd-endpoint> put /foo/bar "hello world" -
获取键值对:
Shell深色版本
etcdctl --endpoints=<etcd-endpoint> get /foo/bar -
删除键值对:
Shell深色版本
etcdctl --endpoints=<etcd-endpoint> del /foo/bar
Etcd 在 Kubernetes 中的角色
在 Kubernetes 中,Etcd 扮演着至关重要的角色。Kubernetes 使用 Etcd 来存储集群的状态信息,包括节点信息、命名空间、Pod、服务、配置等所有资源对象的状态。
Kubernetes 中的 Etcd 集群
- 持久存储:存储 Kubernetes API Server 的持久状态。
- 一致性保证:确保所有节点上的数据一致性。
- 高可用性:通常以多节点集群的形式部署,以提高可用性。
Etcd 的部署和管理
Etcd 可以单独部署,也可以作为 Kubernetes 组件的一部分部署。在生产环境中,通常建议部署多节点的 Etcd 集群以提高可用性。
部署示例
以下是一个简单的单节点 Etcd 部署示例:
Yaml
深色版本
apiVersion: apps/v1
kind: Deployment
metadata:name: etcd-deploymentlabels:app: etcd
spec:replicas: 1selector:matchLabels:app: etcdtemplate:metadata:labels:app: etcdspec:containers:- name: etcdimage: quay.io/coreos/etcd:v3.4.13command:- "/bin/etcd"- "--listen-client-urls=http://0.0.0.0:2379"- "--advertise-client-urls=http://localhost:2379"- "--initial-advertise-peer-urls=http://localhost:2380"- "--listen-peer-urls=http://0.0.0.0:2380"- "--initial-cluster=default=http://localhost:2380"- "--data-dir=/var/lib/etcd"ports:- containerPort: 2379name: client- containerPort: 2380name: peervolumeMounts:- name: etcd-datamountPath: /var/lib/etcdvolumes:- name: etcd-dataemptyDir: {}
总结
Etcd 是一个分布式的键值存储系统,因其一致性、可靠性和安全性而被广泛应用于分布式系统中。Etcd 在 Kubernetes 中发挥着核心作用,用于存储集群的状态信息。通过 Etcd,可以实现配置共享、服务发现、分布式锁等多种功能。
相关文章:
Etcd 是一个分布式的键值存储系统,用于共享配置和服务发现
Etcd 是一个分布式的键值存储系统,用于共享配置和服务发现。它最初由 CoreOS 开发,并已成为许多分布式系统中的关键组件之一,特别是在 Kubernetes 中扮演着核心角色。Etcd 的设计目标是简单、可靠、安全,并且易于使用。 Etcd 的特…...
如何帮助我们改造升级原有架构——基于TDengine 平台
一、简介 TDengine 核心是一款高性能、集群开源、云原生的时序数据库(Time Series Database,TSDB),专为物联网IoT平台、工业互联网、电力、IT 运维等场景设计并优化,具有极强的弹性伸缩能力。同时它还带有内建的缓存、…...
MySQl查询分析工具 EXPLAIN ANALYZE
文章目录 EXPLAIN ANALYZE是什么Iterator 输出内容解读EXPLAIN ANALYZE和EXPLAIN FORMATTREE的区别单个 Iterator 内容解读 案例分析案例1 文件排序案例2 简单的JOIN查询 参考资料:https://hackmysql.com/book-2/ EXPLAIN ANALYZE是什么 EXPLAIN ANALYZE是MySQL8.…...
RestClientException异常
什么情况下会抛出RestClientException异常 RestClientException 异常通常在使用 Spring 的 RestTemplate 进行 RESTful API 调用时抛出。以下是一些常见的情况: 网络问题:当无法连接到目标服务器时,例如网络中断或服务器不可达。 HTTP 状态…...
poi如何实现自定义导出Excel-纵向横向合并单元格,自定义填充数据列
前情提要 首先需要明确自己需要导出的excel构成是如何的,比如我需要导出一个自定义表头的excel表格,第一行A到X是标题需要横向合并单元格,第二行和第三行是表头,A到J需要第二行和第三行纵向合并单元格,K到N的第二行需…...
6--苍穹外卖-SpringBoot项目中菜品管理 详解(二)
目录 菜品分页查询 需求分析和设计 代码开发 设计DTO类 设计VO类 Controller层 Service层接口 Service层实现类 Mapper层 功能测试 删除菜品 需求设计和分析 代码开发 Controller层 Service层接口 Service层实现类 Mapper层 功能测试 修改菜品 需求分析和设…...
游戏怎么录制?王者荣耀游戏录制指南:iOS与电脑端全面教程
在王者荣耀的战场上,每一个五杀、每一次极限逃生都可能成为你游戏生涯中的高光时刻。但这些瞬间往往转瞬即逝,如何将它们永久保存,成为你游戏历程中不可磨灭的印记呢?本文将为你揭晓答案。无论你是手持iPhone的iOS用户,…...
Vue.js组件开发指南
Vue.js组件开发指南 Vue.js 是一个渐进式的 JavaScript 框架,用于构建用户界面。它的核心是基于组件的开发模式。通过将页面分解为多个独立的、可复用的组件,开发者能够更轻松地构建复杂的应用。本文将深入探讨 Vue.js 组件开发的基础知识,并…...
【流计算】流计算概论
前言 作者在之前写过一个大数据的专栏,包含GFS、BigTable、MapReduce、HDFS、Hadoop、LSM树、HBase、Spark,专栏地址: https://blog.csdn.net/joker_zjn/category_12631789.html?fromshareblogcolumn&sharetypeblogcolumn&sharerI…...
20230819盘锦锦州葫芦岛自驾
2023年08月19日,上午带娃和老人驾车前往朝阳,逛凤凰山,中午吃了免费的素面味道不错。下午开车去鸟化石公园单独买儿童票43元。晚上驾车到盘锦,住红海滩民宿95元。 2023年08月20日,逛盘锦红海滩一天,有稻田画…...
Unity 与虚幻引擎对比:两大游戏开发引擎的优劣分析
在游戏开发领域,Unity 和虚幻引擎(Unreal Engine)是两款最为知名且广泛使用的引擎。它们各有特点,适合不同类型的开发者和项目。在这篇博客中,我们将深入探讨这两大引擎的核心功能、适用场景、优缺点,以及如…...
UDS_4_传输存储的数据功能单元
目录 一. DTC 二. 0x14服务 三. 0x19服务 3.1 0x19服务 3.2 0x01子功能 3.3 0x02子功能 3.4 0x04子功能 3.5 0x06子功能 3.6 0x0A子功能 一. DTC 》DTC-Diagnostic Trouble Code J1939-73 DTCFormat DTC SPN FMI CM OC 8-1位 8-1位 8-6位 5-1位 8位 7-1位 字节1 字节…...
第二百五十八节 JPA教程 - JPA查询选择两个实体示例
JPA教程 - JPA查询选择两个实体示例 以下JPQL从两个实体中选择。 List l em.createQuery("SELECT d, m FROM Department d, Professor m WHERE d m.department").getResultList();例子 以下代码来自Professor.java。 package cn.w3cschool.common;import java.…...
数据库三级模式结构
三级模式结构 1. 外模式(External Schema)——“用户看到的楼层”2. 概念模式(Conceptual Schema)——“图书馆的核心”3. 内模式(Internal Schema)——“图书馆的地下室”举例1. 概念模式的例子2. 外模式的…...
【小程序websocket最佳实践,有心跳和断线重连】
小程序websocket最佳实践,有心跳和断线重连 封装了WebSocketHandler类,用于管理websocket链接,保证链接的稳定和可靠,该类主要适用于小程序,但其设计思想和方法也适用于其他平台。 export default class WebSocketHa…...
自然资源部最新Nature正刊!!!
2024年8月21日,国际顶级期刊《Nature》发表了自然资源部第二海洋研究所李家彪院士为通讯作者,张涛为第一作者的论文“超慢速扩张加克洋中脊的高变化岩浆增生”。这一成果颠覆了国际海洋学术界半个多世纪以来一直认为的超慢速扩张洋中脊岩浆供给极度贫瘠的…...
git分支-创建、合并、删除
Git会将每次提交串成一条时间线,这条时间线就是一个分支。在最初,只有一个master分支 在目录下创建项目 对目录进行输入 项目被修改 创建dev分支 合并分支 删除dev分支...
Python:Spoonfed - (2-10) 激励选择脚本(搬砖)
https://www.patreon.com/posts/python-spoonfed-31572219 2019年11月15日 利用上一课的选择函数,我们现在可以拼凑出一些脚本(有一些事情我们还没有解释,但应该很容易理解)。以下代码将允许您选择当前所选对象的父对象、顶级对…...
VS Code Python 文件导入提示 xxx Module 不存在解决方式
VS Code Python 文件导入提示 xxx Module 不存在解决方式 引言正文如何打开 setting.json 文件引言 之前在 https://blog.csdn.net/u011699626/article/details/142612579?spm=1001.2014.3001.5501 一文中我们介绍了如何配置 VS code 中 Jupyter Notebook 的文件导入环境,这…...
Android中的Activity与Fragment:深入解析与应用场景
在Android应用开发中,Activity和Fragment是两个核心概念,它们各自扮演着不同的角色,共同构成了用户界面的基础。理解并熟练掌握这两个组件的使用,对于开发高效、灵活且用户友好的Android应用至关重要。本文将深入解析Activity与Fr…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
