郭炜杰 孙显水 蒋国明 浙江理工大学信息化办公室
VMWARE已经广泛使用,通常的做法是在VMWARE虚拟化平台上创建虚拟机来用于web服务器,在但在日常运维中发现单台web服务器无法承受瞬间的高并发访问,这就需要增加web服务器的数量,并采用负载均衡技术使多个web服务器分别处理并发访问请求,减少单台web服务器的运行压力。从服务器安全和互联网IPv4地址资源有限的角度考虑,web服务器一般不直接暴露在互联网上,因此需要借助反向代理技术来隐藏web服务器的真实IP,对其进行逻辑上的隔离,不仅要防御来自外网的攻击,也要防御来自内网的攻击。
Nginx是由俄罗斯的程序设计师伊戈尔 赛索耶夫(Igor Sysoev)开发的一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器。Nginx是一个跨平台服务器,可以运行在 Linux、Windows、FreeBSD、Solaris、AIX、MacOS等操作系统上。Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接,其特点是占用内存少、并发能力强、稳定性好,事实上Nginx的并发能力在同类型的web服务器中表现较好,国内的百度、京东、新浪、网易、腾讯、淘宝等网站都使用了Nginx。
Nginx的upstream模块使Nginx跨越单机的限制,完成网络数据的接收、处理和转发。Nginx支持的负载均衡方法如下:
①轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。
②weight:给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率。权重数据越大,被分配到请求的几率越大。
③ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下Session共享的问题。
④fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配。响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少,它是结合了前两者的优点的一种调度算法。
⑤url_hash:按照访问的URL的hash结果分配请求,每个请求的URL会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。
1.VMWARE 虚拟化平台
采用两台DELL R910物理服务器作为VMWARE虚拟化平台的宿主机,部署 VMWARE ESXi Server 5.5。vCenter上配置vMotion功能。物理服务器的第1个网口接管理网段,配置虚拟交换机vSwitch0,端口组为“管理口”;第2和第3个网口接服务器区核心交换机,配置虚拟交换机vSwitch1,端口组为“内网业务口”;第4和第5个网口接互联网接入交换机,配置虚拟交换机vSwitch2,端口组为“外网业务口”。物理服务器的光纤HBA卡接FC-SAN双活存储设备,光纤交换机为双机双引擎。架构拓扑如下:
图1 架构拓扑图
2.创建虚拟机
在物理服务器A上创建一台虚拟机nginx-vm1,在物理服务器B上创建一台虚拟机nginx-vm2,配置均为CPU 4核,内存4GB,操作系统使用CentOS7.6。双网卡,一块网卡配互联网的公网IP,另一块网卡配内网IP,内网用户IP、nginx服务器IP、web服务器IP属于不同的子网,在校园网核心交换机上做ACL,内网用户无法直接访问到web服务器。虚拟磁盘创建在共享存储中,当某一台物理机故障时,上面的虚拟机能够自动迁移到另一台物理机上。
3.DNS 配置
学校有电信、联通、移动、教科网4条互联网出口链路,DNS的外网视图上把网站域名xxx.zstu.edu.cn解析到虚拟机nginxvm1和nginx-vm2的公网IP上,内网视图上把网站域名xxx.zstu.edu.cn解析到虚拟机nginx-vm1和nginx-vm2的内网IP上。用户访问该网站的请求都通过Nginx转发到后端真正的web服务器上,用户看不到网站web服务器的真实IP。
4.安装和配置Nginx
在虚拟机上安装Nginx[3-4],编辑nginx.conf配置文件。
检查配置文件:[root@nginx ~]# /usr/local/nginx/sbin/nginx -t
启 动 Nginx:[root@nginx ~]# /usr/local/nginx/sbin/nginx
查 看 Nginx日 志:[root@nginx ~]# tail -f /usr/local/nginx/logs/access.log | grep xxx.zstu.edu.cn,查看日志可以清楚的看到每条请求转发到了后端的哪一台web服务器上。
本文对Nginx反向代理和负载均衡技术进行了研究与实践,在无需额外投入资源的情况下,不用改变原有web网站的部署方式,利用现有的网络、服务器和存储资源,有效解决了web服务器遇到突然集中的大量访问请求时系统页面响应缓慢,甚至宕机的问题,缓解了单台web服务器的响应压力,同时在DNS、网络、服务器、存储等层面均采用了冗余架构。在今年疫情防控期间,该架构应用于17000余名在校本科生每日健康打卡,从服务器运行监控上看,很好的起到了负载均衡的作用。
图2 Nginx服务器收到的网络数据包
图3 其中一台后端服务器收到的网络数据包