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

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

当前最新的v3.4.9,我之前用的时候包括目前京东热key线上都是用的3.4.6,下面主要是看一下如何搭建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可执行文件放一起。

这个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 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值