当前位置: 首页 > news >正文

【存储服务】一文带你了解ETCD

etcd 是一个高可用的分布式键值(key-value)存储系统,主要用于共享配置和服务发现。它由 CoreOS 团队在 2013 年 6 月发起,并采用 Go 语言实现,利用 Raft 一致性算法确保数据在多个节点之间的强一致性。etcd 是许多分布式系统的核心组件,尤其是 Kubernetes 集群中的关键存储服务。

kubernetes实战:https://pan.quark.cn/s/7fa49a01eff8

每天5分钟玩转kubernetes:https://pan.quark.cn/s/27c01ee230a1

更多学习文档:https://pan.quark.cn/s/6d34e02ad631

主要特点

1. 简单易用
  • 安装简单:etcd 提供了二进制文件和包管理器安装等多种方式,安装过程简便快捷。
  • API 简洁:etcd 提供了 HTTP API,方便用户通过 RESTful 方式进行交互,使用起来非常简单。
2. 高一致性
  • Raft 一致性算法:etcd 采用了 Raft 一致性算法,确保了分布式系统中数据的一致性和可靠性。Raft 算法通过选举 leader 节点来处理所有的写操作,确保数据的强一致性。

    2

3. 高可用性
  • 多节点集群:etcd 可以配置成多节点集群,通过多个节点的冗余来提高系统的可用性。即使部分节点出现故障,整个集群仍然可以正常工作。
  • 自动故障转移:etcd 集群中的 leader 节点如果发生故障,其他节点会自动进行选举,选出新的 leader 节点,确保服务的连续性。
4. 安全性
  • SSL 证书验证:etcd 支持通过 SSL 证书进行客户端认证,确保通信的安全性。
  • 权限控制:etcd 提供了细粒度的权限控制机制,可以对不同的用户和角色进行权限管理。
5. 高性能
  • 高吞吐量:etcd 单实例可以支持每秒 2000+ 读操作,官方提供的基准测试脚本展示了其卓越的性能。
  • 低延迟:etcd 的延迟较低,特别是在集群内部,可以通过适当调整集群来进一步优化性能。

使用场景

1. 服务注册与发现
  • 服务注册:应用程序启动时可以在 etcd 中注册自己的服务信息,包括服务名称、IP 地址和端口号等。
  • 服务发现:其他应用程序可以通过查询 etcd 来发现所需的服务,并建立连接。etcd 提供了强大的服务发现机制,支持服务的健康检查和负载均衡。
2. 配置管理
  • 集中管理配置:应用程序的配置信息可以存储在 etcd 中,方便动态更新和集中管理。
  • 动态更新:应用程序可以通过监听 etcd 中的配置变化,实时获取最新的配置信息,实现热更新。
3. 分布式锁
  • 互斥锁:利用 etcd 的原子性操作,可以在多个应用实例之间实现互斥锁,避免资源竞争。
  • 分布式队列:etcd 还可以用于实现分布式队列,确保多个节点之间的任务调度和协调。
4. 消息发布与订阅
  • 配置中心:etcd 可以作为配置中心,数据提供者在这个配置中心发布消息,而消息使用者则订阅他们关心的主题,一旦主题有消息发布,就会实时通知订阅者。
  • 动态更新:通过 Watch 机制,etcd 可以实时通知订阅者配置信息的变化,实现分布式系统配置的集中式管理和动态更新。

安装与配置

1. 单机安装
  • 下载二进制文件
    wget https://github.com/etcd-io/etcd/releases/download/v3.4.23/etcd-v3.4.23-linux-amd64.tar.gz
    tar -zxf etcd-v3.4.23-linux-amd64.tar.gz -C /usr/local
  • 添加环境变量
    echo 'export PATH="$PATH:/usr/local/etcd-v3.4.23-linux-amd64"' >> /etc/profile
    source /etc/profile
  • 验证安装
    etcd --version
    etcdctl version
2. 集群安装
  • 配置文件
    mkdir -p /etc/etcd /data/etcd
    cat > /etc/etcd/etcd.conf <<EOF
    name: 'etcd-1'
    data-dir: '/data/etcd'
    listen-client-urls: 'http://192.168.10.128:2379,http://127.0.0.1:2379'
    listen-peer-urls: 'http://192.168.10.128:2380'
    initial-advertise-peer-urls: 'http://192.168.10.128:2380'
    initial-cluster: 'etcd-1=http://192.168.10.128:2380'
    initial-cluster-state: 'new'
    EOF
  • 启动服务
    systemctl daemon-reload
    systemctl start etcd
    systemctl enable etcd
  • 验证集群状态
    etcdctl endpoint status --cluster -w table

常用命令

  • 查看集群健康状况
    etcdctl endpoint health
  • 查看集群成员列表
    etcdctl member list
  • 写入键值对
    etcdctl put mykey "this is a value"
  • 读取键值
    etcdctl get mykey
  • 删除键值
    etcdctl del mykey
  • 执行事务
    etcdctl txn <<EOF
    put key1 "hello"
    put key2 "world"
    get key1
    get key2
    EOF
  • 查看历史版本
    etcdctl get mykey --history
  • 回滚到指定版本
    etcdctl get mykey --rev=3
  • 备份和恢复
    etcdctl snapshot save snapshot.db
    etcdctl snapshot restore snapshot.db

安全配置

  • 启用 TLS
    • 生成证书和密钥:可以使用 openssl 或其他工具生成自签名证书。
    • 配置 TLS:在配置文件中增加以下内容:
      client-cert-auth: true
      trusted-ca-file: /path/to/ca.pem
      cert-file: /path/to/server.pem
      key-file: /path/to/server-key.pem
    • 启动 etcd
      etcd --config-file=etcd.conf

结论

etcd 作为一个高可用的分布式键值存储系统,凭借其简单易用、高一致性、高可用性、安全性和高性能等特点,广泛应用于微服务架构和 Kubernetes 集群中。无论是作为配置中心、服务发现机制、分布式锁还是消息发布与订阅系统,etcd 都能提供稳定可靠的服务,满足分布式系统的需求。


http://www.mrgr.cn/news/69705.html

相关文章:

  • 从0开始学习机器学习--Day25--SVM作业
  • 【Pikachu】目录遍历实战
  • 【MinIO】Python 运用 MinIO 实现简易文件系统
  • 【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测
  • Chrome使用IE内核
  • 系统启动时将自动加载环境变量,并后台启动 MinIO、Nacos 和 Redis 服务
  • 政治经济学笔记
  • 从关键新闻和最新技术看AI行业发展(第三十四期2024.10.14-10.27) |【WeThinkIn老实人报】
  • 计算机网络——1.1计算机网络概述
  • PG COPY 与 INSERT方式导入数据时, 表默认值表现的不同
  • 【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
  • Linux系统常用命令
  • 【IC每日一题:IC验证面试--UVM验证-2】
  • 多线程---线程池
  • 保护Kubernetes免受威胁:容器安全的有效实践
  • 锐捷技能大赛—L2TP隧道与L2TP Over IPSec嵌套,并在隧道内运行OSPF
  • 【力扣热题100】[Java版] 刷题笔记-169. 多数元素
  • 丹摩征文活动 |【网络原理】关于HTTP的进化之HTTPS的加密原理的那些事
  • SQL50题
  • vue3入门和实战-vue3项目创建
  • unity下添加c#脚本
  • Java中的享元模式
  • PostgreSQL pg-xact(clog)目录文件缺失处理
  • C++11 --可变参数模版
  • 【新书】掌握大语言模型:高级技术、应用、尖端方法和顶尖LLMs
  • 模型 长尾效应