ETCD原理详细解析( 二 )


4.3.1. 节点迁移、替换
当你节点所在的机器出现硬件故障,或者节点出现如数据目录损坏等问题,导致节点永久性的不可恢复时,就需要对节点进行迁移或者替换 。
当一个节点失效以后,必须尽快修复,因为etcd集群正常运行的必要条件是集群中多数节点都正常工作 。
迁移一个节点需要进行四步操作:
4.3.2. 节点增加
增加节点可以让etcd的高可用性更强 。
举例来说,如果你有3个节点,那么最多允许1个节点失效;当你有5个节点时,就可以允许有2个节点失效 。
同时,增加节点还可以让etcd集群具有更好的读性能 。
因为etcd的节点都是实时同步的,每个节点上都存储了所有的信息,所以增加节点可以从整体上提升读的吞吐量 。
增加一个节点需要进行两步操作:
4.3.3. 节点移除
有时你不得不在提高etcd的写性能和增加集群高可用性上进行权衡 。

ETCD原理详细解析

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