三、LVS三种IP负载均衡配置

 

1: LVS-DR 模式(调度器与实际服务器都有一块网卡连在同一物理网段上)
简要的网络结构如下所示


配置LVS server

引用
#!/bin/sh
VIP=192.168.0.210
RIP1=192.168.0.175
RIP2=192.168.0.145
. /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:80 -s rr
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -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



配置 RIP server

引用
#!/bin/bash
VIP=192.168.0.210
LOCAL_Name=50bang
BROADCAST=192.168.0.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 $VIP 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

 

扩展知识:

arp_ignore - 整型
        当对要求解析本地目标IP地址的ARP请求做响应时,定义不同的模式:
        0 - (缺省): 响应配置在任何接口上的任何本地目标地址
        1 - 只有当目标IP地址是配置在进入接口上的本地地址时才响应
        2 - 只有当目标IP地址是配置在进入接口上的本地地址,并且发送者的IP地址处于本接口的同一网段时才响应
        3 - 不响应用scope host配置的本地地址,只有通用地址和链接地址会被响应
        4-7 - 保留
        8 - 不响应所有的本地地址

        conf/{all,interface}/arp_ignore的最大值在{interface}上收到APR请求的时候被使用。

arp_announce - 整型
        在ARP请求被送到接口上,要在IP包中宣布本地源IP地址时,定义不同的限制级别:
        0 - (缺省)使用配置在任何接口上的任何本地地址
        1 - 尝试避免本接口上的本地地址不是目标的子网段。当目标主机请求的源地址是逻辑网段的一部分时候,这种模式有用。
            如果我们生成这个请求,我们将会检查包含目标IP的所有子网,保留来自这些子网的源地址。
            如果没有这样的子网,就用级别2的规则来选择。
        2 - 总是使用这个目标的最好的本地地址。在这种模式下,我们忽略IP包中的源地址,尝试选择我们喜欢的本地地址给目标主机。
            选择的方式是在输出接口上包含目标IP地址的所有子网里寻找主要的IP地址。
            如果没有合适的的目标地址,就选择输出接口或者所有其他接口上的第一个地址。

            conf/{all,interface}/arp_announce的最大值是被使用的。

            提高限制级别会提供更多的机会来接收到解析目标的响应回答,而降低级别会宣布更多有效的发送者信息。 

 

  

在最开始,客户端发出命令来寻找VIP的时候,只有Director 会应答客户端的ARP广播,这个是为什么要对ARP广播进行限制的原因



2: LVS-TUN  模式
简要的网络架构如下:


配置lvs server

引用

#!/bin/sh
# description: start LVS of Directorserver
VIP=192.168.25.41(注意,lvs server那台机器2个ip,一个是vip,一个是本身ip例如192.168.25.42)
RIP1=192.168.25.44
RIP2=192.168.25.45
#RIPn=192.168.0.n
GW=192.168.25.254
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of DirectorServer"
# set the Virtual IP Address
/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.0 up
/sbin/route add -host $VIP dev tunl0
#Clear IPVS table
/sbin/ipvsadm -C
#set LVS
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
#/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -i
#Run LVS
/sbin/ipvsadm
#end
;;
stop)
echo "close LVS Directorserver"
ifconfig tunl0 down
/sbin/ipvsadm -C
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac

.
配置real server

引用
#!/bin/sh
# ghb in 20060812
# description: Config realserver tunl port and apply arp patch
VIP=192.168.25.43
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo "Tunl port starting"
ifconfig tunl0 $VIP netmask 255.255.255.0 broadcast $VIP up
/sbin/route add -host $VIP dev tunl0
echo "1" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
;;
stop)
echo "Tunl port closing"
ifconfig tunl0 down
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac



3: LVS-NAT  模式
简要的网络架构如下图:


配置LVS server

引用
#!/bin/sh
# description: start LVS of Nat
VLAN-IP=202.99.59.110
RIP1=10.1.1.2
RIP2=10.1.1.3
#RIPn=10.1.1.n
GW=10.1.1.1
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of NAtServer"
echo "1" >/proc/sys/net/ipv4/ip_forward
echo "0" >/proc/sys/net/ipv4/conf/all/send_redirects
echo "0" >/proc/sys/net/ipv4/conf/default/send_redirects
echo "0" >/proc/sys/net/ipv4/conf/eth0/send_redirects
echo "0" >/proc/sys/net/ipv4/conf/eth1/send_redirects(内网卡上的)
#Clear IPVS table
/sbin/ipvsadm -C
#set LVS
/sbin/ipvsadm -a -t 202.99.59.110:80 -r 10.1.1.2:80 -m -w 1
/sbin/ipvsadm -a -t 202.99.59.110:80 -r 10.1.1.3:80 -m -w 1
#Run LVS
/sbin/ipvsadm
#end
;;
stop)
echo "close LVS Nat server"
echo "0" >/proc/sys/net/ipv4/ip_forward
echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/eth0/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/eth1/send_redirects(内网卡上的)
/sbin/ipvsadm -C
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac


配置real server
LVS-Nat 模式的后端机器不需要配置.
tips: -g 表示使用DR方式,-m表示NAT方式,-i表示tunneling方式。