最近在给客户的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下载地址
单机版安装
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,则表示高可用已经生效。
需要注意的是,当某个节点出现故障时,整个集群仍然可以正常工作,并且可以继续读写数据。当故障节点恢复之后,它会自动加入集群,并开始同步数据。