APP下载

民航西北空管局基于Nginx的数据反向代理设计与应用

2020-06-21白宇晨雷隐隐

科学导报·学术 2020年69期
关键词:负载均衡集群

白宇晨 雷隐隐

【摘 要】随着我国民用航空业的迅速发展,近年来航班量迅速增加。空管系统做为航班飞行指挥的重要环节之一,业务量也在不断的增加。在数字化方面主要体现在空管各类业务系统的增加和各系统数据量的增加。本文将通过研究开源Nginx的能力,在保证业务连续性与安全性的同时,利用Nginx解决空管数据中各类协议的转换与不同数据协议引接上云的问题。

【关键词】Nginx;UDP;TCP/IP;反向代理;集群;负载均衡

一、研究背景

民航西北空管局为响应高质量发展的要求,大力推进“强安全、强效率、强智慧、强协同”的现代化空管体系建设。其中强智慧”要将空管指挥与云计算、大数据、人工智能等通用技术融合,助力西北空管局实现智能感知、泛在互联、融合运行、智慧决策、智敏服务。因此,西北空管局进来年全面开展数字化转型工作,着手设计与建设西北空管生产运行数据平台(私有云)。在此数字化进程中,数据上云的设计与实现成为做好私有云建设的第一步。西北空管局数字化转型团队通过租用公有云的形式搭建数据实验平台,对西北空管局生产运行数据平台(私有云)建设方案进行验证测试。在此期间,团队发现西北空管业务系统种类繁多,数据信号格式各异,直接引接数据上云难度较大,主要存在以下几项技术问题:1)业务数据输出协议包括TCP/IP协议、UDP组播、UDP单播等不同种类的协议。2)TCP/IP协议下,某些系统存在未设置TTL值的情况,无法配置多跳路由上云。3)业务系统单个数据包过大,MTU值超过1472 Bytes,经路由之后存在丢失数据现象。4)业务系统与公有云之间需要保证网络安全。

针对存在的问题,设计采用Nginx对数据信号进行反向代理。

二、Nginx总体介绍

Nginx是一款基于Linux的、开源的、高性能的HTTP服务器和反向代理服务器,同时支持IMAP/POP3/SMTP代理服务。Nginx模块分为核心模块,基础模块和第三方模块。核心模块包括HTTP模块、事件模块、MAIL模块等。基础模块包括HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块、HTTP Rewrite模块等。第三方模块:HTTP Upstream Request Hash模块、Notice模块、HTTP Access Key模块等。Nginx能够快速高效代理与反向代理,同时在负载均衡方面有出色表现。支持多并发的连接,并在大并发时占用很低内存,支持热备,启动迅速。

三、Nginx反向代理TCP与UDP协议

Nginx并不直接提供 TCP/UDP 的应用响应,Nginx Stream 模块的核心功能是将客户端的 TCP/UDP 连接反向代理给后端的被代理服务器。使用的配置指令应在stream与server指令域内。

针对UDP的反向代理,因为UDP协议为一种无连接的协议,发送与接收两端并不需要建立连接,也不需要维持连接状态与收发状态,根据UDP单波、UDP组播、UDP广播的不同,一个发送端发出的UDP包可以被组内的多个接收端接收,同时UDP协议自身并没有会话保持机制。针对UDP协议,Nginx定义了一个维持的机制,可以通过配置实现当发送端发出一个UDP包时,等待接收回包,以保持会话。根据对proxy_responses配置值的不同,决定了此次回话的最长等待时间,规定时间内没有响应则断开会话。Nginx反向代理UDP配置示例如图

Nginx 负载均衡是由代理模块和上游(upstream)模块共同实现的,Nginx 通过代理模块的反向代理功能将用户请求转发到上游服务器组,上游模块通过指定的负载均衡策略及相关的参数配置将用户请求转发到目标服务器上。上游模块可以与 Nginx 的代理指令(proxy_pass)、FastCGI 协议指令(fastcgi_pass)、uWSGI 协议指令(uwsgi_pass)、SCGI 协议指令(scgi_pass)、memcached 指令(memcached_pass)及 gRPC 协议指令(grpc_pass)实现多种协议后端服务器的负载均衡。

四、Nginx集群搭建与负载均衡

如果想实现TCP和UDP的反向代理,必须选择Nginx的Linux版本,Linux版本的Nginx集群负载是使用LVS做为传输层的负载均衡设备,将客户端请求从传输层负载到后端的Nginx集群,并由Nginx集群实现应用层负载均衡处理的多层负载均衡网络架构。LVS作为传输层负载均衡与接入路由对接,负责把数据包转发给后端的Nginx服务器。LVS选用DR转发模式,网络数据包在传输层被分发到Nginx服务器,并由Nginx经过本地路由返回给客户端。Nginx集群负载部署图如下图所示。

Nginx负载均衡是由代理模块和upstream模块共同实现的,Nginx通过代理模块的反向代理功能将用户请求转发到上游服务器组,upstream模块通过相负载均衡策略及参数配置将用户请求转发到目标服务器上。upstream模块可以与Nginx的代理指令、FastCGI协议指令、uWSGI协议指令、SCGI协议指令、memcached指令及gRPC協议指令实现多种协议后端服务器的负载均衡。

五、Nginx日志管理与监控

Nginx的日志分为访问日志和错误日志两种。访问日志中记录了用户IP、浏览器信息、响应状态等,通过Nginx的access_log指令更改所需信息并输出到访问日志中。通过查看访问日志,可以了解系统的安全性、性能、可用性等信息。错误日志会记录Nginx加载配置时检查出的异常、运行时请求处理的异常和服务器调试信息等。通过error_log指令可以对错误日志进行配置。查看错误日志可以帮助排查Nginx运行问题、调整Nginx配置参数、优化系统性能。

六、西北空管局基于Nginx集群的设计思路

通过搭建Nginx代理服务器集群,配置集群间的负载均衡,利用Nginx反向代理功能,将西北空管局业务系统视为客户端,公有云端视为服务端,将客户端不同的数据协议转换为TCP/IP协议并代理至服务端。通过集群和负载均衡的技术手段,保障业务连续性,确保因单条链路或者单独服务器故障时数据不中断,云上数据完整。同时通过nginx反向代理隐藏真实服务端,隔离数据源业务系统和公有云以保证安全,不对外暴露内网业务系统,安全可靠的实现业务数据上云。通过配置Nginx日志,存储访问和错误日志,提供良好的可观测性和可维护性。

针对前文中提出的业务数据输出类型包括TCP/IP协议、UDP组播、UDP单播等各类协议的问题。TCP/IP协议数据可以在nginx中进行路由配置进行反向代理,将内部业务系统数据代理输出转发,同时配置负载均衡进行负载均摊,保证业务连续性。UDP组播协议数据由于网络协议上的限制,无法通过三层路由设备,nginx的代理转发也基于三层路由,所以需要在服务器上部署组播接收程序及解析程序,接收到组播数据后,通过解析程序,将数据包内容解析成XML或Json格式数据,再将并XML或Json格式文本数据以TCP/IP协议发送至nginx相应代理端口,最后由nginx向后端服务器转发数据。UDP单播协议数据可以通过nginx直接接收,由nginx向后端服务器转发数据。针对TCP/IP协议下,某些系统存在未设置TTL值的情况,无法直接配置多跳路由上云的问题。在代理转发前,采用透传的方式至代理服务器,确保中间无路由环节,再使用nginx反向代理上云。针对业务系统单个UDP数据包过大,MTU值超过1472 Bytes,经公网路由之后存在丢失数据现象。修改代理服务器对应内网网卡MTU至9000(巨型帧上限),同时将原本在云上CCE部署的解析程序前置,部署在代理服务器上,先接收UDP数据包,通过解析模块解析处理成XML或Json格式数据后,原本的数据包内数据将变成文本格式数据,数据包大小将大幅减小,之后使用TCP协议发送解析后数据至公有云。下图为UDP协议数据及TCP/IP协议数据经过Ngnix代理中转后的数据抓包实例,与原数据进行对比后证实代理前后数据内容一致,Ngnix可顺利完成代理功能。

七、结论

利用Nginx服务集群可以较好的解决空管行业系统间数据引接,业务数据上云过程中的问题,不仅能够以TCP/IP方式统一提供对外数据,并且通过Nginx服务集群分布式部署能够极大的保障业务连续性,同时在安全性方面也有一定的保障,所有数据交互均通过安全代理服务器,可以在代理服务器上配置相应的安全规则,以过滤非授权的访问。而且针对私有云或数据中心的建设,因为数据种类较多同时对外也会提供大量数据服务,使用Nginx代理能够节省大量的IP资源。使用Nginx服务集群代理转发空管业务数据是一种有效、安全、可行的方法。

参考文献:

[1]郭大伟,张伟,姜晓艳.一种基于Nginx的UDP反向代理服务器数据转发策略[J].北京信息科技大学学报(自然科学版),2019,34(06):87-91.

[2]吴宝花. 基于Nginx的服务器集群负载均衡策略研究与优化[D].南昌大学,2020.

[3]赵凯.一种基于Nginx反向代理机制的微服务负载均衡方法分析[J].无线互联科技,2020,17(16):140-141.

[4]李萌,汪贤浩.Linux下基于Nginx的配網数据采集高并发处理设计与实现[J].电子技术与软件工程,2019(22):26-27.

[5]王利萍. 基于Nginx服务器集群负载均衡技术的研究与改进[D].山东大学,2015.

[6]王小东. Nginx应用与运维实战[M].机械工业出版社,2020,8.

(作者单位:中国民用航空西北地区空中交通管理局)

猜你喜欢

负载均衡集群
小议产业集群内涵
勤快又呆萌的集群机器人
Linux负载均衡集群技术在网络服务器中的应用
Oracle MAA在汽车行业电子政务平台中的应用
异构环境下改进的LATE调度算法
集群品牌是集群整体的品牌还是集群产品的品牌?
基于负载均衡的云资源调度策略研究
多站点同步更新系统的设计
模糊理论在Ad hoc网络通信领域的应用
数字集群的未来之路(上篇)