较全的lvs+ha文档(转CU) -> 配置基于DR模式Lvs集群

近期配了几个lvs 一是给自己个小结
二是 所查网上lvs 大多陈旧 或语焉不详 所以补个较新的 有不对之处请大家指正

vip :
192.168.1.198
虚拟ip
master:192.168.1.196
主分发服务器
slave:
192.168.1.197
备份分发服务器
real1:
192.168.1.191
响应服务器1
real2:
192.168.1.192
响应服务器2

实现以下目的
一)配置基于DR模式简单Lvs
集群配置基于隧道模式Lvs
二)集群配置基于高可用Lvs+heartbeat
三)双机lvs-ha

一、
配置基于DR模式Lvs集群

1、下载ipvsadm管理程序
ipvsadm-*.tar.gz

tar zxvf ipvsadm-*.tar.gz
cd ipvsadm-*
make && make install

注意在make时可能会出现很多错误的信息,请按照如下操作就可以心编译正常
ln -s /usr/src/kernels/2.6.9-22.EL-i686//usr/src/linux

cd ipvsadm-*

make && make install
我机器是centos4
所以我yum安装
yum -y install ipvsadm
# ipvs管理器

yum -y installlibnet
# 库文件
yum -y install e2fsprogs
# 库文件
yum -y installheartbeat
# linux-ha
yum –y installheartbeat-ldirectord

cp/usr/share/doc/heartbeat-2.1.*/ha.cf /etc/ha.d/
cp/usr/share/doc/heartbeat-2.1.*/authkeys /etc/ha.d/
cp/usr/share/doc/heartbeat-2.1.*/haresources /etc/ha.d/
cp /usr/share/doc/heartbeat-ldirectord-2.1.*/ldirectord.cf/etc/ha.d/

2、配置VIP脚本

[root@ct1 ~]# more/etc/init.d/lvsdr-basic
#!/bin/sh
#
# This script willbe executed *after* all the other init scripts.
# You can put yourown initialization stuff in here if you don’t
# want to do thefull Sys V style init stuff.

VIP=192.168.1.198
RIP1=192.168.1.191
RIP2=192.168.1.192
###########################
# ifconfig a
#
#/sbin/ifconfigeth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
#
############################

#/sbin/route add-host $VIP dev eth0:0
#echo "1"> /proc/sys/net/ipv4/ip_forward

/etc/rc.d/init.d/functions

case "$1"in

start)

echo "startLVS of DirectorServer"
#Set the Virtual IPAddress

/sbin/ifconfigeth0: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 "closeLVS Directorserver"

/sbin/ipvsadm -C

;;

*)
echo "Usage:$0 {start|stop}"

exit 1

esac

下例是其他类似的lvsdr配置文件

more /etc/init.d/lvsDR
#!/bin/sh
# description: start LVS of   Directorserver
VIP=192.168.1.198
RIP1=192.168.1.191
RIP2=192.168.1.192

. /etc/rc.d/init.d/functions

case "$1" in
start)
       echo " start LVS   ofDirectorServer"
   # set the Virtual   IP Address
   /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask255.255.255.255 up
   /sbin/route add -host $VIP dev eth0:0
   #Clear IPVS table
   /sbin/ipvsadm -C
   #set LVS
   /sbin/ipvsadm -A -t $VIP:80 -s rr   (如果需要session保持添加-p 默认保持300秒)
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
   #/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -g
   #Run LVS
   /sbin/ipvsadm
   #end

       ;;
stop)
       echo "close LVS Directorserver"
       /sbin/ipvsadm -C
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

隧道模式
(tun )
more /etc/init.d/tunlvs
#!/bin/sh
# description: start LVS of   Directorserver
VIP=192.168.1.198
RIP1=192.168.1.191
RIP2=192.168.1.192

. /etc/rc.d/init.d/functions

case "$1" in
start)
       echo " start LVS   ofDirectorServer"
   # set the Virtual   IP Address
   /sbin/ifconfig tunl0 $VIP broadcast $VIP netmask255.255.255.255 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

(-s rr 是使用了轮叫算法,可以自行选择相应的算法,更改rr就可以了,ipvsadm -h查看帮助。-g 是使用lvs工作DR直接路由模式,也可自行修改)
如果有多个realserver直接添加就可以了,之后启动此脚本就可以了。
NAT用法本来是因为网络IP地址不足而把内部保留IP地址通过映射转换成公网地址的一种上网方式(原地址NAT)。如果把NAT的过程稍微变化,就可以 成为负载均衡的一种方式。原理其实就是把从客户端发来的IP包的IP头目的地址在DR上换成其中一台REAL SERVER的IP地址并发至此REALSERVER,而REAL SERVER则在处理完成后把数据经过DR主机发回给客户端,DR在这个时候再把数据包的原IP地址改为DR接口上的IP地址即可。期间,无论是进来的流 量,还是出去的流量,都必须经过DR。
隧道模式则类似于VPN的方式,使用网络分层的原理,在从客户端发来的数据包的基础上,封装一个新的IP头标记(不完整的IP头,只有目的IP部)发给REAL SERVER,REAL SERVER收到后,先把DR发过来的数据包的头给解开,还原其数据包原样,处理后,直接返回给客户端,而不需要再经过DR。
直接路由模式比较特别,很难说和什么方面相似,前2种模式基本上都是工作在网络层上(三 层),而直接路由模式则应该是工作在数据链路层上(二层)。其原理为,DR和REAL SERVER都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有REALSERVER对本身这个IP的ARP请求保持静默。也就是说,网关 会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的REAL SERVER,把目的MAC地址改为REAL SERVER的MAC并发给这台REALSERVER。这时REAL SERVER收到这个数据包,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于DR要对二层包头进行改换,所以DR和 REALSERVER之间必须在一个广播域,也可以简单的理解为在同一台交换机上。

3、配置realserver脚本

#!/bin/bash
#description : start realserver
VIP=192.168.1.198
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
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
#end
此脚本使realserver不响应arp请求,将此脚本分别在realserver上执行就可以了。Ok后写入rc.local

测试:分别启动realserver上的httpd服务
在realserver1 执行   echo "191"   /var/www/html/index.html
在realserver2 执行   echo "192"   /var/www/html/index.html

打开浏览器输入http://192.168.1.198   应该可以分别看到:191 和 192.

以上是最简单的lvs 。   一个dr ,2个real 。 2个配置文件,几个rpm包。
我们需要的是高可用,主备dr,master down后 bak自动接管, master启动后bak交出管理权。
现在我们开始配置这样的lvs。 cluster.JPG (27.07 KB) 2008-7-2 15:12