前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >etcd集群搭建和使用中常见的报错信息(热key探测系列教程)

etcd集群搭建和使用中常见的报错信息(热key探测系列教程)

作者头像
天涯泪小武
发布2020-07-08 09:39:32
1.2K0
发布2020-07-08 09:39:32
举报
文章被收录于专栏:SpringCloud专栏

etcd的下载地址:https://github.com/etcd-io/etcd/releases

当前最新的v3.4.9,我之前用的时候包括目前京东热key线上都是用的3.4.6,下面主要是看一下如何搭建etcd集群。

如果是本地测试单点的话,就在上面链接下载对应的操作系统版本,打开后

直接启动etcd就算本地启动成功了,启动后就可以用etcdctl控制台进行操作,或者用代码操作etcd即可。

集群的话,以linux 3节点集群为例。

创建一个sh脚本,如下

代码语言:javascript
复制
#!/bin/bash

if [ -z $NAME ];then
    NAME=my-etcd-1
fi
#if [ -z $DATADIR ];then
    #DATADIR=/export/etcd_data
#fi
if [ -z $MYHOST ];then
    MYHOST=http://127.0.0.1
fi
if [ -z $PORT ];then
        PORT=2379
fi
if [ -z $CLUSTER_PORT ];then
        CLUSTER_PORT=2380
fi
if [ -z $CLUSTER ];then 
    CLUSTER=my-etcd-1=http://localhost:2380,my-etcd-2=http://localhost:2382,my-etcd-3=http://localhost:2384
fi
if [ -z $CLUSTER_TOKEN ];then 
    CLUSTER_TOKEN=my-etcd-token
fi
if [ -z $CLUSTER_STATE ];then
    CLUSTER_STATE=new
fi
    
ETCD_CMD="./etcd --name ${NAME} --data-dir ${DATADIR}  --listen-client-urls ${MYHOST}:${PORT}   --advertise-client-urls ${MYHOST}:${PORT}  --listen-peer-urls ${MYHOST}:${CLUSTER_PORT} \
--initial-advertise-peer-urls ${MYHOST}:${CLUSTER_PORT} \
--initial-cluster $CLUSTER  \
--initial-cluster-token $CLUSTER_TOKEN \
--initial-cluster-state ${CLUSTER_STATE} \
--auto-compaction-retention=10 \
-–quota-backend-bytes=8589934592 \
    $*"
echo -e "Running '$ETCD_CMD'\nBEGIN ETCD OUTPUT\n"
exec $ETCD_CMD

和etcd可执行文件放一起。

这个shell脚本里,大部分属性都是通过外传配置的,最好是通过环境变量配置。将这个文件夹(包含3个文件)复制三份,分别上传到3个主机或打包后放到docker里,用docker的话,需要再加一个dockerfile文件,dockerfile里就直接启动这个sh即可。

上传完毕后,就需要配置sh脚本里的各个参数属性了。

注意shell里面的配置项,里面有最大存储是8G,自动压缩间隔是10小时,可以自行调整。etcd如果磁盘写满(默认2G)后,就无法继续写入了,必须压缩 清理后才能继续写入。

譬如ip1、ip2、ip3 三个机器。各自的配置(主机环境变量,或docker环境变量)如下

这就是etcd1的配置,注意一下name,就是一个唯一的name,那么etcd2的name就是my-etcd-2

MYHOST就是自己的ip。

CLUSTER_STATE代表集群状态,如果是加入一个已有的集群,就是existing。如果是新组建集群,就是new。

CLIENT_URLS就还是自己的ip,再加上127.0.0.1  注意加上端口后。

CLUSTER就是集群内所有etcd的ip+端口。

就这样分别启动3个etcd就可以了。观察日志,看他们的联通状态。

常见异常: 1 节点启动后:tocommit(42081425) is out of range [lastIndex(0)]. Was the raft log corrupted, truncated, or lost

命令: cd /export/App/bin

查看所有member     ./etcdctl  member list 删除掉那个数据不对的:  ./etcdctl member remove 8837e51603af62c2 重新添加进来: ./etcdctl member add my-etcd-2 --peer-urls=http://10.188.128.140:2380

2 ETCD数据库异常:mvcc: database space exceeded解决

参考:https://www.cnblogs.com/davygeek/p/8524477.html https://www.cnblogs.com/zjz20/p/12973817.html

使用API3 export ETCDCTL_API=3 # 查看告警信息,告警信息一般 memberID:8630161756594109333 alarm:NOSPACE etcdctl —endpoints=http://127.0.0.1:2379 alarm list

# 获取当前版本 rev=$(etcdctl —endpoints=http://127.0.0.1:2379 endpoint status —write-out=“json” | egrep -o ‘”revision”:[0-9]*’ | egrep -o ‘[0-9].*’) # 压缩掉所有旧版本 etcdctl —endpoints=http://127.0.0.1:2379 compact $rev # 整理多余的空间 etcdctl —endpoints=http://127.0.0.1:2379 defrag # 取消告警信息 etcdctl —endpoints=http://127.0.0.1:2379 alarm disarm

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档