集群

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的高可用。

图片