爱上开源之etcd集群管理工具

58 篇文章 5 订阅
20 篇文章 0 订阅

前言

作为原生云和K8s的底层重要组件etcd一直不断的得到Kubernetes和istio等厂商的关注,以前对标过同类的zookeeper,基本上在各个主要方面都显示出其优点。 一直都没有一款合适的etcd管理维护的工具,今天就介绍通过etcdv3-browser这款工具,来实例一下,通过使用这个工具,来看看如何来维护一个etcd的集群

从最容易的开始,单节点etcd实例

首先,安装第一台单节点的etcd实例,单节点的etcd安装,比较简单了,可以直接解压缩etcd的程序包,按单节点的方式启动

以下是我的启动配置信息

--name node01 \
--data-dir "/var/etcd/etcd-data" \
--listen-client-urls http://0.0.0.0:2379 \
--listen-peer-urls http://0.0.0.0:2380 \
--initial-advertise-peer-urls http://192.168.56.101:12380 \
--advertise-client-urls "http://192.168.56.101:12379" \
--initial-cluster-token etcd-cluster \
--initial-cluster "node01=http://192.168.56.101:52380" 

可以按照参数的说明进行配置

注:下面是这里的参数的说明

--name node01 \
节点名称

--data-dir "/var/etcd/etcd-data" \
etcd数据的保存路径,这里包括了etcd里重要的两个持久化数据SNAP和WAL数据, 恢复和备份就是对这里的数据的操作

--listen-client-urls http://0.0.0.0:2379 \
客户端访问的监听服务的地址

--listen-peer-urls http://0.0.0.0:2380 \
集群内部访问的监听服务地址

--initial-advertise-peer-urls http://192.168.56.101:12380 \
提供集群内部通讯的地址,对外提供服务的IP

--advertise-client-urls "http://192.168.56.101:12379" \
提供对我服务通讯的地址,对外提供服务的IP

--initial-cluster-token etcd-cluster \
引导期间etcd群集的初始群集Token,默认为etcd-cluster。

--initial-cluster "node01=http://192.168.56.101:52380" 
群集节点配置

查看日志,确认没有出错信息,

恭喜你

单节点的etcd实例就启动成功了

打开etcdv3-browser, 连接刚刚建立的单节点实例,

如图 新建连接

查看节点状况

目前是单节点状况, LeaderID就是此节点的ID 

测试创建新的KEY

 

测试一下WATCH事件,等下咱们的集群环境里也要看看效果的

这里建立了一个观察点, 监听etcd里所有的KEY的变化,选择了,当变化时返回新值和旧值

修改一下咱们刚才新建的first这个Key从刚才的Helloworld改为Helloworld00001,看看效果

 

 

 在观察点的列表里,就可以直接收到push过来的事件。

进一步深入,让我们扩展到两节点

在扩展两节点之前,我们必须先做好规划工作, 所有的集群管理都是如此,这里我们只是演示一下过程,规划的方案选择等就直接略过, 反正我们现在的目标就是要把原来的单结点先扩展至2个节点,然后更多的节点。

为了节省机器资源,演示中扩展的第二个节点,的IP还是同一个机器的IP,

端口分别为16379和16380,  节点的名称为node02

开搞

规划好以后,我们要基本了解一下etcd集群扩容的过程,etcd集群扩容,需要先在集群里进行member add的操作, member add成功以后,按照配置要求,在新节点的机器上按照要求启动新节点上的服务命令。 

当然对于集群的扩容操作,不管公司是否有规定,我们自己都首先要有备份的习惯,先备份好集群前的数据和环境, 以防止扩容时失败,可以重新进行恢复。当然虽然正常情况下,发生的概率很小,但是谁都怕这个叫万一的呢。

先备份

安全起见,首先备份, 能够想象到吗,etcv3-browser居然提供了备份功能

用etcv3-browser建立快照一份,以防万一

选择连接的节点,右键菜单-》导出快照

 

这样就可以下载一份快照数据下来了。下载前,可以先在菜单里点击服务器状况,查查服务器的数据存储空间是多少, 快照大致上和存储空间同样的数量级,如果快照过大,建议在局域网里使用。避免占用带宽过多。

添加新节点

选择连接的节点,在集群菜单右键-》点击 新增加服务成员

在节点连接地址里,填写新扩展节点规划好的集群内部通信地址,如上我们规范的是

第二个新节点的集群通信地址是,http://192.168.56.101:16380

这里还有一个选项,是否作为学习者, Learner是etcd解决集群扩容时,已有大数据的情况下,新节点初始同步集群数据时会对原集群有一定影响的解决方式,具体内容参考etcd的维护文档, 这里我们选择作为学习者。 点击确定,查看添加是否成功的信息。

新节点的记录以及成功添加了。 在集群信息里查询一下

查看集群信息

 

新节点已经在机器里可以看到了,而且还是一个学习者。 

注: 在这里进行添加集群成员的时候, 新的这个成员的实例并么有启动,作为集群环境,他也无法启动,即使现在启动了,那么他也是在另一个集群环境里,以后添加进这个环境,以前的数据还是会丢失。

启动新节点实例

重要的步骤来了。  添加成员只是在集群里提交了新成员的信息,但是要新成员成功入群,必须在新节点的服务机器上,成功的启动etcd的实例才行。  etcdv3-browser帮你考虑到了, 通过etcdv3-browser可以导出复杂的命令行命令, 

导出命令行命令

 

 

拷贝 图中的 启动行命令,至你的新节点的机器上, 修改其中红色部分为你规划好的新节点的相关配置

如下:

export NODE_NAME='etc02'
export ADVERTISE_CLIENT_URLS='http://192.168.56.101:16379'
export CLIENT_LISTEN_PORT='16379'
export PEER_LISTEN_PORT='16380'

etcd --name $NODE_NAME \
--listen-client-urls http://0.0.0.0:$CLIENT_LISTEN_PORT \
--listen-peer-urls http://0.0.0.0:$PEER_LISTEN_PORT \
--advertise-client-urls "$ADVERTISE_CLIENT_URLS" \
--initial-advertise-peer-urls http://192.168.56.101:16380 \
--initial-cluster "etcd01=http://192.168.56.101:12380,$NODE_NAME=http://192.168.56.101:16380" \
--initial-cluster-state existing

查看集群状况

 可以看到节点2的nodename和接口url都已经成功注册, 节点成功加入集群。

马上使用第二点,你能够成功吗

连接第二个节点,能够成功吗, 答案是 不能成功,你连接试试,为什么呢?

不知道你猜到了没有,这个和我们添加节点的策略有关,还记得,我们添加成员时,是使用的学习者,作为学习者没有正式提升为一个投票节点之前,是不能对外提供服务的,这个做过集群系统的都应该可以猜测到这点。 下面我们把学习者提升为投票者,当然如果添加成员的时候,没有选择作为学习者的话,就不需要这了, 当学习者同步完这个集群的数据,就可以提供服务了,当然作为代价,就是在同步整个数据之前,整个集群服务可能会因为同步过程的相互检查投票,而导致服务受到一定的性能影响, 而作为学习者收到的影响较小,完全可以在选择一个较小业务量的时候,进行提升而避开高业务量时候的影响。

提升学习者

 

提升成功, 学习者的图标也会改为投票节点的图标 

图标已成为一个投票节点,并且 集群状况里, 学习者的标注已经消失,标识已经可以提供服务了。 下面的一个图标是领导者,是整个集群投票选出了的头,下面还会介绍。

 试试新节点的服务吧

连接新的节点,查询所有的Key, 原有的etcd01里的数据,已经在etcd02里出现

 在etcd01的节点上创建一个事件观察器,监听所有的键值变化,然后我们在etc02的节点上,添加一个新的Key, second, 看etcd01里的事件是否能够push到这个变化。

ETCD02上添加second

 ETCD01上就可以查询到second

 ETCD01节点上的事件观察器,马上可以获取到Push过来的事件数据

至此,整个集群扩展的功能已经成功。

除了扩容,还有缩编 

缩编在集群维护里,也是非常常见的, 某个节点的机器需要升级软件或者硬件了,就需要下线该节点,直到维护完成后,重新在添加到集群里。

注意: 作为领导者是不能直接移除集群的, 移除领导者,需要先投票其他的节点升级为领导者,然后才能再将其移除集群。 etcv3-browser同样支持,领导者投票的功能

投票成为集群领导者 

该操作必须在领导者的节点上进行操作,只有领导者的节点才能进行提升节点领导者的能力

修改现有集群节点的信息

有时,节点的网络信息可能需要变化,etcv3-browser同样提供这样的功能

 

尾声

etcdv3-browser不仅提供了基础的单节点的etcd实例的数据维护功能,还提供了全面的etcd集群的管理和维护功能, 正如前面所谈到的,etcd是k8s里的最重要最基础的最底层的功能组件, 在k8s里,上层的Pod无需去对etcd进行管理和通信维护的动作, k8s里各种组件功能也都是通过slidecar模式来进行实现的, 所以如何一起热心朋友聊到的,虽然这个工具很不错,但是在k8s的场景里,并没有太多的使用场景。  确实, 这为朋友提出的这个问题,是很有深度的, 能提出这样的问题,表示这个朋友在云原生和k8s的应用上都应该很多,至少是思考过很多。 如同这位朋友所说的。如果只是单纯的在k8s的应用上,etcdv3-browser毕竟只是专注在了etcd实例的管理之上,对于k8s的内部维护上, 貌似用etcdv3进行管理和维护,确实不是很应景,k8s通过自己服务的封装,etcd不需要对外公布,这点确实的,但是如果我们往上层走一走,如果是基于k8s的应用,在提供的应用里etcd完全是可以自己提供一些应用的,甚至在完全脱离了K8s的环境, 那些直接使用etcd作为集群底层服务治理或者作为数据存储的应用,还是非常期待有这样一个工具出现的。 只是目前etcd确实在市场上,比zookeeper还是要小一些,不过既然k8s都是用了,我觉得etcd一定有他的价值所在的,还是需要市场慢慢的培养吧,毕竟zookeeper多么久远的耕耘了。

最后,还是那句话,当我用过了go,就觉得底层开发和框架开发上,完胜java, 当我用过了etcd后,etcd也是一样完胜zookeeper,不过仅仅局限在底层开发和框架开发上,但是咱们国内又有多少做这样开发的公司呢,都是实现项目,做CRUD的这样的公司,当然也需要更久的培育了。

创新,创新,创新。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inthirties

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值