最近在给客户的saas私有化布置的过程中客户要求服务注册与发现需求运用k8s本身的服务注册与发现。在学习了Spring Cloud Kubernetes后也学习了etcd相关知识,整理一下,共享给我们

etcd基本概念

etcd是一个高可用的分布式键值存储体系,是CoreOS(现在隶属于Red Hat)公司开发的一个开源项目。它供给了一个简略的接口来存储和检索键值对数据,并运用Raft协议实现了分布式一致性。etcd广泛应用于Docker、Kubernetes等分布式体系中,用于存储装备信息、服务发现、领导者推举等方面。以下是一些关于

etcd的基本知识

  1. Etcd的界说:Etcd是一个分布式的、高可用的键值存储体系,具有快速响应、支撑高并发等特色。

  2. Etcd的长处:高可用、数据一致性、快速响应、支撑分布式业务。

  3. Etcd的应用场景:存储集群中各种装备信息、元数据以及服务发现等。

  4. Etcd的数据结构:类似于键值对的数据结构,支撑多种数据类型,如字符串、整数、布尔、数组等。

  5. Etcd的API:供给丰厚的API接口,通过HTTP协议进行拜访和操作。

  6. Etcd的数据同步:Etcd运用Raft协议来保证数据的一致性和高可用性,在多个节点之间同步数据。

  7. Etcd的集群布置:Etcd能够布置为单节点或多节点集群,多节点集群能够进步体系的可用性和性能。

  8. Etcd的安全性:Etcd供给了诸如SSL/TLS加密、授权、拜访操控等安全机制,保障了数据的安全性。

  9. Etcd的监控:Etcd供给了各种监控目标和东西,便利办理员对集群进行监控和办理。

  10. Etcd的常用东西:包括etcdctl指令行东西、etcd browser浏览器、etcd dashboard仪表板、etcdwatch等。

etcd优势

etcd是一种分布式键值存储体系,具有以下特色和优势:

  1. 强一致性:etcd运用Raft协议实现强一致性,保证每个节点上的数据始终保持一致。

  2. 高可用性:etcd能够通过多副本和自动故障搬运机制来实现高可用性,即便某个节点故障,也能够保证服务不中断。

  3. 高性能:etcd采用预写日志(WAL)技能,能够快速写入数据,同时还支撑快速读取和查询。

  4. 分布式:etcd能够在多台服务器上运转,数据能够在多个节点之间分布,进步了体系的可伸缩性和性能。

  5. 安全性:etcd支撑TLS加密和认证,保证数据传输的安全性。

  6. 简略易用:etcd供给简略易用的HTTP/JSON API,能够便利地进行数据读写和查询。

  7. 开源免费:etcd是一个完全开源的项目,具有Apache 2.0许可证。

etcd装置和测验及学习

etcd下载地址

github.com/etcd-io/etc…

单机版装置

etcd是一个高可用的、分布式的键值对存储体系。以下是etcd单机版的装置过程:

  1. 下载etcd二进制文件

从官网下载etcd的二进制文件并解压缩到/usr/local/bin/目录下:

wget https://github.com/etcd-io/etcd/releases/download/v3.4.16/etcd-v3.4.16-linux-amd64.tar.gz
tar -xvf etcd-v3.4.16-linux-amd64.tar.gz
sudo mv etcd-v3.4.16-linux-amd64/etcd* /usr/local/bin/
  1. 创立etcd数据存储目录

创立一个数据存储目录用于etcd的数据存储:

sudo mkdir -p /var/lib/etcd/
  1. 创立etcd装备文件

创立一个etcd的装备文件/etc/etcd.conf,并填入以下内容:

# etcd监听的IP地址和端口
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379"
# etcd数据存储目录
ETCD_DATA_DIR="/var/lib/etcd/"
  1. 发动etcd服务

运用以下指令发动etcd服务:

sudo systemctl start etcd

能够运用以下指令检查etcd服务是否成功发动:

sudo systemctl status etcd

假如服务发动成功,则会显现类似以下的输出:

 etcd.service - etcd
   Loaded: loaded (/etc/systemd/system/etcd.service; disabled; vendor preset: enabled)
   Active: active (running) since Tue 2022-02-22 17:05:24 CST; 6s ago
 Main PID: 17333 (etcd)
    Tasks: 22 (limit: 4915)
   Memory: 18.6M
   CGroup: /system.slice/etcd.service
           └─17333 /usr/local/bin/etcd --config-file /etc/etcd.conf
  1. 验证etcd单机版装置

运用etcdctl东西来执行一个简略的键值对的写操作来验证etcd单机版是否成功装置:

sudo ETCDCTL_API=3 etcdctl put key1 value1

然后运用get指令读取刚刚写入的键值对:

sudo ETCDCTL_API=3 etcdctl get key1

假如能够读取到之前写入的键值对,则说明etcd单机版现已成功装置。

etcd高可用版本装置

  1. 环境准备
  • 3台服务器,体系为CentOS7,IP别离为192.168.1.11、192.168.1.12、192.168.1.15。ip为示例我们能够依据实际情况调整。
  • 保证所有服务器都现已装置了etcd。
  • 保证所有服务器的防火墙现已封闭或者设置了对应端口的放行规矩。
  1. 装备集群

在每台服务器上创立一个etcd装备文件,途径为/etc/etcd/etcd.conf:

#[member]
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.11:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.11:2379"
#[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.11:2380"
ETCD_INITIAL_CLUSTER="default=http://192.168.1.11:2380,default=http://192.168.1.12:2380,default=http://192.168.1.13:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.11:2379"
#[proxy]
#ETCD_PROXY="off"
#[security]
#ETCD_CERT_FILE=""
#ETCD_KEY_FILE=""
#ETCD_CLIENT_CERT_AUTH="false"
#ETCD_TRUSTED_CA_FILE=""
#[logging]
#ETCD_DEBUG="false"
#ETCD_LOG_LEVEL="info"
#ETCD_LOG_FILE=""

留意修改IP地址和端口号,并保证每个装备文件中ETCD_NAME的值是唯一的。

  1. 发动集群

在每个服务器上别离发动etcd:

systemctl start etcd

能够运用以下指令检查etcd是否发动成功:

etcdctl cluster-health

假如输出类似以下内容,则表明集群现已发动成功:


member 1c8fba13ca5cad0 is healthy: got healthy result from http://192.168.1.11:2379
member 25d75ec3e97e3b59 is healthy: got healthy result from http://192.168.1.12:2379
member 75d4593a3c3113b6 is healthy: got healthy result from http://192.168.1.13:2379
cluster is healthy
  1. 测验高可用

在任意一台服务器上创立一个测验key:

etcdctl set testkey testvalue

然后在另一台服务器上检查key是否现已同步:

etcdctl get testkey

假如输出testvalue,则表明高可用现已收效。

需求留意的是,当某个节点出现故障时,整个集群仍然能够正常作业,并且能够继续读写数据。当故障节点康复之后,它会自动加入集群,并开端同步数据。