This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.1.6. 分离 etcd 数据
对于大型、高密度的集群,如果键空间增长过大并超过空间配额,etcd 的性能将会受到影响。定期维护并处理碎片化的 etcd,以释放数据存储中的空间。监控 Prometheus 以了解 etcd 指标数据,并在需要时对其进行碎片处理;否则,etcd 可能会引发一个集群范围的警报,使集群进入维护模式,仅能接受对键的读和删除操作。
监控这些关键指标:
- 
						etcd_server_quota_backend_bytes,这是当前配额限制
- 
						etcd_mvcc_db_total_size_in_use_in_bytes,表示历史压缩后实际数据库使用量
- 
						etcd_debugging_mvcc_db_total_size_in_bytes会显示数据库大小,包括等待碎片整理的空闲空间
在导致磁盘碎片的事件后(如 etcd 历史记录紧凑)对 etcd 数据进行清理以回收磁盘空间。
历史压缩将自动每五分钟执行一次,并在后端数据库中造成混乱。此碎片空间可供 etcd 使用,但主机文件系统不可用。您必须对碎片 etcd 进行碎片清除,才能使这个空间可供主机文件系统使用。
				因为 etcd 将数据写入磁盘,所以其性能主要取决于磁盘性能。根据您的集群的具体情况,考虑每个月清理一次 etcd 碎片,或每个月清理两次。您还可以监控 etcd_db_total_size_in_bytes 指标,以确定是否需要进行碎片操作。
			
				您还可以通过检查 etcd 数据库大小(MB)来决定是否需要进行碎片整理。通过 PromQL 表达 (etcd_mvcc_db_total_size_in_bytes - etcd_mvcc_db_total_size_in_use_in_bytes)/1024/1024 来释放空间。
			
分离 etcd 是一个阻止性操作。在进行碎片处理完成前,etcd 成员不会响应。因此,在每个下一个 pod 要进行碎片清理前,至少等待一分钟,以便集群可以恢复正常工作。
按照以下步骤对每个 etcd 成员上的 etcd 数据进行碎片处理。
先决条件
- 
						您可以使用具有 cluster-admin角色的用户访问集群。
流程
- 确定哪个 etcd 成员是领导成员,因为领导会进行最后的碎片处理。 - 获取 etcd pod 列表: - oc get pods -n openshift-etcd -o wide | grep -v quorum-guard | grep etcd - $ oc get pods -n openshift-etcd -o wide | grep -v quorum-guard | grep etcd- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - etcd-ip-10-0-159-225.example.redhat.com 3/3 Running 0 175m 10.0.159.225 ip-10-0-159-225.example.redhat.com <none> <none> etcd-ip-10-0-191-37.example.redhat.com 3/3 Running 0 173m 10.0.191.37 ip-10-0-191-37.example.redhat.com <none> <none> etcd-ip-10-0-199-170.example.redhat.com 3/3 Running 0 176m 10.0.199.170 ip-10-0-199-170.example.redhat.com <none> <none> - etcd-ip-10-0-159-225.example.redhat.com 3/3 Running 0 175m 10.0.159.225 ip-10-0-159-225.example.redhat.com <none> <none> etcd-ip-10-0-191-37.example.redhat.com 3/3 Running 0 173m 10.0.191.37 ip-10-0-191-37.example.redhat.com <none> <none> etcd-ip-10-0-199-170.example.redhat.com 3/3 Running 0 176m 10.0.199.170 ip-10-0-199-170.example.redhat.com <none> <none>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 选择 pod 并运行以下命令来确定哪个 etcd 成员是领导: - oc rsh -n openshift-etcd etcd-ip-10-0-159-225.example.redhat.com etcdctl endpoint status --cluster -w table - $ oc rsh -n openshift-etcd etcd-ip-10-0-159-225.example.redhat.com etcdctl endpoint status --cluster -w table- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 基于此输出的 - IS LEADER列,- https://10.0.199.170:2379端点是领导。与上一步输出匹配此端点,领导的 pod 名称为- etcd-ip-10-0-199-170.example.redhat.com。
 
- 清理 etcd 成员。 - 连接到正在运行的 etcd 容器,传递 不是 领导的 pod 的名称: - oc rsh -n openshift-etcd etcd-ip-10-0-159-225.example.redhat.com - $ oc rsh -n openshift-etcd etcd-ip-10-0-159-225.example.redhat.com- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 取消设置 - ETCDCTL_ENDPOINTS环境变量:- unset ETCDCTL_ENDPOINTS - sh-4.4# unset ETCDCTL_ENDPOINTS- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 清理 etcd 成员: - etcdctl --command-timeout=30s --endpoints=https://localhost:2379 defrag - sh-4.4# etcdctl --command-timeout=30s --endpoints=https://localhost:2379 defrag- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Finished defragmenting etcd member[https://localhost:2379] - Finished defragmenting etcd member[https://localhost:2379]- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果发生超时错误,增加 - --command-timeout的值,直到命令成功为止。
- 验证数据库大小是否已缩小: - etcdctl endpoint status -w table --cluster - sh-4.4# etcdctl endpoint status -w table --cluster- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 本例显示这个 etcd 成员的数据库大小现在为 41 MB,而起始大小为 104 MB。 
- 重复这些步骤以连接到其他 etcd 成员并进行碎片处理。最后才对领导进行碎片清除。 - 至少要在碎片处理操作之间等待一分钟,以便 etcd pod 可以恢复。在 etcd pod 恢复前,etcd 成员不会响应。 
 
- 如果因为超过空间配额而触发任何 - NOSPACE警告,请清除它们。- 检查是否有 - NOSPACE警告:- etcdctl alarm list - sh-4.4# etcdctl alarm list- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - memberID:12345678912345678912 alarm:NOSPACE - memberID:12345678912345678912 alarm:NOSPACE- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 清除警告: - etcdctl alarm disarm - sh-4.4# etcdctl alarm disarm- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow