etcd3集群管理
在什么情况下需要集群的运行时更改
- 维护和升级多个机器
如果你因为进行诸如硬件升级或者断网等计划维护,而需要移动多个节点到新机器上,最好是逐个节点移动,一次操作一个。 移动leader节点是安全的,只不过leader节点下线后,需要耗费更多的时间选举新节点,所以建议最后移动。如果集群有超过50M的数据,最好进行节点的迁移而不要通过删除旧节点,增加新节点来实现节点的移动。 - 更改集群的大小
- 替换一个坏掉的节点
- 集群多数宕机后的重启
基于原先的数据创建新集群;强制让一个节点成为leader节点,并最终通过运行时更改添加新节点的方式将其他节点添加到这个新的集群中。
集群运行时更改的操作
一般来讲,集群更改通常都是执行如下操作:
- 升级单个节点的 peerURLs,需要执行一个更新节点操作
- 替换一个节点,需要先执行一个添加节点操作,再执行一个删除节点操作
- 将集群大小从 3 更改到 5,需要执行两个添加节点操作
- 将集群大小从 5 降低到 3,需要执行两个删除节点操作
更新一个节点
如果你想更新一个节点的IP(peerURLS),首先需要知道那个节点的 ID。你可以列出所有节点,找出对应节点的ID:
etcdctl member list
4d4f508502c31ddc, started, name=etcd3 http://10.5.12.18:2380, http://10.5.12.18:2379
d20b3f1647802774, started, name=etcd2 http://10.5.12.17:2380, http://10.5.12.17:2379
fdbaf2aa62569cb3, started name=etcd1 http://10.5.12.16:2380, http://10.5.12.16:2379
假设要更新ID为fdbaf2aa62569cb3的节点的peerURLs为http://10.5.12.20:2380,操作如下:
etcdctl member update fdbaf2aa62569cb3 http://10.5.12.20:2380
删除一个节点
删除ID为fdbaf2aa62569cb3的节点:
etcdctl member remove fdbaf2aa62569cb3
注:如果删除的是leader节点,则需要额外的时间重新选举
增加一个节点
增加节点分为两步:通过etcdctl或对应的api注册新节点,然后根据注册新节点时给出的相关参数启动新节点
假设新加的节点取名为etcd4,peerURLs为http://10.5.12.10:2380,配置如下:
etcdctl member add etcd4 http://10.5.12.10:2380
etcd在注册完新节点后,会返回一段提示,包含三个环境变量,如下:
ETCD_NAME="etcd4"
ETCD_INITIAL_CLUSTER="etcd1=http://10.5.12.16:2830,etcd2=http://10.5.12.17:2830,etcd3=http://10.5.12.18:2830,etcd4=http://10.5.12.10:2830"
ETCD_INITIAL_CLUSTER_STATE=existing
在启动新节点时,带上这三个变量即可,新节点/opt/kubernetes/cfg/etcd.conf部分配置如下:
......
ETCD_NAME="etcd4"
ETCD_INITIAL_CLUSTER="etcd0=http://10.5.12.16:2830,etcd1=http://10.5.12.17:2830,etcd2=http://10.5.12.18:2830,etcd3=http://10.5.12.10:2830"
ETCD_INITIAL_CLUSTER_STATE=existing
......
另外,还需要说明的是,如果新添加的节点--data-dir目录下存在以前的etcd数据,需要先清空该目录 。节点删除后,集群中的成员信息会更新,新节点加入集群是作为一个全新的节点加入,如果--data-dir有数据,etcd启动时会读取己经存在的数据,启动时仍然用的老member ID,也会造成,集群不无法加入,所以一定要清空新节点的--data-dir。
注:如果原先的集群只有1个节点,在新节点成功启动之前,新集群并不能正确的形成。因为原先的单节点集群无法完成leader的选举。 直到新节点启动完,和原先的节点建立连接以后,新集群才能正确形成。
节点迁移和灾难恢复
迁移节点
移动节点有两种方式:删除旧的节点,增加新的节点; 迁移节点。当集群的数据超过 50M 的时候,建议通过迁移节点的方式来移动节点。
迁移节点的核心就是数据目录的迁移。因为 etcd 的各个节点会将自己的 ID 存放在自己的数据目录下面,所以迁移节点不会改变节点的 ID。
迁移节点的步骤简单来说,包括以下几步:
- 停止需要迁移的节点的服务
- 从老机器上拷贝数据目录到新机器上
- 通过集群运行时更改的更新操作,改变节点的 peerURLs 值为新机器的 IP:port
- 在新机器上指定拷贝过来的数据目录,启动 etcd 的节点服务
下面通过一个例子具体说明。
假设已有集群示例如下:
etcdctl member list
4d4f508502c31ddc, started, name=etcd3 http://10.5.12.18:2380, http://10.5.12.18:2379
d20b3f1647802774, started, name=etcd2 http://10.5.12.17:2380, http://10.5.12.17:2379
fdbaf2aa62569cb3, started name=etcd1 http://10.5.12.16:2380, http://10.5.12.16:2379
移动 etcd0从10.5.12.16到10.5.12.19:
- 停止etcd1上的etcd进程:
pkill etcd
- 从10.5.12.16上复制数据目录到10.5.12.19:
tar -zcf etcd1.tar.gz /data/etcd
scp etcd1.tar.gz 10.5.12.19:/data
- 变更etcd1的peerURLs:
etcdctl member update fdbaf2aa62569cb3 http://10.5.12.19:2380
- 在新机器上启动etcd:
tar xf etcd1.tar.gz -C /data/etcd
etcd --name etcd1 --listen-peer-urls http://10.5.12.19:2380 --listen-client-urls http://10.5.12.19:2379,http://127.0.0.1:2379 --advertise-client-urls http://10.5.12.19:2379,http://127.0.0.1:2379
灾难恢复
- 备份数据
需要在活着的节点上操作:
etcdctl backup --data-dir /data/etcd --backup-dir /data/backup/etcd
这个命令会将原数据备份到/data/backup/etcd目录下,并冲洗掉相关的元数据,如节点ID和集群ID等。这意味着备份数据中,只包含数据,而不包含身份信息
- 用备份数据重建单节点集群
etcd --name etcd1 --data-dir=/data/backup/etcd --force-new-cluster --listen-peer-urls http://10.5.12.19:2380 --listen-client-urls http://10.5.12.19:2379,http://127.0.0.1:2379 --advertise-client-urls http://10.5.12.19:2379,http://127.0.0.1:2379 --initial-advertise-peer-urls http://10.5.12.19:2380
当确定新集群正常后,就可以删除原来的集群数据,暂停新集群,将新集群的数据目录拷贝到原先数据的位置,并重新启动
pkill etcd
rm -rf /data/etcd
mv /data/backup/etcd /data/etcd
etcd --name etcd0 --data-dir /data/etcd ....
注:如果还是使用之前的节点创建集群,一定要kill掉之前的etcd进程,并清除掉之前的数据
etcd3集群管理的更多相关文章
- Go环境下,编译运行etcd与goreman集群管理(1)
Go环境下编译运行etcd与goreman管理 近几年了Go在比特币.区块链.云服务等相关重要领域贡献突出,作为IT行业的传承“活到老.学到光头”,保持学习心态. 周末放假,补充一二 主题:在Go环境 ...
- 译:Google的大规模集群管理工具Borg(一)------ 用户视角的Borg特性
概述 Google的Borg系统是一个集群管理工具,在它上面运行着成千上万的job,这些job来自许许多多不同的应用,并且跨越多个集群,而每个集群又由大量的机器构成. Borg通过组合准入控制,高效的 ...
- 运维利器-ClusterShell集群管理操作记录
在运维实战中,如果有若干台数据库服务器,想对这些服务器进行同等动作,比如查看它们当前的即时负载情况,查看它们的主机名,分发文件等等,这个时候该怎么办?一个个登陆服务器去操作,太傻帽了!写个shell去 ...
- elasticsearch集群管理工具head插件(转)
elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序,你可以通过插件把它集成到es 插件安装方法1: 1.elasticsearc ...
- zookeeper安装和应用场合(名字,配置,锁,队列,集群管理)
安装和配置详解 本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础,最新的版本可以通过官网http://hadoop.apache.org/zookeeper/ 来获取,Zookee ...
- [转载] 一共81个,开源大数据处理工具汇总(下),包括日志收集系统/集群管理/RPC等
原文: http://www.36dsj.com/archives/25042 接上一部分:一共81个,开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要有日志收集系统.消息系统.分布式服务 ...
- Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET
Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET undefined Package - crawler undefined 科学网- ...
- 2 weekend110的zookeeper的原理、特性、数据模型、节点、角色、顺序号、读写机制、保证、API接口、ACL、选举、 + 应用场景:统一命名服务、配置管理、集群管理、共享锁、队列管理
在hadoop生态圈里,很多地方都需zookeeper. 启动的时候,都是普通的server,但在启动过程中,通过一个特定的选举机制,选出一个leader. 只运行在一台服务器上,适合测试环境:Zoo ...
- Redis核心解读:集群管理工具(Redis-sentinel)
Redis核心解读:集群管理工具(Redis-sentinel) - Redis - TechTarget数据库 Redis核心解读:集群管理工具(Redis-sentinel)
随机推荐
- 初步认识CNN
1.机器学习 (1)监督学习:有数据和标签 (2)非监督学习:只有数据,没有标签 (3)半监督学习:监督学习+非监督学习 (4)强化学习:从经验中总结提升 (5)遗传算法:适者生存,不适者淘汰 2.神 ...
- 软件工程-东北师大站-第十二次作业(PSP)
1.本周PSP 2.本周进度条 3.本周累计进度图 代码累计折线图 博文字数累计折线图 4.本周PSP饼状图
- SpringMvc跨域支持
SpringMvc跨域支持 在controller层加上注解@CrossOrigin可以实现跨域 该注解有两个参数 1,origins : 允许可访问的域列表 2,maxAge:飞行前响应的缓存持续 ...
- OO学习体会与阶段总结(测试与论证)
前言 随着期末的到来,对于面向对象程序设计课程的学习也迎来了尾声.在最后一个月的从课程中,笔者对于面向对象程序规格实现层面的单元测试.正确性论证以及使用UML图描述程序的设计进行了深入的学习.通过 ...
- Java文件写入时是否覆盖
这个是和服务器读数据结合着来的,是向服务器文件写数据,这就碰到了是否覆盖以前写的数据的问题,看FileWriter();的参数后面的参数名叫append,用词典查是附加的意思,灵机一动,改成false ...
- 软工实践-Beta 冲刺 (3/7)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 1.界面的修改与完善 展示GitHub当日代码/文档签入记 ...
- 调研ANDRIOD平台的开发环境的发展演变
在同学的推荐下,我选用学习eclipse这个软件,参考了这个网址的教程开始了一步一步的搭建之路. http://jingyan.baidu.com/article/bea41d437a41b6b4c5 ...
- 【CSAPP笔记】5. 汇编语言——数据
本博客对于汇编的介绍基于32位机器的Intel x86系列处理器和IA32指令集,也涉及少部分x86-64.由于汇编知识相对复杂,这里只做简单介绍和记录,详细请参照书本! 数据格式 下面这张表格中体现 ...
- 【CSAPP笔记】2. 整型运算
现在想补补推荐这本书的理由. Most books on systems-computer architecture, compilers, operating systems, and networ ...
- Linux内核0.11 makefile文件说明
# # if you want the ram-disk device, define this to be the # size in blocks. # 如果要使用 RAM 就定义块的大小(注释掉 ...