运维之etcd经验

原创
2020/06/03 11:12
阅读数 1.8K

前言

etcd 是一个不错的注册中心。作为团里里面第一个试水的小组,我们是遇到不少问题。 etcd中文文档 etcd中文文档 etcd官方英文文档

安装细节

没有使用官网的方式,而是使用读取配置文件的方式,这种方便管理,配置等。

  1. 创建目录,下载,解压
  2. 设置API版本号
    vim /etc/profile
    export ETCDCTL_API=3
    source /etc/profile
  1. 创建数据,配置,日志文件目录
  2. 创建配置文件
    1. 单节点配置文件
    2. 集群配置文件
  3. 把配置写入到配置文件里面
  4. 把etcd 与etcd-cli变成命令
  5. 启动etcd
    前端启动,注意启动后 ./etcd --config-file etcd.conf 
    后台启动并且开启远程访问 nohup ./etcd --config-file ./conf/etcd.conf > ./logs/etcd.log 2>&1 &
    集群前端启动,注意启动后 ./etcd --config-file etcd.cluster.conf 
    集群后台启动并且开启远程访问 nohup ./etcd --config-file ./conf/etcd.cluster.conf > ./logs/etcd.log 2>&1 &
    注意:启动后关闭不了,直接杀进程。开启远程访问需要带命令。

8,. 租约 9. 网络

问题

etcd API版本问题

etcd api 版本分为2.0与3.0 两个版本,默认使用2.0的版本API。作为一个新手很容易犯这种初级错误,建议大家默认使用api3.0版本。如何操作请看安装流程第二步

etcd 集群操作

etcd-cli 可以集群操作,可以同时对多个ectd节点进行操作。 在命令后面加入--endpoints参数。--endpoints=ip:port,ip:port

etcd-cli get /xxxx --endpoints=127.0.0.1:2379,127.0.0.1:2378

开启本地端口

如果不开启本地端口,在使用任何命令的时候都需要加上--endpoints=内网或者外网地址:port。在配置文件配置liste-client-urls。

listen-client-urls: http://内网或者外网地址:port,http://127.0.0.1:2379

etcd内存问题

etcd 对内存与磁盘都非常敏感,所以需要非常注意etcd内存使用情况

  1. 内存尽量最够大
  2. etcd 内存使用是使用内存的两倍。一份是内存,一份是cache。比如1G的数据会使用1G的内存,1G的cache
  3. etcd 数据删除,只会缓慢的删除数据,不会立马删除,尤其是cache
  4. etcd所在的操作系统的内存使用完,etcd直接不可用,不管在怎么压缩处理,一直不可用
etcd内存处理细节
  1. 内存报警,建议是使用内存达到50%就报警,防止异常情况造成内存暴增。
quota-backend-bytes: 15032385536
  1. etcd 快照配置 在配置文件里面加入这两个配置参数
# 配置snapshots保留份数
max-snapshots: 5
# 配置 wals 保留份数
max-wals: 5
  1. etcd 内存与磁盘命令整理
#使用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
  1. etcd 内存与磁盘自动整理 在配置文件里面加入这两个配置参数
# 每小时整理一次
auto-compaction-retention: "1"
# 整理的类型
auto-compaction-mode: periodic

操作命令

使用etcdctl 可以执行shell命令,看下etcd 内存与磁盘命令整理的内存

-name:方便理解的节点名称,默认为 default,在集群中应该保持唯一,可以使用 hostname
--data-dir:服务运行数据保存的路径,默认为 ${name}.etcd
--snapshot-count:指定有多少事务(transaction)被提交时,触发截取快照保存到磁盘
--heartbeat-interval:leader 多久发送一次心跳到 followers。默认值是 100ms
--eletion-timeout:重新投票的超时时间,如果follower在该时间间隔没有收到心跳包,会触发重新投票,默认为 1000 ms
--listen-peer-urls:和同伴通信的地址,比如 http://ip:2380,如果有多个,使用逗号分隔。需要所有节点都能够访问,所以不要使用 localhost
--listen-client-urls:对外提供服务的地址:比如 http://ip:2379,http://127.0.0.1:2379,客户端会连接到这里和etcd交互
--advertise-client-urls:对外公告的该节点客户端监听地址,这个值会告诉集群中其他节点
--initial-advertise-peer-urls:该节点同伴监听地址,这个值会告诉集群中其他节点
--initial-cluster:集群中所有节点的信息,格式为 node1=http://ip1:2380,node2=http://ip2:2380,…。需要注意的是,这里的 node1 是节点的--name指定的名字;后面的ip1:2380 是--initial-advertise-peer-urls 指定的值
--initial-cluster-state:新建集群的时候,这个值为 new;假如已经存在的集群,这个值为existing
--initial-cluster-token:创建集群的token,这个值每个集群保持唯一。这样的话,如果你要重新创建集群,即使配置和之前一样,也会再次生成新的集群和节点 uuid;否则会导致多个集群之间的冲突,造成未知的错误
展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部