FCon7折倒计时最后一周:日程已上线70%!查看详情>>> 了解详情
写点什么

ETCD 集群的常见问题处理

  • 2019-11-15
  • 本文字数:1857 字

    阅读完需:约 6 分钟

ETCD集群的常见问题处理

ETCD 是一个高可用的分布式 Key/Value 存储系统。它使用 Raft 算法,通过选举来保持集群内各节点状态的一致性。虽然 ETCD 具有高可用的特点,但是也无法避免多个节点宕机,甚至全部宕机的情况发生。如何快速的恢复集群,就变得格外重要。本文将介绍在日常工作中,遇到的 ETCD 集群常见问题的处理方法。

ETCD 常见问题

由于 ETCD 集群需要选举产生 leader,所以集群节点数目需要为奇数来保证正常进行选举。而集群节点的数量并不是越多越好,过多的节点会导致集群同步的时间变长,使得 leader 写入的效率降低。我们线上的 ETCD 集群由三个节点组成(即宕机一台,集群可正常工作),并开启了认证。以下是日常运维工作中,遇到问题的处理过程。

1 集群一个节点宕机的恢复步骤

一个节点宕机,并不会影响整个集群的正常工作。此时可通过以下几步恢复集群:

1)在正常节点上查看集群状态并摘除异常节点

etcdctl endpoint status


2)摘除异常节点

etcdctl member remove $ID

3)重新部署服务后,将节点重新加入集群

  • 由于 ETCD 集群证书依赖于服务器 IP,为避免重新制作证书,需要保持节点 IP 不变。在部署好节点上服务后,先不要启动。

  • 将节点重新加入集群

  • etcdctl member add $name --peer-urls=https://x.x.x.x:2380

  • 此时查看集群状态,新加入的节点状态为 unstarted

  • 删除新增成员的旧数据目录,更改相关配置

  • 需将原 etcd 服务的旧数据目录删除,否则 etcd 会无法正常启动。新增节点是加入已有集群,所以需要修改配置 ETCD_INITIAL_CLUSTER_STATE=“existing”

  • 启动服务 检测集群是否正常

  • systemctl start etcd


使用 etcdctl endpoint status 命令查看集群状态,若三台都正常,集群恢复。

2 集群超过半数节点宕机的恢复步骤

此时集群处于无法正常工作的状态,需要尽快恢复。若机器宕机重启,IP 保持不变,则证书无需重新生成;若 IP 更换,则还需重新生成证书。集群恢复需要使用 ETCD 的备份数据(使用 etcdctl snapshot save 命令备份),或者从 ETCD 数据目录复制 snap/db 文件。以下是恢复步骤:

1)将备份数据恢复至集群

  • 集群部署完成后,先不启动 ETCD 服务,并将原有 ETCD 数据目录删除

  • 依次在三台节点上执行恢复数据的命令

  • etcdctl --name=x.x.x.x-name-3 --endpoints=“https://x.x.x.x:2379” --cert=/var/lib/etcd/cert/etcd-client.pem --key=/var/lib/etcd/cert/etcd-client-key.pem --cacert=/var/lib/etcd/cert/ca.pem --initial-cluster-token=xxxxxxxxxx --initial-advertise-peer-urls=https://x.x.x.x:2380 --initial-cluster=x.x.x.x-name-1=https://x.x.x.x:2380,x.x.x.x-name-2=https://x.x.x.x:2380,x.x.x.x-name-3=https://x.x.x.x:2380 --data-dir=/var/lib/etcd/data.etcd/ snapshot restore snapshot.db

  • 更改数据目录的权限

  • chown -R etcd:etcd data.etcd/

2)启动 ETCD 服务,检查集群状态

  • systemctl start etcd

  • etcdctl member list 查看节点状态

3 database space exceeded 报错恢复步骤

从报错的字面意思来看,是超出数据库空间导致。执行 etcdctl endpoint status,查看集群此时各节点的状态,发现 DB SIZE 为 2.1GB。ETCD官方文档说明提到 ETCD 默认的存储大小是 2GB。超出后,集群无法进行写入。以下为恢复步骤:

1)备份数据

使用 snapshot save 命令备份集群数据

2)获取 reversion

etcdctl --write-out=“json” --cacert /var/lib/etcd/cert/ca.pem --key /var/lib/etcd/cert/etcd-client-key.pem --cert /var/lib/etcd/cert/etcd-client.pem --endpoints=’...:2379’ endpoint status |grep -o ‘“revision”:[0-9]*’

3)compact

etcdctl --cacert /var/lib/etcd/cert/ca.pem --key /var/lib/etcd/cert/etcd-client-key.pem --cert /var/lib/etcd/cert/etcd-client.pem --endpoints=’...:2379’ compact $revision

4)defrag

etcdctl --cacert /var/lib/etcd/cert/ca.pem --key /var/lib/etcd/cert/etcd-client-key.pem --cert /var/lib/etcd/cert/etcd-client.pem --endpoints=’...:2379’ defrag

5)删除报警(必需删除,否则集群仍然无法使用)

etcdctl --write-out=“table” --cacert /var/lib/etcd/cert/ca.pem --key /var/lib/etcd/cert/etcd-client-key.pem --cert /var/lib/etcd/cert/etcd-client.pem --endpoints=’...:2379 alarm disarm


以上就是对 ETCD 集群日常维护的总结,为了使服务更加稳定的运行,建议定时备份和压缩数据,并增加集群监控(与 Prometheus 配合使用)。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/IANaqD6k3IQQJNX1tjgVag


2019-11-15 15:314288

评论

发布
暂无评论
发现更多内容

生成式AI下的企业:是不是该成立新部门封新官了?

FinClip

基于Web的智慧交通3D可视化系统

2D3D前端可视化开发

智慧交通 智慧交通系统 智能运输系统 ITS 智慧公交

国内数据库第一梯队!柏睿数据RapidsDB通过“可信数据库”评测

新消费日报

大型企业全面预算管理该何去何从?

用友BIP

全面预算

工业软件芯片国产化:数智化自主可控的重要保障

用友BIP

国产替代

华为云GaussDB圈层活动走进香港,赋能金融政企数字化转型

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

软件测试/测试开发丨Python闭包函数和计时器学习笔记

测试人

Python 程序员 软件测试 函数

服务器安全加固 - Linux

高端章鱼哥

Linux 网络安全 运维安全

KaiwuDB 获 2023 可信数据库发展大会“双料”荣誉

KaiwuDB

KaiwuDB 2023可信数据库发展大会

企业为什么需要软件的应用框架?

力软低代码开发平台

超燃!用友大易走进晨光,探索人才管理创新之道

用友BIP

招聘

低代码平台——少量编码即可快速生成应用程序

这我可不懂

低代码 可视化 JNPF

全面数字化业务时代亟需升级企业数智底座

用友BIP

数智底座

开源项目推荐 【SkyEyeSystem】

程序员阿杜

Java 爬虫 springboot

武装你的WEBAPI-OData与DTO

高端章鱼哥

OData WebApi

瞬间抠图!揭秘 ZEGO 绿幕抠图算法背后的技术

ZEGO即构

人工智能 图像处理 AI抠图 绿幕 主体分割

美团面试真题和答案

王磊

java面试

Unity Joint用法及案例

EquatorCoco

Unity

日本加密货币市场报告: 行业趋势和未来前景研究

Footprint Analytics

加密货币 区块链游戏 NFT Web3 游戏

从GaussDB(DWS)的技术演进,看数据仓库的积淀与新生

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

传承敬老美德,志愿服务伴我行

科技热闻

用友iuap:社会级数智化底座,助力企业实现国产替代

用友BIP

国产替代

如何理解低代码平台的定制化服务?

互联网工科生

低代码 软件定制

软件测试/测试开发丨Pytest配置文件pytest.ini

测试人

Python 程序员 软件测试 测试开发 pytest

什么是GPU与CPU?有什么不同?哪个更好?

Finovy Cloud

SpringBoot 3.0来了,你准备好了吗? | 社区征文

bug菌

后端 年中技术盘点

污点分析是什么神奇的代码检查技术?

华为云PaaS服务小智

云计算 华为云 华为开发者大会2023 代码检查

千亿参数开源大模型 BLOOM 背后的技术

EquatorCoco

开源 数据 bloom

influxdb 中得 fields 与 tag 区别总结

互联网工科生

Influxdb

使用 Navicat 的数据生成插入大量测试数据

hungxy

  • 扫码添加小助手
    领取最新资料包
ETCD集群的常见问题处理_文化 & 方法_李肖肖_InfoQ精选文章