LVS VS-DR ipvsadm+heartbeat-ldirectord搭建linux集群


测试环境

  • 一台调度机,两台真实机,使用ipvsadm+ldirectord搭建vs-tun的linux集群
  • 3台服务器都安装centos5.4
  • 调度机IP:eth0:192.168.1.210
  • 调度机VIP:eth0:0:192.168.1.219
  • 真实机1IP:eth0:192.168.1.223
  • 真实机1VIP:tunl0:192.168.1.219
  • 真实机2IP:eth0:192.168.1.224
  • 真实机2VIP:tunl0:192.168.1.219
  • ipvsadm与ldirectord都只需在调度机安装,真实机不用安装软件。

    调度机操作

#安装ipvsadm
yum install ipvsadm
#安装heartbeat-ldirectord
yum install heartbeat-ldirectord
#配置VIP地址到eth0:0
ifconfig eth0:0 192.168.11.20 netmask 255.255.255.255 broadcast 192.168.11.20 up
#增加eth0:0路由
route add -host 192.168.11.20 dev eth0:0  
#配置网络系统参数(eth0为绑定VIP的网卡设备)
echo "1" >/proc/sys/net/ipv4/ip_forward     //DR模式需要开启转发
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
#配置IPVS的服务类型、VIP地址以及对应的真实机信息
ipvsadm -C  #清空规则

ipvsadm -A -t 192.168.1.219:8198 -s wlc
ipvsadm -a -t 192.168.1.219:8198 -r 192.168.1.223:8198 -g -w 1
ipvsadm -a -t 192.168.1.219:8198 -r 192.168.1.224:8198 -g -w 1

-A:为add-service的意思,此参数表示随后的设定将为群集新增一个网路服务
-t:表示此网络使用TCP通讯协议
192.168.11.20:80表示对外的VIP和端口
-s:设定此网路服务器将采用哪一种调度演算法进行负载均衡的调度,
wlc:为加权最少链接调度算法的所写
---------------------------
-a:为add-server的意思,表示随后将为群集添加一个真实服务器
-t:使用TCP
192.168.11.20:80表示对外的VIP和端口
-r:设定真实服务器IP
-m:设定网路服务采用的运作方式,  -m:VS-NAT;  -g:VS-DR;   -i:VS-TUN
-w:权重
ipvsadm还有一个“--persistent”的参数,可以让真实服务器间保持固定连线,也就是虚拟服务器将某个使用者的第一次连线分配至真实服务器,未来同一个使用者的连线都会被分配到相同的真实服务器。


[root@lb1 ~]# ipvsadm   //检查运行状况
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.219:8198 wlc
  -> 192.168.1.223:8198           Route   1      0          0        
  -> 192.168.1.224:8198           Route   1      0          0 
Route:lvs运作的方式
1:真实服务器的权重,越大权重越高,说明服务器性能越高
0:正在连线至该真实服务器的数目
0:已连线至该真实服务器的连线数目

[root@lb1 ~]# ipvsadm -lnc   //检查连接情况

#复制ldirectord配置文件到/etc/ha.d/目录
cp /usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf /etc/ha.d/
#默认启动不了ldirectord,需要修改/etc/rc.d/init.d/ldirectord
注释掉该行: . /etc/ha.d/shellfuncs
#修改/etc/ha.d/ldirectord.cf  配置文件:
# Global Directives
checktimeout=3 //检查超时
checkinterval=1 //检查间隔
autoreload=yes //是否自动重载
logfile="/var/log/ldirectord.log"
logfile="local0"
quiescent=yes //为yes时,设置真实机器权值为0即不可达,设置为no时,则删除不可达的真实机器
# Sample for an http virtual service
virtual=192.168.1.219:8198
        real=192.168.1.223:8198 gate 1  // gate(VSDR)、masq(VSNAT)或ipip(VSTUN)指出要使用的转发方法 1表示权重
        real=192.168.1.224:8198 gate 1
        service=http
        scheduler=wlc
        #persistent=600 
        protocol=tcp
        checktype=connect //检测端口是否可达
        #checktype=negotiate
        checkport=8198
        #request="index.html"  //checktype=negotiate时候检查的页面文件
        #receive="Test Page"  //返回的内容

#启动ldirectord
service ldirectord start

真实机操作(两台)

echo 1 > /proc/sys/net/ipv4/ip_forward
ifconfig lo:0 192.168.200.200 netmask 255.255.255.255 broadcast 192.168.200.200 up
route add -host 192.168.200.200 dev lo:0



如果使用tun模式配置的那2条会出现socket应用的负载均衡VIP访问不成功(比如:riak数据库socket模式),DR模式应该使用如下命令即可:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X   //这4条清除所有规则.
iptables -t nat -A PREROUTING -p tcp -d 192.168.1.219 --dport 8198(应用端口) -j REDIRECT
#关闭转发功能
echo "0" >/proc/sys/net/ipv4/ip_forward    
#解决arp问题
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
#解决源地址验证问题
echo 0 > /proc/sys/net/ipv4/conf/tunl0/rp_filter  
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter    

#启动两台真实机的apache应用首页index.htm写入不同的内容,访问测试.

附:lvs.sh

#!/bin/sh

# VIP installation for LVS-DR

IPEND=25  
VIP=10.100.63.$IPEND  
NETWORK_INIT_SCRIPT="/etc/init.d/network"

service=LVS

case "$1" in

    start)
        echo -n "Starting $service: "
# Down the network
$NETWORK_INIT_SCRIPT stop
echo ""

# Alter ARP behaviour
echo "Modifying kernel ARP params..."  
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore  
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce  
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

# Bring the interface back up
# (doing it this way prevents ARP broadcasts you don't want)
$NETWORK_INIT_SCRIPT start

#install_realserver_vip
/sbin/ifconfig lo:$IPEND $VIP broadcast $VIP netmask 255.255.255.255 up
echo "Added VIP locally:"  
/sbin/ifconfig lo:$IPEND

# installing route for VIP $VIP on device lo:$IPEND
/sbin/route add -host $VIP dev lo:$IPEND
echo "Modified routing table:"  
/bin/netstat -rn
        ;;

    stop)
        echo -n "Stopping $service: "
        /sbin/ifconfig lo$IPEND down
        ;;
esac