最近在给客户的saas私有化布置的过程中客户要求服务注册与发现需求运用k8s本身的服务注册与发现。在学习了Spring Cloud Kubernetes后也学习了etcd相关知识,整理一下,共享给我们
etcd基本概念
etcd是一个高可用的分布式键值存储体系,是CoreOS(现在隶属于Red Hat)公司开发的一个开源项目。它供给了一个简略的接口来存储和检索键值对数据,并运用Raft协议实现了分布式一致性。etcd广泛应用于Docker、Kubernetes等分布式体系中,用于存储装备信息、服务发现、领导者推举等方面。以下是一些关于
etcd的基本知识
-
Etcd的界说:Etcd是一个分布式的、高可用的键值存储体系,具有快速响应、支撑高并发等特色。
-
Etcd的长处:高可用、数据一致性、快速响应、支撑分布式业务。
-
Etcd的应用场景:存储集群中各种装备信息、元数据以及服务发现等。
-
Etcd的数据结构:类似于键值对的数据结构,支撑多种数据类型,如字符串、整数、布尔、数组等。
-
Etcd的API:供给丰厚的API接口,通过HTTP协议进行拜访和操作。
-
Etcd的数据同步:Etcd运用Raft协议来保证数据的一致性和高可用性,在多个节点之间同步数据。
-
Etcd的集群布置:Etcd能够布置为单节点或多节点集群,多节点集群能够进步体系的可用性和性能。
-
Etcd的安全性:Etcd供给了诸如SSL/TLS加密、授权、拜访操控等安全机制,保障了数据的安全性。
-
Etcd的监控:Etcd供给了各种监控目标和东西,便利办理员对集群进行监控和办理。
-
Etcd的常用东西:包括etcdctl指令行东西、etcd browser浏览器、etcd dashboard仪表板、etcdwatch等。
etcd优势
etcd是一种分布式键值存储体系,具有以下特色和优势:
-
强一致性:etcd运用Raft协议实现强一致性,保证每个节点上的数据始终保持一致。
-
高可用性:etcd能够通过多副本和自动故障搬运机制来实现高可用性,即便某个节点故障,也能够保证服务不中断。
-
高性能:etcd采用预写日志(WAL)技能,能够快速写入数据,同时还支撑快速读取和查询。
-
分布式:etcd能够在多台服务器上运转,数据能够在多个节点之间分布,进步了体系的可伸缩性和性能。
-
安全性:etcd支撑TLS加密和认证,保证数据传输的安全性。
-
简略易用:etcd供给简略易用的HTTP/JSON API,能够便利地进行数据读写和查询。
-
开源免费:etcd是一个完全开源的项目,具有Apache 2.0许可证。
etcd装置和测验及学习
etcd下载地址
github.com/etcd-io/etc…
单机版装置
etcd是一个高可用的、分布式的键值对存储体系。以下是etcd单机版的装置过程:
- 下载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/
- 创立etcd数据存储目录
创立一个数据存储目录用于etcd的数据存储:
sudo mkdir -p /var/lib/etcd/
- 创立etcd装备文件
创立一个etcd的装备文件/etc/etcd.conf
,并填入以下内容:
# etcd监听的IP地址和端口
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379"
# etcd数据存储目录
ETCD_DATA_DIR="/var/lib/etcd/"
- 发动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
- 验证etcd单机版装置
运用etcdctl东西来执行一个简略的键值对的写操作来验证etcd单机版是否成功装置:
sudo ETCDCTL_API=3 etcdctl put key1 value1
然后运用get
指令读取刚刚写入的键值对:
sudo ETCDCTL_API=3 etcdctl get key1
假如能够读取到之前写入的键值对,则说明etcd单机版现已成功装置。
etcd高可用版本装置
- 环境准备
- 3台服务器,体系为CentOS7,IP别离为192.168.1.11、192.168.1.12、192.168.1.15。ip为示例我们能够依据实际情况调整。
- 保证所有服务器都现已装置了etcd。
- 保证所有服务器的防火墙现已封闭或者设置了对应端口的放行规矩。
- 装备集群
在每台服务器上创立一个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的值是唯一的。
- 发动集群
在每个服务器上别离发动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
- 测验高可用
在任意一台服务器上创立一个测验key:
etcdctl set testkey testvalue
然后在另一台服务器上检查key是否现已同步:
etcdctl get testkey
假如输出testvalue,则表明高可用现已收效。
需求留意的是,当某个节点出现故障时,整个集群仍然能够正常作业,并且能够继续读写数据。当故障节点康复之后,它会自动加入集群,并开端同步数据。