> Linux集群 > 服务器集群 >

LVS ipvsadm+heartbeat+ldirecrtord(DR)

一、      网络环境
  Vip=192.168.15.200
         real=192.168.15.101
         real=192.168.15.103
         master=10.0.0.2
         slave=10.0.0.3
        (此实验为虚拟机环境)
 

一、软件包安装

[root@localhost ~]# rpm -qa|grep heart
heartbeat-ldirectord-2.1.3-3.el5.centos
heartbeat-pils-2.1.3-3.el5.centos
heartbeat-stonith-2.1.3-3.el5.centos
heartbeat-2.1.3-3.el5.centos
[root@localhost ~]# rpm -qa|grep ipvs
ipvsadm-1.24-10
[root@localhost ~]# rpm -qa|grep arp
arptables-noarp-addr-0.99.2-1.rh.el.um.1
arptables_jf-0.0.8-8
[root@localhost ~]# rpm -qa|grep perl-Mail
perl-Mail-POP3Client-2.17-1.el5.centos
perl-MailTools-1.77-1.el5.centos
[root@localhost ~]# cp /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/
[root@localhost ~]# cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/
[root@localhost ~]# cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/
[root@localhost ~]# cp /usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf
/etc/ha.d/
 
 
 
二、配置ldirectord
checktimeout=3
checkinterval=1
这个值指定ldirectord在两个检查之间的间隔时间
fallback=127.0.0.1:80
autoreload=yes
#是否自动重载
logfile="/var/log/ldirectord.log"
#logfile="local0"
emailalert="haibo@myhexin.com"
emailalertfreq=3600
emailalertstatus=all
quiescent=no
 
# Sample for an http virtual service
virtual=192.168.15.200:80
        real=192.168.15.101:80 gate
        real=192.168.15.103:80 gate
#       real=192.168.15.200:80 gate
#       fallback=127.0.0.1:80 gate
#       service=http
#       request="index.html"
#       receive="Test Page"
#       virtualhost=some.domain.com.au
        scheduler=wrr
#       persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=connect
检测端口是否可达
        checkport=80
#       request="index.html"
#       receive="Test Page"
#       virtualhost=www.x.y.z
         --ldirectord配置详解
三、 ha.cf配置
 
[root@LVS-master ~]# vi /etc/ha.d/ha.cf
debugfile /var/log/ha-debug
 
logfile /var/log/ha-log
#定义日志文件的位置,如果两个都没有定义,默认会写入/var/log/message
 
logfacility local0
keepalive 2
#指定心跳间隔时间即每隔2秒钟在eth0上发送一次广播
 
deadtime 30
#指定若备用节点在30内没有收到主节点的心跳信号,则立即接管主节点的服务资源
 
warntime 10
#指定心跳延迟的时间为10秒。当10秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务
 
initdead 120
#在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍
 
udpport 694
#开放防火墙694端口
 
baud 19200
#设置串行通信的波特率
 
bcast eth0 # Linux
#采用udp广播来通知心跳
 
#serial /dev/ttyS0
使用串口heartbeat - 如果你不使用串口heartbeat, 你必须选择其它的介质,比如以太网bcast (ethernet) heartbeat。如果你使用其它串口heartbeat,修改/dev/ttyS0 为其它的串口设备
LVS ipvsadm+heartbeat+ldirecrtord(DR) - herb - herb
mcast eth0 225.0.0.1 694 1 0
#采用udp多播来通知心跳,建议主副使用
ucast eth0 192.168.2.121
 #单播eth0的IP,此处从为从的IP
auto_failback on
 #主节点恢复后,是否自动切回,主可设置恢复后切回,从设置为off
watchdog /dev/watchdog
 #看门狗,如果本节点在超过一分钟后还没有发出心跳,那么本节点自动重启
#可选项:watchdog功能提供了一种方法能让系统在出现故障无法提供"heartbeat"时,仍然具有最小的功能,能在出现故障1分钟后重启该机器。这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳。如果你想使用该特性,你必须在内核中装入"softdog" 内核模块用来生成实际的设备文件。想要达到这个目的, 首先输入 "insmod softdog" 加载模块。然后,输入"grep misc /proc/devices" 注意显示的数字 (should be 10). 然后, 输入"cat /proc/misc | grep watchdog" 注意输出显示出的数字(should be 130)。现在你可以生成设备文件使用如下命令:"mknod /dev/watchdog c 10 130" 。
 
node LVS-master
node LVS-slave
#与uname -n保持一致,第一个为主节点,第二个为副节点
ping_group group1 192.168.2.121 192.168.2.127
respawn root /usr/lib/heartbeat/ipfail
#ping和respawn用来测试网络连接,ping后面接外网网关或者其他可靠的设备的IP,如果这个IP一旦ping不通了(意味该机的外网down了),则利用respawn调用/usr/lib/heartbeat/ipfail来主动进行切换。
apiauth ipfail gid=root uid=root
启用ipfail进程的用户是root
 
 
四、配置验证文件
.vi /etc/ha.d/authkeys
auth 2
#1 crc
2 sha1 10jqka
#3 md5 Hello!
 

五、Ipvs配置

#!/bin/sh
VIP=192.168.15.200
RIP1=192.168.15.101
RIP2=192.168.15.103
. /etc/rc.d/init.d/functions
case "$1" in
    start)
        echo " start LVS "
#      # set the Virtual  IP Address
       /sbin/ifconfig eth1:0 $VIP broadcast $VIP netmask 255.255.255.255 up
       /sbin/route add -host $VIP dev eth1:0
       /sbin/ipvsadm -C
       /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
        ;;
    stop)
        echo "close LVS Director"
        /sbin/ipvsadm -C
         /sbin/ifconfig eth1:0 down

        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
esac
(-s rr 是使用了轮叫算法,可以自行选择相应的算法,更改rr就可以了。
  ipvsadm -h查看帮助。-g 是使用lvs工作DR直接路由模式,也可自行修改
 lvs 状态查看
操作步骤详细到命令行级别
查看LVS的连接情况: ipvsadm -L -n
查看LVS的吞吐量情况: ipvsadm -L -n -rate
查看LVS的统计信息: ipvsadm -L -n –stat
实时查看LVS连接状态变化: watch ipvsadm –ln
--ipvsadm命令参考
六、realserver配置
vi /etc/init.d/real.sh
#!/bin/bash
#description : start realserver
VIP=192.168.15.200
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
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

;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
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: $0 {start|stop}"
exit 1
esac
此realserver为开起相关路由功能,修改它的执行权限,然后用./real.sh start来启动
注:也可不编写如上realserver直接配置,然后保存即可!(如下)
 
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(保存配置)
 
七、directord与VIP结合至heartbeat
vi /etc/ha.d/haresources
LVS-master ipvs ldirectord
Herartbeat默认寻找程序的路径为 :/etc/rc.d/init.d/   和/etc/ha.d
 
八、 slave机器配置
把主调度器121上的配置文件及脚本拷贝至从127机器上,并开放694端口
更改ha.cf配置文件
ucast eth0 192.168.2.127 #eth0的IP,此处从为从的IP
auto_failback off
master和slave启动:service heartbeat start
九、参考资料
 
http://faovic.javaeye.com/blog/147610
http://gsliuyang.blog.51cto.com/286500/223912
http://weijia.blog.51cto.com/616222/119853
(责任编辑:IT)