etcd集群日常维护
配置文件和启动参数说明
命令行 | 配置文件 | 说明
data-dir | ETCD_DATA_DIR | 指定节点的数据存储目录,包括节点ID,集群ID,集群初始化配置,Snapshot文件,若未指定—wal-dir,还会存储WAL文件;
wal-dir | ETCD_WAL_DIR | 指定节点的was文件的存储目录,若指定了该参数,wal文件会和其他数据文件分开存储。
name | ETCD_NAME | 节点名称
initial-advertise-peer-urls | ETCD_INITIAL_ADVERTISE_PEER_URLS | 告知集群其他节点url
listen-peer-urls | ETCD_LISTEN_PEER_URLS | 监听URL,用于与其他节点通讯
advertise-client-urls | ETCD_LISTEN_CLIENT_URLS | 告知客户端url, 也就是服务的url
initial-cluster-token | ETCD_INITIAL_CLUSTER_TOKEN | 集群的ID
initial-cluster | ETCD_INITIAL_CLUSTER | 集群中所有节点
配置文件例子
more /etc/etcd/etcd.conf
# [member]
ETCD_NAME=lykops-etcd1
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
......
ETCD_LISTEN_PEER_URLS="http://192.168.0.101:2380,http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.0.101:2379,http://localhost:2379"
......
#[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.101:2380"
# if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
ETCD_INITIAL_CLUSTER="lykops-etcd1=http://192.168.0.101:2380,lykops-etcd2=http://192.168.0.102:2380,lykops-etcd3=http://192.168.0.103:2380"
#如果是单机版,注释上面一行
#ETCD_INITIAL_CLUSTER_STATE="new"
#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.101:2379"
......
#
#[proxy]
......
#[security]
#如果要求SSL连接etcd的话,把下面的配置启用,并修改文件路径,详情请见http://blog.csdn.net/liyingke112/article/details/77776491
#ETCD_CERT_FILE="/etc/ssl/client.pem"
#ETCD_KEY_FILE="/etc/ssl/client-key.pem"
#ETCD_CLIENT_CERT_AUTH="true"
#ETCD_TRUSTED_CA_FILE="/etc/ssl/ca.pem"
#ETCD_AUTO_TLS="true"
#ETCD_PEER_CERT_FILE="/etc/ssl/member.pem"
#ETCD_PEER_KEY_FILE="/etc/ssl/member-key.pem"
#ETCD_PEER_CLIENT_CERT_AUTH="false"
#ETCD_PEER_TRUSTED_CA_FILE="/etc/ssl/ca.pem"
#ETCD_PEER_AUTO_TLS="true"
#
#[logging]
......
启动服务
service etcd start
systemctl enable etcd
集群维护
查看所有member
方法1、http://192.168.0.101:2379/v2/members
方法2、etcdctl member list
573789a076d6f1ab: name=lykops-etcd1 peerURLs=http://192.168.0.101:2380 clientURLs=http://192.168.0.101:2379 isLeader=false
90ad624a2e4158cf: name=lykops-etcd2 peerURLs=http:/192.168.0.102:2380 clientURLs=http://192.168.0.102:2379 isLeader=false
c9b8681eb46426ac: name=lykops-etcd3 peerURLs=http://192.168.0.103:2380 clientURLs=http://192.168.0.103:2379 isLeader=true
查看集群状态
etcdctl cluster-health
member 573789a076d6f1ab is healthy: got healthy result from http://192.168.0.101:2379
member 90ad624a2e4158cf is healthy: got healthy result from http://192.168.0.102:2379
member c9b8681eb46426ac is healthy: got healthy result from http://192.168.0.103:2379
cluster is healthy
更新一个节点
如果想更新一个节点的 IP(peerURLS),首先你需要知道那个节点的 ID。你可以列出所有节点,找出对应节点的 ID。
etcdctl member list
在本例中,假设要更新ID为90ad624a2e4158cf的节点的peerURLs为:http://192.168.0.105:2380
etcdctl member update 90ad624a2e4158cf http://192.168.0.105:2380
Updated member with ID 90ad624a2e4158cf in cluster
删除一个节点
假设要删除 ID 为 90ad624a2e4158cf 的节点
etcdctl member remove 90ad624a2e4158cf
Removed member 90ad624a2e4158cf from cluster
执行完后,目标节点会自动停止服务,并且打印一行日志: etcd: this member has been permanently removed from the cluster. Exiting. 如果删除的是 leader 节点,则需要耗费额外的时间重新选举 leader。
增加一个新的节点
增加一个新的节点分为两步:
通过etcdctl或对应的API注册新节点
使用恰当的参数启动新节点
先看第一步,假设要新加的节点取名为lykops-etcd6, peerURLs 是 http://192.168.0.106:2380
etcdctl member add lykops-etcd6 http://192.168.0.106:2380
added member 9bf1b35fc7761a23 to cluster
ETCD_NAME="lykops-etcd6"
ETCD_INITIAL_CLUSTER="lykops-etcd1=http://192.168.0.101:2380,lykops-etcd2=http://192.168.0.102:2380,lykops-etcd3=http://192.168.0.103:2380,lykops-etcd6=http://192.168.0.106:2380"
ETCD_INITIAL_CLUSTER_STATE=existing
第二步,修改配置文件,把第一步执行输出结果替换掉/etc/etcd/etcd.conf,然后启动
这样,新节点就会运行起来并且加入到已有的集群中了。
注意: 1、不能删除节点后,IP地址不变更的情况下加入集群是无法加入的,删除数据也不行 2、最后修改其他现有主机的/etc/etcd/etcd.conf的ETCDINITIALCLUSTER信息
备份数据
使用etcd自带命令etcdctl进行etc备份
etcdctl backup --data-dir /var/lib/etcd/default.etcd/ --backup-dir /backup/etcd
故障恢复
在使用过程中,有时会出现少量主机故障,需要对集群进行维护。然而在现实情况下,还可能遇到由于严重的设备或网络的故障,导致超过半数的节点无法正常工作。在etcd集群无法提供正常的服务,需要用到一些备份和数据恢复的手段。
首先,从剩余的正常节点中选择一个正常的成员节点, 使用etcdctl backup命令备份etcd数据。
etcdctl backup --data-dir /var/lib/etcd -backup-dir /tmp/etcd_backup
tar -zcxf backup.etcd.tar.gz /tmp/etcd_backup
这个命令会将节点中的用户数据全部写入到指定的备份目录中,但是节点ID,集群ID等信息将会丢失,并在恢复到目的节点时被重新。这样主要是防止原先的节点意外重新加入新的节点集群而导致数据混乱。
然后将Etcd数据恢复到新的集群的任意一个节点上,使用--force-new-cluster参数启动Etcd服务。这个参数会重置集群ID和集群的所有成员信息,其中节点的监听地址会被重置为localhost:2379, 表示集群中只有一个节点。
tar -zxvf backup.etcd.tar.gz -C /var/lib/etcd
etcd --data-dir=/var/lib/etcd --force-new-cluster ...
启动完成单节点的etcd,可以先对数据的完整性进行验证,确认无误后再通过Etcd API修改节点的监听地址,让它监听节点的外部IP地址,为增加其他节点做准备。例如:
用etcd命令找到当前节点的ID。 etcdctl member list 98f0c6bf64240842: name=cd-2 peerURLs=http://127.0.0.1:2580 clientURLs=http://127.0.0.1:2579
由于etcdctl不具备修改成员节点参数的功能, 下面的操作要使用API来完成。 curl http://127.0.0.1:2579/v2/members/98f0c6bf64240842 -XPUT -H "Content-Type:application/json" -d '{"peerURLs":["http://127.0.0.1:2580"]}'
注意,在Etcd中, 建议首先将集群恢复到一个临时的目录中,从临时目录启动etcd,验证新的数据正确完整后,停止etcd,在将数据恢复到正常的目录中。
最后,在完成第一个成员节点的启动后,可以通过集群扩展的方法使用 etcdctl member add 命令添加其他成员节点进来。
etcd集群日常维护的更多相关文章
- 使用k8s operator安装和维护etcd集群
关于Kubernetes Operator这个新生事物,可以参考下文来了解这一技术的来龙去脉: https://yq.aliyun.com/articles/685522?utm_content=g_ ...
- etcd集群部署与遇到的坑
在k8s集群中使用了etcd作为数据中心,在实际操作中遇到了一些坑.今天记录一下,为了以后更好操作. ETCD参数说明 —data-dir 指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群 ...
- etcd集群部署与遇到的坑(转)
原文 https://www.cnblogs.com/breg/p/5728237.html etcd集群部署与遇到的坑 在k8s集群中使用了etcd作为数据中心,在实际操作中遇到了一些坑.今天记录一 ...
- 安装etcd集群
kuberntes 系统使用 etcd 存储所有数据,是最重要的组件之一,注意 etcd集群只能有奇数个节点(1,3,5...),本文档使用3个节点做集群. 一.基础环境 软件包 etcd下载地址:h ...
- k8s1.13.0二进制部署-ETCD集群(一)
Kubernetes集群中主要存在两种类型的节点:master.minion节点. Minion节点为运行 Docker容器的节点,负责和节点上运行的 Docker 进行交互,并且提供了代理功能.Ma ...
- K8s二进制部署单节点 etcd集群,flannel网络配置 ——锥刺股
K8s 二进制部署单节点 master --锥刺股 k8s集群搭建: etcd集群 flannel网络插件 搭建master组件 搭建node组件 1.部署etcd集群 2.Flannel 网络 ...
- Centos7下Etcd集群搭建
一.简介 "A highly-available key value store for shared configuration and service discovery." ...
- 一键部署ETCD集群脚本
这里使用三个节点,系统版本为CentOS7 # vim deploy-etcd.sh #!/bin/bash set -x set -e #更改这里的IP, 只支持部署3个节点etcd集群 decla ...
- Docker 搭建 etcd 集群
阅读目录: 主机安装 集群搭建 API 操作 API 说明和 etcdctl 命令说明 etcd 是 CoreOS 团队发起的一个开源项目(Go 语言,其实很多这类项目都是 Go 语言实现的,只能说很 ...
随机推荐
- asp+access win2008php+mysql /dedecms 配置总结
1. IIS 应用池 高级设置 启用32位应用程序:True 2. c盘window/Temp user 应该有管理权限 如果不行 creator owner 给予修改权限 ...
- [bzoj] 2716 天使玩偶 || CDQ分治
原题 已知n个点有天使玩偶,有m次操作: 操作1:想起来某个位置有一个天使玩偶 操作2:询问离当前点最近的天使玩偶的曼哈顿距离 显然的CDQ问题,三维分别为时间,x轴,y轴. 但是这道题的问题在于最近 ...
- Gym100286C Clock
不想打题面,题面戳这里. 被这题吓到了,感觉无从下手.最后还是看着题解和别人的代码加以改编最后写出了的.其实理解之后写出了也就是三四十行的样子了. 首先题目有个很重要的条件--转动某个针只会对周期比他 ...
- poj 2723 Get Luffy Out-2-sat问题
Description Ratish is a young man who always dreams of being a hero. One day his friend Luffy was ca ...
- YYH的营救计划(NOIP模拟赛Round 6)
题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!YYH感动的热泪盈眶,开起了门…… YYH的父亲下班回家,街坊邻居说YYH被一群陌生人强行押上了警车!YYH的父 ...
- 用vs2008和vs2005创建win32 console application
http://blog.sina.com.cn/s/blog_4900be890100s735.html 对于经常使用vc6.0的人来说,创建一个win32 console application很简 ...
- TMS320F28379D 使用心得之 SCI
原文地址https://blog.csdn.net/qq_39545674/article/details/82597106 一.SCI 简介SCI(Serial Communication Inte ...
- libevent源码分析之信号处理
新看看官方demo的libevent如何使用信号 int called = 0; static void signal_cb(int fd, short event, void *arg) { str ...
- java实现MQ消息收发两种方式
定义: 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们.简单理解:蓝牙配对 jar包依赖: <!-- ...
- Vplayer服务配置-手机播放局域网视频
如何使用 UPnP DLNA Cedric Fung 2012-08-03 如何使用 UPnP DLNA · Cedric Fung · 2012-08-03 UPnP / DLNA 通用即插即用 ( ...