lvs-dr设置步骤

调度器上:

        设置调度器的VIP,broadcast表示自广播给自己,在调度器上不是必须的。这个地址配置在外网卡的别名上。

        ifconfig ens160:0 192.168.1.108/32 broadcast 192.168.1.108 up

        限定从哪个入口进来就从哪个接口出去。在调度器上这个设置不是必须的,但是在RealServer上是必须要设置的。route -n 查看设置的路由。

        route add -host 192.168.1.108 dev ens160:0

RealServer上:

RS1:

        只要设置如下两个即可:

        echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

        echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce


        也可以把外网卡ens160也设置上,不是一定要设置

        echo 1 > /proc/sys/net/ipv4/conf/ens160/arp_ignore

        echo 2 > /proc/sys/net/ipv4/conf/ens160/arp_announce

        这几个文件原来的值都是0


        在RealServer上配置VIP:不同与调度器上的是,这个VIP是配置在lo接口的别名上,而不是外网卡的别名上

        ifconfig lo:0 192.168.1.108/32 broadcast 192.168.1.108 up

RS2:

        一样的设置

在调度器上:

        ipvsadm -A -t 192.168.1.108:80 -s rr

        ipvsadm -a -t 192.168.1.108:80 -r 192.168.1.106 -g

        ipvsadm -a -t 192.168.1.108:80 -r 192.168.1.107 -g


        可实现开机自动设置lvs的脚本,在 /etc/rc.local 中执行即可。

#!/bin/bash
#########################################
#
#             实现lvs-dr
#
#########################################


#
# 调度器上要执行的内容
# @param
#
director() {
	local network_name=$1
	local vip=$2
	local rs1=$3
	local rs2=$4
	
	if [ -z "$network_name" ]; then
		echo "error: network_name can not empty";exit
	fi
	if [ -z "$vip" ]; then
		echo "error: vip can not empty";exit
	fi
	if [ -z "$rs1" ] || [ -z "rs2" ]; then
		echo "error: rs1 and rs2 can not empty";exit
	fi
	
	ifconfig $network_name:0 $vip/32 broadcast $vip up
	route add -host $vip dev $network_name:0
	
	ipvsadm -A -t $vip:80 -s rr
	ipvsadm -a -t $vip:80 -r $rs1 -g
	ipvsadm -a -t $vip:80 -r $rs2 -g
	
	# ifconfig
	# route -n
	# ipvsadm -L -n
}


#
# real server 上要执行的命令
# @param
#
realserver() {
	local vip=$1
	if [ -z "$vip" ];then
		echo "vip can not empty";exit
	fi
	echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
	echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
	
	ifconfig lo:0 $vip/32 broadcast $vip up
}


#
# 帮助信息
# @param
#
usage() {
cat <<EOF
    real server execute:
      -r vip
      example: 
        lvs.sh -r 192.168.1.108

    director execute:
      -d network_name vip
      example: 
        lvs.sh -d ens160 192.168.1.108 192.168.1.106 192.168.1.107
EOF
}


if [ -z "$1" ];then
	usage
fi


while [ -n "$1" ]
do
	case "$1" in
	--realserver|-r)
		VIP=$2
		realserver $2
		shift 2
	;;
	--director|-d)
		director $2 $3 $4 $5
		shift 5
	;;
	--help|-h)
		usage
		break
	;;
	esac
done


手动配置


调度器的配置:

lvs01:

RIP:192.168.0.15、192.168.0.16

VIP:192.168.0.14

yum install ipvsadm
ifconfig eth0:0 192.168.0.14/32 broadcast 192.168.0.14 up
route add -host 192.168.0.14 dev eth0:0
ipvsadm --add-service --tcp-service 192.168.0.14:80 --scheduler rr
ipvsadm --add-server --tcp-service 192.168.0.14:80 --real-server 192.168.0.15:80 -g
ipvsadm --add-server --tcp-service 192.168.0.14:80 --real-server 192.168.0.16:80 -g
ipvsadm --list

保存规则:

ipvsadm --save /etc/sysconfig/ipvsadm

恢复规则:

ipvsadm --restore < /etc/sysconfig/ipvsadm

lvs02:

同lvs01完全一样,包括IP


RealServer的配置:

RS1 和 RS2 需要有响应的web服务。

Real Server RS1:

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
ifconfig lo:0 192.168.0.14/32 broadcast 192.168.0.14 up # 将VIP配置值在lo接口上
route add -host 192.168.0.14 dev lo:0 # 响应报文要经过lo接口

提供web服务。

Real Server RS2:

同RS1完全一样,包括web服务的配置。