GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

ETCD 集群的常见问题处理

2019 年 11 月 15 日

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:311822

评论

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

java安全编码指南之:锁的双重检测

程序那些事

java安全编码 java安全编码指南 java代码规范 java代码安全

生态共赢-anyRTC创业扶持计划

anyRTC开发者

ios 音视频 WebRTC RTC 安卓

蚁架构师首推SpringBoot套餐(原理+实战+面试)

小Q

Java 学习 架构 微服务 SpringBoot 2

只要十步,你就可以应用表达式树来优化动态调用

newbe36524

C# netcore ASP.NET Core

架构师训练营第 1 期 - 第四周课后练习

Anyou Liu

极客大学架构师训练营

技术解析 | 云游戏在未来如何实现?

腾讯云视频云

开发 游戏 视频

搞开发,写SQL就够了

棒锤🐮

sql mybatis springboot Web框架 Rocket API

WebSocket从入门到精通,半小时就够!

JackJiang

html5 网络编程 websocket 即时通讯

[Go 并发编程实战课]02.Mutex 源代码

custer

go

spring-boot-route(十五)整合RocketMQ

Java旅途

Java RocketMQ Spring Boot

手把手带你玩转 openEuler | 初识 openEuler

openEuler

Linux 开源 操作系统

[Go并发编程实战课]01.Mutex学习笔记

custer

go

LeetCode题解:145. 二叉树的后序遍历,栈,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

1分钟将vscode撸成小霸王

gamedilong

前端 vscode

【高并发】秒杀系统架构解密,不是所有的秒杀都是秒杀(升级版)!!

冰河

并发编程 高并发 架构设计 秒杀 异步

视频会议的应用

anyRTC开发者

ios 音视频 WebRTC 直播 安卓

深拷贝链表,python处理音频信号和数字信号、vim教程、swift单元测试和UI测试 John 易筋 ARTS 打卡 Week 21

John(易筋)

单元测试 ARTS 打卡计划 python 数字信号 vim教程 深拷贝链表

TensorFlow 篇 | TensorFlow Serving API

Alex

tensorflow keras model serving tensorflow serving api

区块链数字货币交易所开发app,交易平台搭建方案

WX13823153201

区块链数字货币交易所开发

TNFE-Weekly[第七十五周已更新]

莹姐🙈

小程序 前端 周报

Java零基础到进阶宝典!从小白到大神,金九银十面试这届斩获23K月薪

Java架构追梦

Java 学习 架构 面试 核心知识点

IDEA常用设置、快捷键及代码模板

jiangling500

IDEA

实现一个简单的 MobX

局外人

前端 js React

LAXCUS大数据集群操作系统:一个分布式分时共享E级系统软件(一)

陈泽云

人工智能 云计算 大数据 基础设施 国产操作系统

2020年第三季度《全国移动App 风险监测评估报告》

InfoQ_11eaedef67e9

App 移动安全 个人隐私安全

【全球案例】ESL 游戏公司如何通过 Jira 定制化解决方案连接全球团队

Atlassian

项目管理 敏捷 Atlassian Jira

Week 2命题作业

balsamspear

极客大学架构师训练营

Week 2 学习总结

balsamspear

极客大学架构师训练营

为什么学Go(一)

soolaugust

go

英特尔聚焦全栈量子研究:发布多项重磅量子计算研究成果

商业资讯

架构师训练营第四周作业

四夕晖

ETCD集群的常见问题处理-InfoQ