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

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

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

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

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

创建一个sh脚本,如下

#!/bin/bashif [ -z $NAME ];thenNAME=my-etcd-1
fi
#if [ -z $DATADIR ];then#DATADIR=/export/etcd_data
#fi
if [ -z $MYHOST ];thenMYHOST=http://127.0.0.1
fi
if [ -z $PORT ];thenPORT=2379
fi
if [ -z $CLUSTER_PORT ];thenCLUSTER_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 ];thenCLUSTER_STATE=new
fiETCD_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

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

  1. etcd介绍:可作为KV数据库、服务发现、配置中心和分布式锁使用、etcd集群搭建

    etcd介绍 etcd用途 etcd VS zk etcd架构 etcd集群搭建

  2. Docker下ETCD集群搭建

    Docker下ETCD集群搭建 https://www.cnblogs.com/eagle6688/p/8287907.html 搭建集群之前首先准备两台安装了CentOS 7的主机,并在其上安装好D ...

  3. 【运维】K8S集群部署系列之ETCD集群搭建(四)

    ETCD集群扩容和缩容 本文将介绍生产环境下如何对ETCD集群进行扩容和缩容. 文章目录 ETCD集群扩容和缩容 新节点环境准备(node3) 下载安装包并初始化环境 网络准备 生成`node3`对等 ...

  4. java 带密码连接redis 单节点/集群 No reachable node in cluster报错解决

    java 带密码连接redis 单节点/集群 No reachable node in cluster报错解决 maven依赖 <dependency><groupId>red ...

  5. JavaScript在控制台常见的报错信息

    JavaScript在控制台常见的报错信息 前言 一.JS的报错类型 二.具体的控制台报错分析 1.语法错误(SyntaxError) (1)违背命名规范 (2)括号不全 (3)关键字赋值 (4)函数 ...

  6. etcd集群搭建(高可用)

    一.etcd介绍: ETCD 是一个高可用的分布式键值数据库,可用于服务发现.ETCD 采用 raft 一致性算法,基于 Go 语言实现.etcd作为一个高可用键值存储系统,天生就是为集群化而设计的. ...

  7. P8实战(二):分布式锁前置技能 etcd 集群搭建

    etcd 集群环境搭建 13 什么是 etcd? etcd 是一个分布式高可用的 Key/Value 存储系统,旨在可靠.快速地保存和提供对关键数据的访问,主要用于分享配置和服务发现.它通过分布式锁定 ...

  8. 【运维】K8S集群部署系列之ETCD集群搭建(二)

    TLS证书生成 文章目录 TLS证书生成 简介 工具下载 创建CA认证中心 CA证书申请文件 生成CA证书和私钥 配置证书生成策略 证书验证 查看证书 验证证书 生成ETCD集群的TLS证书 服务端证 ...

  9. python find函数_Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案

    本文为霍格沃兹测试学院学员学习笔记,进阶学习文末加群. Python 装饰器简介 装饰器(Decorator)是 Python 非常实用的一个语法糖功能.装饰器本质是一种返回值也是函数的函数,可以称之 ...

最新文章

  1. 八大操作系统掌门人齐聚 1024 程序员节,千年岳麓见证开源新时代
  2. 课后作业-阅读任务-阅读提问-3 。
  3. TOMCAT安全配置
  4. NHibernate——Criteria条件查询
  5. C#里partial关键字的作用(转摘)
  6. 【ESP8266】ESP8266_NONOS_SDK开发包生成的镜像文件构建步骤分析
  7. Java中的list、set、map区别
  8. c# contains方法_C#/.Net Core/WPF框架初建(国际化、主题色)
  9. 知道IP地址如何查看主机名和MAC(网卡)地址
  10. “华为搜索”正海外内测;苹果5亿美元和解“降速门”;Firefox隐藏HTTPS | 极客头条...
  11. ubuntu 的chmod 和 chown
  12. ubuntu中gitlab搭建
  13. 【线性代数】P6 矩阵的幂转置特殊矩阵
  14. OSChina 周五乱弹 —— IG wxz 请联系小小编辑付钱删帖
  15. vsual studio 如何关闭禁止mscorsvw.exe (转)
  16. 阿里云后台部署全过程-2-Linux环境配置
  17. 单位脉冲响应的个人理解
  18. 【微机原理与汇编】冒泡排序
  19. 联想Y50C加内存条
  20. Linux磁盘分区论文3000字,磁盘分区对齐详解与配置 – Linux篇

热门文章

  1. 来看看今日的软件分享
  2. 【全栈接口测试进阶系列教程】入门到入职的jmeter接口测试工具实战,接口测试步骤,正则表达式jsonpath,断言,接口加密,beanshell,jdbc,jmeter+ant+jenkins
  3. java 判断字符 不等于 或者_java中字符串不等于怎么判断
  4. Python视频图像播放中加入文字
  5. SpringBoot - Lombok的使用
  6. centos7输入ifconfg找不到ens33/eth0网卡信息,且service network restart重启网络失败
  7. Android 获得 usb 权限的两种方式
  8. 无线耳机哪个品牌好一点?真无线蓝牙耳机推荐品牌
  9. RK3568 外接 PCF8563 RTC
  10. 如何在Word中的表上添加边框或更改边框