文/孙耀文 李刚 杨屹
随着SDN-软件自定义网络技术的发展和日益成熟,其影响力已经席卷了各大数据中心和云服务供应商,而且正在迅速的在向院校、企业网中渗透,从某个角度来说,甚至可以称之为SDN是云计算的“第二阶段”,可以预见的是,就像当前服务器虚拟化的迅猛发展一样,在将来的数据中心内,设计、部署、实施以及运维都将离不开SDN技术,这将在很大程度上改变IT从业人员的工作方式,而网络虚拟化作为一个分支,已经成为SDN发展到一定阶段的必然产物,现在各个厂商也相继推出了自己的相关产品,例如VMware NSX、Cisco ACI、Microsoft HNV等,但相比较而言,真正实现了“软件自定义、多功能性、相对开放性、与底层物理网络解耦“的只有VMware NSX,在NSX中的Edge边界网关集成了类似NFV的防火墙、负载均衡、DHCP、NAT、VPN等功能,本文就单臂负载均衡功能为基础实现CentOS的主机高可用性以及CentOS的中的Crontab、Rsync命令实现静态网站数据的自动化同步展开讨论和研究。
VMware NSX(以下简称NSX)作为当前最先进的网络虚拟化产品之一,所能提供的功能中包含四到七层的逻辑负载均衡服务,技术核心为将服务分摊到多个单元上执行,主要是为了实现将应用横向扩展,也就是将工作负载横向分布到多台服务器上以及提供高可用性。负载均衡可以由硬件来实现也可以由软件来执行,虽然硬件负载均衡在性能上优于软件方式,不过其往往成本高昂,部署复杂,而且现在的服务器CPU和内存都非常强大,基本上杜绝了传统软件负载均衡方案效率低下的弊端,而NSX作为基于软件的负载均衡技术,建立在现有网络之上,提供了一种配置简单、高效、廉价、透明的方式来扩展网络设备和服务器的带宽,能有效的增加吞吐量,加强网络数据处理能力,而且NSX中的很多技术细节是非常有利于其更高效率的进行负载均衡服务的:
(1)NSX本身是基于overlay技术的,而VXLAN是overlay技术的基础,核心理念就是对现有的VLAN标签技术进行彻底改变,通过将原始以太网报文进行UDP二次封装的手段,增加 VNI(VXLAN Network Identifier)标识符并进行VTEP隧道转发,在封装时,新的UDP包头的头部包含源、目的端口号,而这个源端口号,是根据原始以太网数据的头部进行哈希计算后得出的结果,这种做法可以更好的支持负载均衡和等价多路径技术。
(2)NSX Controller作为控制平面,实现对转发平面流量实现集中化策略控制,职责是控制运行在Hypervisor之上的交换、路由以及Edge服务,其引入了切片技术,将负载切分成大量不同的片,主要目的之一就是能够更有效的进行负载均衡,而且切片的力度更细则负载均衡效果越好,按照官方的建议,一般规模是部署3、5、7台Controller。
(3)NSX本身支持三种负载均衡服务模式:单臂负载均衡模式、在线负载均衡模式、分布式负载均衡模式,在这里我们就常用的单臂负载均衡模式展开研究,这种模式其实更可以理解为在现有服务器网络中部署一台“负载均衡器”,与传统的Edge边界网关不同,它只需要一个vNIC作为Internal-Interface来连接内部网络,没有Uplink-Interface,所有被负载均衡的虚拟服务器数据的流入、流出虚拟网络都经过它来处理和进行负载均衡算法并进行虚拟服务器资源调拨,整体工作流程概括为(Client IP既访问者IP)-(Edge Uplink-Interface IP边界网关外网IP)-(Edge LB Internal-Interface IP负载均衡Edge进行相关算法进行调拨)-(Server IP被分配的最终服务器IP),反之步骤亦然。
实现单臂负载均衡的技术前提是VMware vSphere集群已经正常运作,VMware NSX的所有基础组件已经正确配置运行而且已经与vCenter进行有效集成,主要组件包括:NSX Manager-NSX管理器、NSX Controller-NSX控制器、VXLAN-虚拟可扩展局域网、TransportZone-传输区域、LSW-逻辑交换机、DLR-分布式逻辑路由器、Edge-边界服务网关;搭建的实验环境如下:
NSX Manager:192.168.3.114( 版本为6.4.3);NSX Controller:192.168.3.185~187(3个控制器节点);VXLAN VTEP:192.168.3.188~189(MTU 1600);TransportZone:VXLAN Pool 5000~5999( 单播);LSW-Subnet-1(192.168.1.0/24实验网段);DLR:192.168.1.1(该网段网关,连接ESG以及LSW-Subnet-1);ESG:IP 192.168.3.90~95(边界网关,执行SNAT、DNAT)。
ESG-SNAT设置:边界ESG的地址为192.168.3.91,SNAT应用于ESG的Uplink Interface,协议为任意,原始源IP/范围为实验网段LSW-Subnet-1承载的192.168.1.2~192.168.1.254地址范围,目标IP/范围为any,转换后的源IP/范围我们取192.168.3.92~192.168.3.95,最后启用日志记录功能。
ESG-DNAT设置:DNAT应用于ESG的Uplink Interface,协议为任意,源IP/范围为any,源端口/范围为任意,原始目标IP/范围为192.168.3.90(这个IP是下面要部署的用于负载均衡的ESG-LB的外网转换IP地址),转换后的IP/范围为192.168.1.254(这个IP是ESG-LB的内网IP地址),转换后的端口/范围为任意,最后启用日志记录功能。
同时准备两台Centos7的虚拟机作为web服务器,分别为CentOS01和CentOS02,地址为192.168.1.2和192.168.1.3,网关192.168.1.1(也就是分布式路由器的内网IP),并编译安装Apache作为web服务
在以上步骤全部完成且正常运行以后,此时CentOS的两台web服务器运行在192.168.1.0也就是逻辑交换机在的内部网段,如果SNAT配置正确的话,这两台虚拟机是可以访问外部网络的,因为实验环境中部署了VMware Log Insight并在ESG中进行了将日志设置输出到Log Insight,可以很详细的观测到SNAT的转化结果,比如在CentOS01和CentOS02也就是192.168.1.2和192.168.1.3上前后相隔10分钟分别进行了一个ping 114.114.114.114的 操 作,Log Insight上可以看到ESG到SNAT的转换日志,可以看到192.168.1.2通过SNAT被转换为192.168.3.92,而192.168.1.3通过SNAT被转化为了192.168.3.93与外网114.114.114.114这个地址进行了通信;然后开始部署用于负载均衡的ESG,首先需要借助vCenter左侧菜单中的“网络和安全”中的“NSX Edge”界面生成一台新的设备,安装类型选择“Edge服务网关”,名称ESG-LB-WEB,并勾选“部署NSX Edge”,接口选择类型为“内部”,连接到和两台CentOS服务器同一个逻辑交换机“LSW-Subnet-1”,ESG的主地址为和两台CentOS服务器同一网段的192.168.1.254/24,网关为192.168.1.1。
ESG-LB部署完毕以后,应该可以看到NSX Edge界面已经存在三台edge设备分别为边界网关ESG,分布式路由器DLR和用于单臂负载均衡的ESG-LB,双击进入新生成的ESG-LB设备,从“设置”标签页进入后选择“证书”子选项,因为负载均衡服务是通过SSL加密的,所以需要先点选“生成CSR”,然后点选生成的CSR-再选择“操作”-“自签名证书”,天数暂时选择365天。然后点击页面上方的“负载均衡器”标签页,选择“启用负载局衡器”并点选“日志记录”功能,然后点击左侧菜单中的“应用程序配置文件”,新建一个配置文件,名称为LB-WEB,因为这里只是计划测试Apache的80端口,所以选择“HTTP”。点击左侧菜单中的“服务监控”,新建一个服务器监控策略,目的是选择ESBLB通过何种策略来检测被负载均衡的成员服务器是否在线,实验环境中我们新建一个名为“Monitor-ICMP”的监控策略并将检测类型选择为“ICMP”。
然后继续点击左侧菜单中的“池”,新建名称为Pool-WEB,NSX负载均衡支持的算法有很多,包括 Rоund Rоbin,Trаffiс,Usеr,Appliаt ion,Session,Service,Auto Mode等,为了实验效果的明显,先选择“Round Robin”,监控策略则选择刚刚新建的Montor-ICMP,然后添加被负载均衡的成员,这里通过虚拟机名称将两台CentOS服务器加入。继续点击左侧菜单中的“虚拟服务器”,新建一个虚拟IP,用于DNAT中的映射地址来使用,至此关于单臂负载均衡器的主体设置完成。
但是此时负载均衡器还是和web服务器一样处于内网,前面的SNAT只是完成了内部服务器数据通往外网的设置,此时还需要在网关Edge上做针对内网IP的DNAT映射,192.168.3.90这个地址是Edge的UplinkInterface的辅助地址之一,而且并没有作为SNAT的地址来使用,我们回到网关Edge上面新建一个DNAT规则,应用于“Uplink Interface”,协议选择“TCP”,源IP/范围填写“any”,原始目标IP/范围填写192.168.3.90,端口选择80,转换后的IP/范围填写ESB-LB的内网地址192.168.1.254,转换后的端口/范围选择“任意”。
至此我们完成了所有SNAT、DNAT以及单臂负载均衡的设置工作,然后需要着手完善CentOS中的Apache配置,因为只是实验环境所以并未将Apache服务器作进一步的优化和添加为系统服务,它存在的目的只是让我们能够明确观察到单臂负载均衡起到了作用,使用Apache自带的index.html回显不同的内容来达到这个目的,我们将/soft/apache2/htdocs中的index.html修改为有标示性的内容以便分辨到底是哪台服务器提供了web访问的服务,然后我们在192.168.3.0/24网段的服务器上模拟外部访问请求,使用不同的Session并结合VMware Log Insight中的日志信息来进一步确定结果.可以看到Log insight中明确记录了NSX单臂负载均衡的相关日志,当使用同一浏览器访问http://192.168.3.90的80端口时,ESB-LB使用RoundRobin算法分别将两次客户端请求调拨分担到了不同的CentOS服务器上,实现了我们的目的-单臂负载均衡。
虽然我们已经实现了基于VMware NSX的单臂负载均衡实现CetnOS的高可用性以及负载均衡,但仍可以进一步优化整个结构,比如在vSphere的DRS中设置隔离规则,将这两台CentOS永远由不同的ESXi来承载,这样部署的优点在于,如果某台CentOS系统本身甚至ESXi虚拟化主机出现故障离线,那么ESG-LB会在保持业务不中断的情况下,通过适合我们业务系统需求的特定算法将所有客户端访问请求发送给仍旧正常运行的虚拟web服务器,如果正在运行的服务器大于两台且ESG-LB正确配置的话,剩余的服务器依旧可以实现负载均衡功能,然后会通过NSX的日志系统或Log Insight日志系统给予告警,以便管理人员进行进一步的故障处理工作。