一、规划
<img src="https://www.361way.com/wp-content/uploads/2016/05/lvstun.png" title="lvstun" alt="lvstun" height="487" width="718" />
这里以三台RS主机为例,其中两台和DR主机在同一网段,另外一台主机需要需要通过tun进行连通 。具体网络部分的配置可以参看 <a target="_blank" href="https://www.361way.com/linux-tunnel/5199.html" rel="noopener">Linux ipip隧道及实现</a> 。
<br />
RIP1=192.168.1.131
RIP2=192.168.1.132
RIP3=192.168.0.100
二、lvs-tun配置
1、director主机上的配置
#!/bin/sh
# description: start LVS of Directorserver
VIP=192.168.1.140(注意,lvs server那台机器2个ip,一个是vip,一个是本身ip例如192.168.25.42)
RIP1=192.168.1.131
RIP2=192.168.1.132
RIP3=192.168.0.100
. /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
2、realserver主机的配置
<br />
#!/bin/sh
# description: Config realserver tunl port and apply arp patch
VIP=192.168.1.140
. /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
本质上来说,lvs tun模式和lvs dr模式在配置方法上没有区别,都需要将浮动地址在每台主机上进行配置 。需要在realserver服务器上配置arp的相关参数 。无非在操作之间,需要将不同网段的主机先打通进同一个网络。
三、总结
单director下三种模式的LVS配置到此已经告一段落。三种模式来说,各自有各自的特色,具体可以参看如下列表。
<img src="https://www.361way.com/wp-content/uploads/2016/05/lvs-diff.png" title="lvs-diff" alt="lvs-diff" height="375" width="686" />
LVS本身由于活动在四层,内部实现起来较nginx和haproxy要简单,因为简单,所以高效(毕竟只专注于做一件事)。但本身也有一些局限性,比如,不支持基本的防护、director节点本身存在单节点问题,对后端服务器的状态没有健康检测机制等。后面的部分,会针对以下问题,结合keepalive、结合heartbeat解决LVS本身的一些不足。也会介绍下基于ipvs封装的商业软件如redhat的Piranha 。