OpenResty 动态负载均衡

OpenResty 动态负载均衡,第1张

在之前提到的OpenResty/Nginx的负载均衡当中,当服务器启动之后,upstream中的上游服务器就是固定死的了,做不到动态的变更。这里面说到的变更,其实更多指的是增加机器。因为当上游服务器不可用时,upstream会自动将服务器摘除,但是当新增服务器时,upstream就做不到了。传统的负载均衡办法,就是能是修改配置,然后重启服务。下面介绍一下动态负载均衡的方式,一种是通过动态重启服务;另外一种是通过代码的方式动态拉取服务器列表。

Consul是一个分布式服务注册与发现系统。这里面使用Consul来管理上游服务器,当服务器启动时将其注册到注册中心去,当服务关闭时从注册中心列表中剔除。这里面需要注意一点的是:当上游服务器关闭时,Consul本身不会自动从列表中剔除,而是需要在服务器关闭前主动向Consul发起删除服务。

Consul有以下特性:

通过Consul可以获取到upstream中的上游服务器列表,下面要做的事情就是生成upstream中的模板了。这里就需要用到Consul-templete,它可以使用HTTP长轮询实现变更触发和配置更改。从而可以根据Consul服务器列表动态生成配置文件,然后去重新启动OpenResty/Nginx即可。

Consul+Consul-templete 就如上面所说的,是一种监听服务器列表变更,然后动态生成upstream模板,重启服务器。

Consul-Server

笔者使用的是MAC,下面所进行的操作都是基于MAC系统的。首先需要安装Consul如下:

安装完成之后,可以通过如下命令启动Consul服务:

启动完成之后,可以通过如下地址:localhost:8500/ui。访问Consul的Web界面:

可以使用HTTP的方式向Consul注册一个服务:

Consul-template

Consul-template的作用是生成upstream配置模板,安装命令如下:

然后在nginx.conf同级目录下创建moguhu_server.ctmpl

重启OpenResty脚本如下:reboot.sh

然后nginx.conf配置如下:

上游服务器

上游服务器upstream中使用的是Spring Boot实现的,其核心代码如下所示:

笔者在实验时,Consul版本的问题,造成在JVM停止时,没有执行删除服务的操作。因此附上下面的pom依赖

测试验证

1、启动Consul

2、启动Consul-template

3、启动2台upstream服务器

然后你会发现在nginx.conf的同级目录下生成了moguhu_server.conf文件,内容如下:

当手动停掉一台服务器时,配置又会变更为如下:

此时reboot.sh脚本会自动触发执行,如下所示:

上面的方式实现动态负载均衡在配置较多的时候会有一些问题,比如配置较多时,OpenResty重启的速度就会变慢。所以通过Lua脚本的方式可以规避掉重启这一步骤。

使用Lua实现时,与上面的组件相比Consul-templete就不需要了。通过Consul的 http://127.0.0.1:8500/v1/catalog/service/moguhu_server 接口就可以获取到服务的列表,如下所示:

这一方式当中主要就是OpenResty里面的相关配置。

OpenResty 配置

upstreams.lua

nginx.conf

上面通过balancer_by_lua_block去动态的设置了,upstream的服务器列表。然后启动OpenResty就可以了。

参考:《亿级流量网站架构核心技术》

以下是抄来的,同时我也学习到了!

1、加快网络速度,动态负载均衡有效利用资源。带宽大与带宽小的根本区别是速度快慢,使用多WAN口路由器同时接入多条线路提高线路总体带宽,目前能提供足够大带宽的线路成本普遍较高,如果捆绑多条窄带宽线路汇聚线路带宽,就可以在节省成本的同时提高线路带宽,并且通过很好的动态负载均衡机制,有效的利用线路带宽,局域网内的上网请求是突发的,将这些突发的请求动态的分配到多条线路,从宏观上看可以均衡的利用各条线路带宽,避免了一条线路阻塞而另一条线路空闲的局面发生,可以充分有效的利用资源。

2、统一管理,不再划分网段使用。使用多WAN口路由器将多条线路接入到一台设备,对于局域网来说只有一个网关,避免了使用多条线路有多个网关的弊病,所有网段的局域网之间实现了真正的互连和信息共享,并且将局域网集中起来统一管理,网络管理人员可以省去很多不必要的重复工作,只要对一台设备进行管理就可以实现对局域网多种应用的管理。

3、主动选择出口,信息流向可控。通过规则设定使得宽带路由器主动选择信息出口,信息的流向可控,指定的访问请求从指定的线路流出,同时又满足了不同部门复杂多样的网络访问需求,同时保证信息的安全性。

4、实现电信网通的同时高速访问,现如今,众多主流路由器厂家的多WAN产品中都带了策略路由功能,可以现在同时的高速访问电信和网通服务器,对于一些网络环境要求高的地方,多WAN性能涉及了ADSL甚至光纤达不到的领域。独特的策略路由功能,让你在电信,联通之中畅行无阻。

问题1:负载均衡能不能达到宽带叠加。

回答:这要看你的宽带叠加的理解方向。单线程下载,负载均衡达不到下载速度的真正叠加,微观方面发送数据包的同时就已经确定了定向连接。走的哪条ADSL,那是在数据包发送的开始就已经得到了确定。单线程的下载速度始终达不到2条ADSL1+1=2的效果。多线程下载的同时。路由器的负载均衡里面。每个线程通道分别走不同的线路,是可以达到理论意义上的叠加。1+1》1.5

问题2:能不能达到当一条ADSL断网的时候游戏不掉线同时转到另一条宽带上.

回答。现在的宽带路由器是达不到这个结果的,对于游戏程序的连接来说,也是认定公网IP实现定向连接的。公网IP一变动。游戏的连接方式必然掉线,然后进行重新定向连接。就和很多游戏,一个号在线的时候,同时。这个帐号在另一个地点同时登陆的时候,在后台数据上就会显示出,并弹出此帐号已在其他地方登陆。

问题3:策略路由的作用有这么明显么?

回答:就一些网络环境转换高的网络环境而言,策略路由是个很实在的功能,电信和网通的高效访问一直是个难题。电信客户连接网通的时候,延迟大家是可以知道,对于一些高品质的游戏玩家而言,同时能玩电信和网通能解决很多时候的烦恼。

现如今,家用市场也出现了功能型的多WAN产品。负载均衡。策略路由已经出现在家用多WAN市场,组建高品质的家用,小型公司网络

您好,很高兴为您解答。

1、企业实现Web服务器负载均衡

为了将负载均匀的分配给内部的多个服务器上,就需要应用一定的负载均衡策略。通过服务器负载均衡设备实现各服务器群的流量动态负载均衡,并互为冗余备份。并要求新系统应有一定的扩展性,如数据访问量继续增大,可再添加新的服务器加入负载均衡系统。

对于WEB服务应用,同时有几台机器提供服务,每台机器的状态可以设为regular(正常工作)或backup(备份状态),或者同时设定为regular状态。负载均衡设备根据管理员事先设定的负载算法和当前网络的实际的动态的负载情况决定下一个用户的请求将被重定向到的服务器。而这一切对于用户来说是完全透明的,用户完成了对WEB服务的请求,并不用关心具体是哪台服务器完成的。

2、使用网络地址转换实现多服务器负载均衡

支持负载均衡的地址转换网关中可以将一个外部IP地址映射为多个内部IP地址,对每次TCP连接请求动态使用其中一个内部地址,达到负载均衡的目的。很多硬件厂商将这种技术集成在他们的交换机中,作为他们第四层交换的一种功能来实现,一般采用随机选择、根据服务器的连接数量或者响应时间进行选择的负载均衡策略来分配负载。然而硬件实现的负载控制器灵活性不强,不能支持更优化的负载均衡策略和更复杂的应用协议。

基于网络地址转换的负载均衡器可以有效的解决服务器端的CPU和磁盘I/O负载,然而负载均衡器本身的性能受网络I/O的限制,在一定硬件条件下具有一定的带宽限制,但可以通过改善算法和提高运行负载均衡程序的硬件性能,来提高这个带宽限制。不同的服务类型对不同的服务器资源进行占用,我们使用的负载衡量策略是使用同一个负载进行评估,这对于大多数条件是适合的,然而最好的办法是针对不同的资源,如CPU、磁盘I/O或网络I/O等,分别监视服务器负载,由中心控制器选择最合适的服务器分发客户请求。

3、使用DNS服务器实现负载均衡

访问企业网服务器的用户急剧增加,一台服务器难以满足用户的访问需要,那么如何才能保证用户的正常访问呢?解决方法有很多,如使用Windows

2000或Windows Server 2003提供网络负载均衡服务,但该服务的设置非常复杂。而通过DNS服务器实现网络负载均衡则是一种比较简单的方法。

企业网通常由很多子网构成,为了降低网络中的数据流量,客户机最好能访问处于同一子网内的Web服务器。虽然实现了网络负载均衡功能,但并不能保证客户访问的是本子网的Web服务器。其实这个问题也很好解决,只要启用DNS服务器的“启用网络掩码排序”功能即可。在DNS管理器窗口中,右键点击DNS服务器,在弹出的菜单中选择“属性”,然后在属性对话框中切换到“高级”选项卡,勾选“服务器选项”列表框中的“启用网络掩码排序”选项即可。这样客户机每次都能访问到本子网内的Web服务器了。完成以上设置后,就使DNS服务器实现了网络负载均衡功能,把客户的访问分担到每个Web服务器上,并且还减少了跨子网的网络通信流量,大大降低了企业网的通信负担。

4、企业实现SQL Server数据库服务器负载均衡

MS SQL

Server数据库服务器可以说是应用范围最广的数据库产品,并且越来越多地在大型和比较关键的应用系统中提供服务。当企业应用越来越复杂、数据量越来越大的时候,SQL

Server数据库要不停的进行处理、存储、查询的工作,这个时候企业就要考虑SQL Server数据库服务器的性能和速度及安全性了。然而,长期以来,SQL

SERVER数据库服务器都只有“热备”的解决方案,而没有“负载均衡”和“集群”的解决方案。

随着数据库路由器软件ICX的出现,为基于MS SQL Server的数据库系统提供了一种更优秀的集群解决方案。它可以真正的实现SQL

Server数据库服务器的动态负载均衡,提高性能和速度它可以真正的保证SQL

Server数据库服务器不间断的提供服务,在服务器发生故障的时候实时切换到其他服务器上继续提供服务,切换时间为“零”。数据库路由器是实时并发数据库事务处理同步复制器和负载平衡器。

所有的数据库客户都通过ICX访问数据库。当访问、查询SQL

Server数据库的时候ICX可以根据实际情况分配服务器来提供服务,大大提高服务速度和优化性能,完成负载均衡。ICX可以同时连接多台数据库,这若干台数据库的内容在任何时刻由ICX保证是完全一致的。也就是说,ICX采用了全新的并发事务处理的方式,向连接的N台数据库同步复制事务处理,使得系统在任何时刻具有多个一致的最新逻辑数据库数据集。当其中一台数据库服务器发生故障的时候,ICX可以实时的、第一时间切换到其他服务器上来继续提供服务。真正的实现零时间的服务器切换,大大提高安全性,真正意义的实现服务器不间断服务。

5:当然自己可以DIY:用f5的网络负载均衡硬件和sql

server的复制技术软件可以实现负载均衡,故障切换则需要windows的cluster或者sql server

2005的mirror。除了那个f5的硬件外,整个方案成本其实很低。

如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】

希望我的回答对您有所帮助,望采纳!


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/484846.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-09
下一篇2023-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存