基于开源软件构建高性能集群NAS系统(3)

自动负载均衡集群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这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。它的不足是,要求负载均衡器的网卡必须与集群物理网卡在一个物理段上。

基于开源软件构建高性能集群NAS系统


图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方案,

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/psdys.html