网站是什么?,wordpress黑帽插件,软件开发公司流程,网站如何做好seo1 介绍 https://etcd.io/docs/v3.5/ etcd是一个高可用的分布式键值存储系统#xff0c;是CoreOS#xff08;现在隶属于Red Hat#xff09;公司开发的一个开源项目。它提供了一个简单的接口来存储和检索键值对数据#xff0c;并使用Raft协议实现了分布式一致性。etcd广泛应用…1 介绍 https://etcd.io/docs/v3.5/ etcd是一个高可用的分布式键值存储系统是CoreOS现在隶属于Red Hat公司开发的一个开源项目。它提供了一个简单的接口来存储和检索键值对数据并使用Raft协议实现了分布式一致性。etcd广泛应用于Docker、Kubernetes等分布式系统中用于存储配置信息、服务发现、领导者选举等方面。
2 etcd高可用集群部署
2.1 服务器配置
主机名ip地址cpu数量内存数量etcd1172.18.101.3948etcd2172.18.101.4048etcd3172.18.101.4148
2.2 部署etcd集群
安装包下载地址 https://github.com/etcd-io/etcd/tags 以下操作在三个etcd节点上进行
[rootetcd-1 ~]# wget https://github.com/etcd-io/etcd/releases/download/v3.4.27/etcd-v3.4.27-linux-amd64.tar.gz
[rootetcd-1 ~]# tar xvf etcd-v3.4.27-linux-amd64.tar.gz
[rootetcd-1 ~]# mv etcd-v3.4.27-linux-amd64/etcd* /usr/local/bin/ ##复制etcd命令文件
[rootetcd-1 ~]# mkdir -p /var/lib/etcd/ ##创建数据存放目录
[rootetcd-1 ~]# mkdir -p /etc/etcd ##创建配置文件存放目录
三个节点设置etcd配置文件三个节点的防火墙要放行2379及2380端口
#etcd节点1
[rootetcd-1 ~]# cat /etc/etcd/etcd.conf
ETCD_NAMEetcd1
ETCD_DATA_DIR/var/lib/etcd
ETCD_LISTEN_PEER_URLShttp://172.18.101.39:2380
ETCD_LISTEN_CLIENT_URLShttp://127.0.0.1:2379,http://172.18.101.39:2379
ETCD_INITIAL_ADVERTISE_PEER_URLShttp://172.18.101.39:2380
ETCD_INITIAL_CLUSTERetcd1http://172.18.101.39:2380,etcd2http://172.18.101.40:2380,etcd3http://172.18.101.41:2380
ETCD_INITIAL_CLUSTER_STATEnew
ETCD_INITIAL_CLUSTER_TOKENsingless
ETCD_ADVERTISE_CLIENT_URLShttp://172.18.101.39:2379#etcd节点2
[rootetcd-2 ~]# cat /etc/etcd/etcd.conf
ETCD_NAMEetcd2
ETCD_DATA_DIR/var/lib/etcd
ETCD_LISTEN_PEER_URLShttp://172.18.101.40:2380
ETCD_LISTEN_CLIENT_URLShttp://127.0.0.1:2379,http://172.18.101.40:2379
ETCD_INITIAL_ADVERTISE_PEER_URLShttp://172.18.101.40:2380
ETCD_INITIAL_CLUSTERetcd1http://172.18.101.39:2380,etcd2http://172.18.101.40:2380,etcd3http://172.18.101.41:2380
ETCD_INITIAL_CLUSTER_STATEnew
ETCD_INITIAL_CLUSTER_TOKENsingless
ETCD_ADVERTISE_CLIENT_URLShttp://172.18.101.40:2379#etcd节点3
[rootetcd-3 ~]# cat /etc/etcd/etcd.conf
ETCD_NAMEetcd3
ETCD_DATA_DIR/var/lib/etcd
ETCD_LISTEN_PEER_URLShttp://172.18.101.41:2380
ETCD_LISTEN_CLIENT_URLShttp://127.0.0.1:2379,http://172.18.101.41:2379
ETCD_INITIAL_ADVERTISE_PEER_URLShttp://172.18.101.41:2380
ETCD_INITIAL_CLUSTERetcd1http://172.18.101.39:2380,etcd2http://172.18.101.40:2380,etcd3http://172.18.101.41:2380
ETCD_INITIAL_CLUSTER_STATEnew
ETCD_INITIAL_CLUSTER_TOKENsingless
ETCD_ADVERTISE_CLIENT_URLShttp://172.18.101.41:2379 ETCD_NAME指定ETCD节点的名称。每个节点在集群中应具有唯一的名称以便进行识别和通信。 ETCD_DATA_DIR指定ETCD存储数据的目录路径。ETCD使用此目录来持久化存储数据。 ETCD_LISTEN_PEER_URLS指定ETCD节点监听对等节点连接的URL。对等URL用于节点之间的通信和数据同步。 ETCD_LISTEN_CLIENT_URLS指定ETCD节点监听客户端连接的URL列表。客户端URL用于与ETCD集群进行交互例如执行读取或写入操作。 ETCD_INITIAL_ADVERTISE_PEER_URLS指定ETCD节点初始公告对等节点连接的URL。当新节点加入集群时将向其他节点宣告自己的URL以便其他节点可以找到并连接到它。 ETCD_INITIAL_CLUSTER指定ETCD集群的初始成员列表及其对等节点连接URL。每个成员由名称和对等节点连接URL组成用逗号分隔。在启动集群时指定初始成员列表用于插入新节点。 ETCD_INITIAL_CLUSTER_STATE指定ETCD集群的初始状态。可选值为new和existing。new表示创建一个新的集群existing表示已经存在的集群。 ETCD_INITIAL_CLUSTER_TOKEN指定ETCD集群的初始令牌。所有成员在启动时应使用相同的令牌以便它们可以识别和加入相同的集群。 ETCD_ADVERTISE_CLIENT_URLS指定ETCD节点公告给客户端的连接URL。客户端连接URL用于向应用程序或工具公开ETCD节点以便进行读取和写入操作。 配置systemd管理etcd三个节点配置相同
[rootetcd-1 ~]# cat /usr/lib/systemd/system/etcd.service
[Unit]
DescriptionEtcd Server
Afternetwork.target
Afternetwork-online.target
Wantsnetwork-online.target[Service]
Userroot
Typenotify
EnvironmentFile-/etc/etcd/etcd.conf
ExecStart/usr/local/bin/etcd
Restarton-failure
RestartSec10s
LimitNOFILE40000[Install]
WantedBymulti-user.target
三个节点上启动服务
[rootetcd-1 ~]# systemctl enable etcd
[rootetcd-1 ~]# systemctl start etcd
2.3 部署后集群状态检查
2.3.1 查看集群成员
[rootetcd-1 ~]# etcdctl member list ##列出集群成员
916281517eb238d9, started, etcd2, http://172.18.101.40:2380, http://172.18.101.40:2379, false
9a04401d57e3afba, started, etcd1, http://172.18.101.39:2380, http://172.18.101.39:2379, false
9f9b71960dcb7180, started, etcd3, http://172.18.101.41:2380, http://172.18.101.41:2379, false
[rootetcd-1 ~]# etcdctl -w table endpoint status --endpoints172.18.101.39:2379,172.18.101.40:2379,172.18.101.41:2379 ##查看集群leader是哪个节点
----------------------------------------------------------------------------------------------------------------------------------
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
----------------------------------------------------------------------------------------------------------------------------------
| 172.18.101.39:2379 | 9a04401d57e3afba | 3.4.27 | 20 kB | true | false | 123 | 14 | 14 | |
| 172.18.101.40:2379 | 916281517eb238d9 | 3.4.27 | 20 kB | false | false | 123 | 14 | 14 | |
| 172.18.101.41:2379 | 9f9b71960dcb7180 | 3.4.27 | 20 kB | false | false | 123 | 14 | 14 | |
----------------------------------------------------------------------------------------------------------------------------------2.3.2 查看集群成员的健康状态
[rootetcd-1 ~]# etcdctl -w table endpoint health --endpoints172.18.101.39:2379,172.18.101.40:2379,172.18.101.41:2379
-----------------------------------------------
| ENDPOINT | HEALTH | TOOK | ERROR |
-----------------------------------------------
| 172.18.101.39:2379 | true | 2.190331ms | |
| 172.18.101.41:2379 | true | 2.517434ms | |
| 172.18.101.40:2379 | true | 3.06371ms | |
----------------------------------------------- 3 某个节点异常如何处理 使用命令移除节点 删除异常节点数据目录 重新将节点添加至集群
3.1 移除节点
假设etcd3出现了异常
[rootetcd-1 ~]# etcdctl member list ##第一列为节点的id
916281517eb238d9, started, etcd2, http://172.18.101.40:2380, http://172.18.101.40:2379, false
9a04401d57e3afba, started, etcd1, http://172.18.101.39:2380, http://172.18.101.39:2379, false
9f9b71960dcb7180, started, etcd3, http://172.18.101.41:2380, http://172.18.101.41:2379, false
[rootetcd-1 ~]#
[rootetcd-1 ~]# etcdctl member remove 9f9b71960dcb7180 ##通过节点的id将节点删除
Member 9f9b71960dcb7180 removed from cluster 8356fccf618a037f
[rootetcd-1 ~]# etcdctl member list
916281517eb238d9, started, etcd2, http://172.18.101.40:2380, http://172.18.101.40:2379, false
9a04401d57e3afba, started, etcd1, http://172.18.101.39:2380, http://172.18.101.39:2379, false
3.2 删除异常节点的数据目录
[rootetcd-3 ~]# rm -rf /var/lib/etcd
[rootetcd-3 ~]# cat /etc/etcd/etcd.conf ##修改ETCD_INITIAL_CLUSTER_STATE为exsiting
ETCD_NAMEetcd3
ETCD_DATA_DIR/var/lib/etcd
ETCD_LISTEN_PEER_URLShttp://172.18.101.41:2380
ETCD_LISTEN_CLIENT_URLShttp://127.0.0.1:2379,http://172.18.101.41:2379
ETCD_INITIAL_ADVERTISE_PEER_URLShttp://172.18.101.41:2380
ETCD_INITIAL_CLUSTERetcd1http://172.18.101.39:2380,etcd2http://172.18.101.40:2380,etcd3http://172.18.101.41:2380
ETCD_INITIAL_CLUSTER_STATEexisting ##修改为existing
ETCD_INITIAL_CLUSTER_TOKENsingless
ETCD_ADVERTISE_CLIENT_URLShttp://172.18.101.41:2379 3.3 将节点添加至集群
[rootetcd-1 ~]# etcdctl member add etcd3 --peer-urlshttp://172.18.101.41:2380
Member 51fc8f5f71060fdc added to cluster 8356fccf618a037f
[rootetcd-1 ~]# etcdctl member list ##可以看到节点添加后处于一个未启动的状态需要手动去etcd-3节点上启动一下etcd服务
51fc8f5f71060fdc, unstarted, , http://172.18.101.41:2380, , false
916281517eb238d9, started, etcd2, http://172.18.101.40:2380, http://172.18.101.40:2379, false
9a04401d57e3afba, started, etcd1, http://172.18.101.39:2380, http://172.18.101.39:2379, false 在etcd-3上启动服务即可
[rootetcd-3 ~]# systemctl start etcd
[rootetcd-1 ~]# etcdctl member list ##重新添加后节点的id会变属于正常现象
51fc8f5f71060fdc, started, etcd3, http://172.18.101.41:2380, http://172.18.101.41:2379, false
916281517eb238d9, started, etcd2, http://172.18.101.40:2380, http://172.18.101.40:2379, false
9a04401d57e3afba, started, etcd1, http://172.18.101.39:2380, http://172.18.101.39:2379, false
4 etcdctl增删改查操作 https://github.com/etcd-io/etcd/tree/main/etcdctl etcdctl 是用于与 ETCD 进行交互的命令行工具它提供了一系列命令和选项用于检索、设置、修改和删除 ETCD 中的数据。
4.1 etcd的数据存储模型
前面介绍过etcd是一个分布式的键值存储系统。etcd在键的组织上采用了层次化的空间结构类似于文件系统中目录的概念。但是并不存在目录的那种层级关系。
例如现在
类似于文件系统中的目录文件夹结构ETCD的命名空间允许以键的层次结构来组织数据并且每个键可以唯一地标识一个节点。顶层节点被称为根节点然后可以在根节点下创建子节点子节点又可以包含更多子节点以此类推。这种层次化的结构可以用于将数据进行分类、分类和组织。
例如假设我们有以下目录结构 /singless/test /singless/test/gender
在上述示例中/singless/test和/singless/test/gender有类似于目录一样的共同的索引前缀/和/singless但是并不存在目录的那种层级关系。它们都可以作为一个key存储相应的value。
4.2 增和改
增加数据和修改数据需要用到put命令进行操作
[rootetcd-1 ~]# etcdctl put /singless/test/gender male ##创建一个键/singless/test/gender值为male
OK
[rootetcd-1 ~]# etcdctl put /singless/test true ##创建一个键/singless/test值为test
OK 4.3 查询操作
查询操作需要使用到get参数
[rootetcd-1 ~]# etcdctl get /singless/test/gender ##根据具体的key查询对应的值
/singless/test/gender
male
[rootetcd-1 ~]# etcdctl get --prefix / ##根据索引前缀查询这里查询的是以/为前缀的key、value所以能看到所有的键值对
/singless/test
true
/singless/test/gender
male
[rootetcd-1 ~]# etcdctl put /singless/test false ##使用put修改键/singless/test的value
OK
[rootetcd-1 ~]# etcdctl get /singless/test
/singless/test
false 4.4 删除操作
删除操作使用del命令
[rootetcd-1 ~]# etcdctl del /singless/test ##可以指定key进行删除
1
[rootetcd-1 ~]# etcdctl get --prefix /
/singless/test/gender
male
[rootetcd-1 ~]# etcdctl del --prefix / ##也可以执行索引前缀进行删除
1
[rootetcd-1 ~]# etcdctl get --prefix /
5 k8s中的etcd
5.1 介绍
k8s中所有对象的manifest都需要保存到某个地方这样他们的manifest在api server重启和失败的时候才不会丢失因此引入了etcd。在k8s中只有api server和etcd直接交互其它组件都通过api server间接和etcd交互这样做的好处如下。 增强乐观锁系统及验证系统的健壮性 方便后续存储的替换只需修改api server组件的相关接口。
etcd是一个响应快、分布式、一致的KV存储也是k8s存储集群状态和元数据的唯一地方。 5.2 查看k8s中etcd存储的数据
[rootk8s-master01 ~]# kubectl get pod -n kube-system |grep etcd
etcd-k8s-master01 1/1 Running 1 47d
etcd-k8s-master02 1/1 Running 0 47d
etcd-k8s-master03 1/1 Running 0 47d
[rootk8s-master01 ~]#
[rootk8s-master01 ~]# kubectl exec -it -n kube-system etcd-k8s-master01 -- /bin/sh
sh-5.1# etcdctl member list --cacert/etc/kubernetes/pki/etcd/ca.crt --cert/etc/kubernetes/pki/etcd/server.crt --key/etc/kubernetes/pki/etcd/server.key
15c808b23512a31a, started, k8s-master02, https://10.0.107.77:2380, https://10.0.107.77:2379, false
5ca9692dbcd57e55, started, k8s-master03, https://10.0.113.204:2380, https://10.0.113.204:2379, false
f8b45063ae1a7dfa, started, k8s-master01, https://10.0.87.66:2380, https://10.0.87.66:2379, false
k8s中的etcd需要使用到证书进行认证 查看etcd中存储的数据可以手动在master节点上安装etcdctl命令
[rootk8s-master01 ~]# export ETCDCTL_API3 ##指定使用的api版本
[rootk8s-master01 ~]# etcdctl get --prefix --endpoints10.0.87.66:2379,10.0.107.77:2379,10.0.113.204:2379 --cacert/etc/kubernetes/pki/etcd/ca.crt --cert/etc/kubernetes/pki/etcd/server.crt --key/etc/kubernetes/pki/etcd/server.key |head -2
--endpoints指定etcd节点另外要使用到k8s证书证书通常在/etc/kubernetes/pki/目录下以下输出可以看到etcd中存储的k8s相关的键值数据。