在Linux环境下,我们可以使用LVS来作为Web服务的负载均衡。由于LVS基于IP协议,所以LVS又被叫做ipvs。

在本文中,LVS服务运行与IP地址为172.16.24.139的服务器,两台Web服务器的IP地址分别为172.16.24.134、172.16.24.136。

假设你的Linux服务器中已经安装好了ipvsadm和keepalived。

如果没有安装,可以通过yum源来进行安装。

# yum install ipvsadm keepalived

下面直接说ipvsadm和keepalived的配置。

1、LVS + keepalived 的配置

由于keepalived与ipvsadm的深度整合,可以由keepalived来对ipvsadm的虚IP以及实体服务器IP进行托管。所以我们这里在安装好ipvsadm和keepalived之后,只需要修改keepalived的配置,并且启动keepalived服务,即可实现对ipvsadm的配置与管理。

修改keepalived的配置文件

# vim /etc/keepalived/keepalived.conf

配置文件内容如下:

global_defs {
    router_id LVS_DEVEL
}

vrrp_instance LVS_WEB {
    state MASTER    # 注意:如果Keepalived的备机,这里是SLAVE 
    interface eth0
    virtual_router_id 51
    priority 100    # 注意:这里是主备的权重,备一般权重低于主
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.24.140    # 虚IP
    }
}

# 定义虚拟服务器
virtual_server 172.16.24.140 80 {
    delay_loop 3
    lb_algo rr    # 负载均衡算法
    lb_kind DR    # LVS工作模式
    persistence_timeout 0    # 会话保存时长(秒),0表示不使用stickyness会话
    protocol TCP

    # 定义实体服务器
    real_server 172.16.24.134 80 {
        weight 1    # 权重
        HTTP_GET {
            url {
                path /testurl/test.jsp    # 验证实体服务器状态地址
                digest 640205b7b0fc66c1ea91c463fac6334d    # 验证地址内容的md5摘要
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    # 定义实体服务器
    real_server 172.16.24.136 80 {
        weight 1
        HTTP_GET {
            url {
                path /testurl/test.jsp
                digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

修改系统网络设置:

# vim /etc/sysctl.conf

在文件中修改下面内容:

net.ipv4.ip_forward = 1

以上命令逐一执行完毕,并且无系统报错后,设置keepalived开机自启动,并立即启动keepalived服务:

# chkconfig keepalived on
# service keepalived start

可以通过ipvsadm命令来查看负载均衡器的配置。

# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.24.140:http rr
  -> 172.16.24.134:http           Route   1      0          0
  -> 172.16.24.136:http           Route   1      0          0

如看到上面信息,说明负载均衡器配置成功。

2、实体服务器配置

假设在你的实体服务器中,已经安装并且配置好了Web服务。

两台实体Web服务器的配置如下,分别在两台Web服务器上依次执行下面的命令:

# ifconfig lo:0 172.16.24.140 netmask 255.255.255.255 broadcast 172.16.24.140
# route add default gw 172.16.24.140
# 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
# sysctl -p

上面是临时修改配置的方法,如果需要做永久性修改的话,按照下面的说明来。

添加一个虚拟IP地址:

# vim /etc/sysconfig/network-scripts/ifcfg-lo:0

向文件中写入下面内容:

DEVICE=lo:0
IPADDR=172.16.24.140
NETMASK=255.255.255.255
BROADCAST=172.16.24.140
ONBOOT=yes
NAME=loopbackvip

修改系统网络设置:

# vim /etc/sysctl.conf

向文件中添加下面内容:

net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

OK,你可以reboot你的实体服务器了。

3、配置完成,看效果

打开浏览器,在浏览器中输入虚拟IP地址(172.16.24.140),有可能分别看到两台Web服务器上的内容哦~~

另外,基于这种模式做负载均衡必须要求负载均衡服务器有双网卡,一个对内网,另一个对外网,并且还需要和后面的真实服务器是在同一个局域内。