首页 > 其他分享 >etcd集群搭建和使用中常见的报错信息(热key探测系列教程)

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

时间:2023-02-05 21:31:34浏览次数:55  
标签:http key -- etcdctl CLUSTER 报错 etcd PORT


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

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

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

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

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

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

创建一个sh脚本,如下

#!/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集群搭建和使用中常见的报错信息(热key探测系列教程)_docker_02

和etcd可执行文件放一起。

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

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

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

 

 

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

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

这就是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解决

使用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
 

标签:http,key,--,etcdctl,CLUSTER,报错,etcd,PORT
From: https://blog.51cto.com/u_13706148/6038485

相关文章