乐趣区

关于linux:初识-etcd

概述

Etcd 是 CoreOS 基于 Raft 开发的分布式 key-value 存储,可用于服务发现、共享配置以及一致性

保障(如数据库选主、分布式锁等)。

在分布式系统中,如何治理节点间的状态始终是一个难题,etcd 像是专门为集群环境的服务发现

和注册而设计,它提供了数据 TTL 生效、数据扭转监督、多值、目录监听、分布式锁原子操作等

性能,能够不便的跟踪并治理集群节点的状态。

  • 键值对存储:将数据存储在分层组织的目录中,如同在规范文件系统中
  • 监测变更:监测特定的键或目录以进行更改,并对值的更改做出反馈
  • 简略: curl 可拜访的用户的 API(HTTP+JSON)
  • 平安: 可选的 SSL 客户端证书认证
  • 疾速: 单实例每秒 1000 次写操作,2000+ 次读操作
  • 牢靠: 应用 Raft 算法保障一致性

次要性能

  • 根本的 key-value 存储
  • 监听机制
  • key 的过期及续约机制,用于监控和服务发现
  • 原子 Compare And Swap 和 Compare And Delete,用于分布式锁和 leader 选举

应用场景

键值对存储

etcd 是一个 键值存储 的组件,其余的利用都是基于其键值存储的性能开展。

  • 采纳 kv 型数据存储,个别状况下比关系型数据库快。
  • 反对动静存储 (内存) 以及动态存储(磁盘)。
  • 分布式存储,可集成为多节点集群。
  • 存储形式,采纳相似目录构造。(B+tree)

    • 只有叶子节点能力真正存储数据,相当于文件。

    • 叶子节点的父节点肯定是目录,目录不能存储数据。

服务注册与发现

  • 强一致性、高可用的服务存储目录

    基于 Raft 算法的 etcd 天生就是这样一个强一致性、高可用的服务存储目录。

  • 一种注册服务和服务健康状况的机制

    用户能够在 etcd 中注册服务,并且对注册的服务配置 key TTL,定时放弃服务的心跳以达

    到监控衰弱状态的成果

音讯公布与订阅

  • 在分布式系统中,最实用的一种组件间通信形式就是音讯公布与订阅。
  • 即构建一个配置共享核心,数据提供者在这个配置核心公布音讯,而音讯使用者则订阅他们 关怀的主题,一旦主题有音讯公布,就会实时告诉订阅者。
  • 通过这种形式能够做到分布式系统配置的集中式治理与动静更新。
  • 利用中用到的一些配置信息放到 etcd 上进行集中管理。
  • 利用在启动的时候被动从 etcd 获取一次配置信息,同时,在 etcd 节点上注册一个 Watcher 并 期待,当前每次配置有更新的时候,etcd 都会实时告诉订阅者,以此达到获取最新配置信息 的目标。

ETCD 部署

# 下载 ETCD 的二进制包,官网 Github 地址:https://github.com/etcd-io/etcd/releases,下载如下文件:wget https://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz

$ tar xf etcd-v3.4.13-linux-amd64.tar.gz
$ ls etcd-v3.4.13-linux-amd64/
Documentation  etcd  etcdctl  README-etcdctl.md  README.md  READMEv2-etcdctl.md

#将二进制包挪动到 bin 目录下:$ mkdir -p /opt/etcd/bin/
$ mv etcd-v3.4.13-linux-amd64/{etcd,etcdctl} /opt/etcd/bin/

# Systemd 治理
# 创立 ETCD 的 Systemd service 文件:$ cat /usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
 
[Service]
Type=notify
ExecStart=/opt/etcd/bin/etcd 
Restart=on-failure
LimitNOFILE=65535
 
[Install]
WantedBy=multi-user.target

# 启动 Etcd
$ systemctl daemon-reload
$ systemctl start etcd
$ systemctl enable etcd

Etcd 日常命令

# 查看集群成员状态
$ etcdctl member list --write-out=table   
+------------------+---------+---------+-----------------------+-----------------------+------------+
|        ID        | STATUS  |  NAME   |      PEER ADDRS       |     CLIENT ADDRS      | IS LEARNER |
+------------------+---------+---------+-----------------------+-----------------------+------------+
| 8e9e05c52164694d | started | default | http://localhost:2380 | http://localhost:2379 |      false |
+------------------+---------+---------+-----------------------+-----------------------+------------+

# 写入数据
$ etcdctl --endpoints=localhost:2379 put /kubesre 123 
OK

# 读取数据
$ etcdctl --endpoints=localhost:2379 get  /kubesre 
/kubesre
123

# 按 key 的前缀查问数据
$ etcdctl --endpoints=localhost:2379 get --prefix / 
/kubesre
123

# 只显示键值
etcdctl --endpoints=localhost:2379 get --prefix / --keys-only --debug 
ETCDCTL_CACERT=
ETCDCTL_CERT=
ETCDCTL_COMMAND_TIMEOUT=5s
ETCDCTL_DEBUG=true
ETCDCTL_DIAL_TIMEOUT=2s
ETCDCTL_DISCOVERY_SRV=
ETCDCTL_DISCOVERY_SRV_NAME=
ETCDCTL_ENDPOINTS=[localhost:2379]
ETCDCTL_HEX=false
ETCDCTL_INSECURE_DISCOVERY=true
ETCDCTL_INSECURE_SKIP_TLS_VERIFY=false
ETCDCTL_INSECURE_TRANSPORT=true
ETCDCTL_KEEPALIVE_TIME=2s
ETCDCTL_KEEPALIVE_TIMEOUT=6s
ETCDCTL_KEY=
ETCDCTL_PASSWORD=
ETCDCTL_USER=
ETCDCTL_WRITE_OUT=simple
WARNING: 2021/12/22 20:32:52 Adjusting keepalive ping interval to minimum period of 10s
WARNING: 2021/12/22 20:32:52 Adjusting keepalive ping interval to minimum period of 10s
INFO: 2021/12/22 20:32:52 parsed scheme: "endpoint"
INFO: 2021/12/22 20:32:52 ccResolverWrapper: sending new addresses to cc: [{localhost:2379  <nil> 0 <nil>}]
/kubesre

点击 “ 浏览原文 ” 获取更好的浏览体验!

退出移动版