ETCD数据存储情况( 二 )


增加节点可以让etcd的高可用性更强 。举例来说,如果你有3个节点,那么最多允许1个节点失效;当你有5个节点时,就可以允许有2个节点失效 。同时,增加节点还可以让etcd集群具有更好的读性能 。因为etcd的节点都是实时同步的,每个节点上都存储了所有的信息,所以增加节点可以从整体上提升读的吞吐量 。
增加一个节点需要进行两步操作:
(3). 节点移除

ETCD数据存储情况

文章插图
有时你不得不在提高etcd的写性能和增加集群高可用性上进行权衡 。节点在提交一个写记录时,会把这个消息同步到每个节点上,当得到多数节点的同意反馈后,才会真正写入数据 。所以节点越多,写入性能越差 。在节点过多时,你可能需要移除其中的一个或多个 。移除节点非常简单,只需要一步操作,就是把集群中这个节点的记录删除,则对应机器上的该节点就会自动停止 。
(4). 强制性重启集群
当集群超过半数的节点都失效时,就需要通过手动的方式,强制性让某个节点以自己为,利用原有数据启动一个新集群 。
此时你需要进行两步操作 。
注意:强制性重启是一个迫不得已的选择,它会破坏一致性协议保证的安全性(如果操作时集群中尚有其它节点在正常工作,就会出错),所以在操作前请务必要保存好数据 。
2.5 PROXY模式
Proxy模式也是新版etcd的一个重要变更,etcd作为一个反向代理把客户的请求转发给可用的etcd集群 。这样,你就可以在每一台机器都部署一个Proxy模式的etcd作为本地服务,如果这些etcd Proxy都能正常运行,那么你的服务发现必然是稳定可靠的 。
图11 Proxy模式示意图
所以Proxy并不是直接加入到符合强一致性的etcd集群中,也同样的,Proxy并没有增加集群的可靠性,当然也没有降低集群的写入性能 。
那么,为什么要有Proxy模式而不是直接增加etcd核心节点呢?实际上,etcd每增加一个核心节点(peer),都会给节点增加一定程度的负担(包括网络、CPU和磁盘负载),因为每次信息的变化都需要进行同步备份 。增加etcd的核心节点固然可以让整个集群具有更高的可靠性,但是当其数量达到一定程度以后,增强可靠性带来的好处就变得不那么明显,反倒是降低了集群写入同步的性能 。因此,增加一个轻量级的Proxy模式etcd节点是对直接增加etcd核心节点的一个有效代替 。
熟悉0.4.6这个旧版本etcd的用户会发现,Proxy模式实际上取代了原先的模式 。模式具备转发代理的功能 。此外,在核心节点因为故障导致数量不足时,还会从模式转为核心节点 。而当故障节点恢复时,若etcd的核心节点数量已经达到预设值,则前述节点会再次转为模式 。
但是在新版etcd中,只在最初启动etcd集群的过程中,若核心节点的数量已经满足要求,自动启用Proxy模式,反之则并未实现 。主要原因如下 。
基于上述原因,目前Proxy模式有转发代理功能,而不会进行角色转换 。
关键部分源码解析
从代码中可以看到,Proxy模式的本质就是起一个http代理服务器,把客户发到这个服务器的请求转发给别的etcd节点 。
etcd目前支持读写皆可和只读两种模式 。默认情况下是读写皆可,就是把读、写两种请求都进行转发 。而只读模式只转发读的请求,对所有其他请求返回501错误 。
值得注意的是,在etcd集群化启动时,除了因为设置proxy参数作为Proxy模式启动之外,如果节点注册自身信息的时候监测到集群的实际节点数量已经符合要求,那么也会退化为Proxy模式 。