集群
tl-ops-manage以插件的形式支持到多节点部署,提高可用性,部署模式为 主从
模式,考虑到写操作对于网关来说不是很大瓶颈,目前支持到单主多从即可。
前阵子完善了开源网关 tl-ops-manage 的一些功能,支持到了集群主从模式,来提高可用性,避免单点问题。总结下总体的实现思路和一些待优化点。
下面这篇文章我发布在个人博客,为了方便,复制了一份供参考,博客地址 : https://blog.iamtsm.cn
tl-ops-manage集群
最开始在设计的时候,并没有考虑到单节点可能来的可用性问题,所以初始设计师单节点网关,由于单节点网关可能存在节点下线而导致整个服务不可用过的问题。所以我考虑支持到多节点来保证网关高可用
目前支持的是主从模式
主从节点
在主从节点的设计上,考虑到网关已处理请求为主,规则的修改为次要,且规则的修改不会成为瓶颈。所以将对于修改规则操作而言,一个主节点处理即可,其余从节点负责处理请求。
规则变动感知
对于修改的数据只在主节点生效,而从节点需要如何感知规则变化呢?
目前的实现是由主节点周期性的向从节点发送 所有模块最新数据
,从节点接收后全量同步。
主节点挂掉
对于这个场景,在tl-ops-manage中服务依然可以正常运行,由于主从模式职责一致,都会参与流量负载,仅仅是主节点多负责了 写规则
的职责。
所以即使主节点挂掉,服务依旧正常,只是规则修改接口不可用
待优化问题
1 . 主节点心跳包包含数据
其实心跳包可以不包含数据,只包含每个节点的数据版本即可
2 . 主节点发送全部模块最新数据到从节点
可以考虑做一个数据版本号,依靠心跳包版本号来决定是否传输数据
3 . 支持从节点主动拉取数据
后期将主从心跳包优化后,将支持此模式可供选择
nginx集群
对于网关项目来说,是需要依附于nginx/openresty载体的,tl-ops-manage的集群化,也就需要nginx的集群化。对于nginx集群来说,我了解到可以通过安装keepalived来实现
keepalived
在 keepalived 中,只有一个主节点用于流量,你可以将整个nginx集群看成 单个节点
,且这 单个节点
是支持高可用的。
其实现思想是主备模式,支持主节点下线后,备用节点选举自动升级
lvs
对nginx来说,也可以用lvs来支持到nginx集群,其是一个四层负载均衡器,提供多种负载均衡算法将请求负载到内部服务。
对于大型系统,一般是lvs+keepalived+nginx实现高可用网关集群。
最后,对于tl-ops-manage来说,只需要实现节点间的数据同步, 因为其本身是依附于nginx上的,所以其高可用性也是依附于nginx的高可用。