自动负载均衡集群NAS
上面我们已经成功构建了高可用集群NAS,所有NAS机头均可对外提供NAS服务,并且相互之间具备高可用的特性。如果按照上面的配置实施,则用户可以用通过192.168.1.51, 192.168.1.52, 192.168.153三个IP使用NFS/CIFS来访问集群NAS,访问时需要指定IP。显而易见,这个高可用集群NAS不具备自动负载均衡(load balance)的功能,很容易导致集群NAS机头负载不均衡的情况发生,这对大规模高并发访问或数据密集型应用是非常不利的。
负载均衡最为常用的一种方法是RR-DNS,它为同一个主机名配置多个IP地址,在应答DNS查询时根据Round Robin算法返回不同的IP地址,客户端使用返回的IP连接主机,从而实现负载均衡的目的。RR-DNS负载均衡方法的优点是简单、灵活、方便、成本低,客户端和服务端都不要作修改(除配置DNS信息之外),而且集群节点可以跨WAN。RR-DNS的问题是无法感知集群节点负载状态并进行调度,对故障节点也会进行调度,可能造成额外的网络负载,不够均衡,容错反应时间长。另外一种最为常用的负载均衡技术是LVS(Linux Virtual Server),它由章文嵩博士开创的开源项目,广泛被业界推崇和使用。LVS是一种高效的Layer-4交换机,提供Linux平台下的集群负载平衡功能,它为物理集群构建一个高扩展和高可用的虚拟服务器,以单一IP代表整个集群对外提供服务。相对于RR-DNS,LVS可以有效弥补其不足之外,配置稍显复杂。LVS主要有三种工作模式,即VS-NAT,VS-TUN,VS-DR。VS-NAT模式,集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。缺点是扩展性有限,当服务器节点数据增长到20个以上时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生;VS-TUN模式,负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以负载均衡器能处理很巨大的请求量,负载均衡器不再是系统的瓶颈。 这种方式的不足是,需要所有的服务器支持"IP Tunneling"协议;VS-DR模式,和VS-TUN相同,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。它的不足是,要求负载均衡器的网卡必须与集群物理网卡在一个物理段上。
图4 LVS DR工作模式系统架构
这里采用LVS DR工作模式构建自动负载均衡集群NAS,安装配置详细过程如下:
(1) 安装软件
modprobe -l|grep ipvs (验证系统是否支持LVS/IPVS) yum install ipvsadm
(2) 配置LVS master
编写shell脚本lvsmaster.sh,并在master节点上运行,其配置内容如下:
#!/bin/sh VIP=192.168.1.50 RIP1=192.168.1.51 RIP2=192.168.1.52 RIP3=192.168.1.53 PORT=0 . /etc/rc.d/init.d/functions case "$1" in start) echo "start LVS of DirectorServer" #Set the Virtual IP Address /sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $VIP dev eth0:1 #Clear IPVS Table /sbin/ipvsadm -C #Set Lvs /sbin/ipvsadm -A -t $VIP:$PORT -s rr -p 60 /sbin/ipvsadm -a -t $VIP:$PORT -r $RIP1:$PORT -g /sbin/ipvsadm -a -t $VIP:$PORT -r $RIP2:$PORT -g /sbin/ipvsadm -a -t $VIP:$PORT -r $RIP3:$PORT -g #Run Lvs /sbin/ipvsadm ;; stop) echo "close LVS Directorserver" /sbin/ipvsadm -C /sbin/ifconfig eth0:1 down ;; *) echo "Usage: $0 {start|stop}" exit 1 esac
(3) 配置LVS realserver
编写shell脚本lvsrealserver.sh,并在所有集群节点上运行,这里master节点同时也是real server节点。其配置内容如下:
#!/bin/bash VIP=192.168.1.50 BROADCAST=192.168.1.255 #vip's broadcast . /etc/rc.d/init.d/functions case "$1" in start) echo "reparing for Real Server" echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $BROADCAST up /sbin/route add -host $VIP dev lo:0 ;; stop) ifconfig lo:0 down echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce ;; *) echo "Usage: lvs {start|stop}" exit 1 esac
(4) 系统测试
ipvsadm -Ln \\192.168.1.50\public (Windows平台CIFS访问) mount -t nfs 192.168.1.53:/gluster/data /mnt/ (Linux平台NFS访问) mount -t cifs //192.168.1.51/public /mnt -o username=xxx (Linux平台CIFS访问) 使用不同的客户端访问NFS/CIFS服务,查看验证负载是否均衡到不同集群节点上,结合top/iostat/smbstatus查看状态。
以上构建的LVS具有单点故障问题,如果需要构建高可用LVS,请参考以下URL进行配置:
(1) piranha方案,
(2) ldirectord方案,