Total Pageviews

Saturday 16 March 2013

使用piranha搭建Linux Virtual Server (LVS)集群环境


    最近做一下LVS集群方式的性能对比测试,在配置IP隧道方式时遇到一些诡异的问题:
1)     停止LVS服务后虚拟IP未被释放(似乎只有重启服务器才能释放,重启网卡、清空路由表、重启交换机等方式均无效);
2)     负载不均衡(有时会依次将压力全部压在其中一个成员身上,有时又是正常的);
    之前测试“直接路由”方式时是手动配置方式,配置成功并没有发现问题。而这次使用IP隧道方式这么多问题,肯定是配置问题。
    官方有介绍一个配置工具:piranha。在CentOS安装光盘也自带有,于是尝试了一下,非常方便!推荐大家使用。毕竟这东西发布了,即使有错也不会错太远,Bug就另谈。谁能确定我们手动配置就没有错也没有Bug呢?
    Piranha 提供了一套解决方案,包括对服务状态的监控、业务服务器的监控和负载服务器本身热备。

    安装非常简单:
yum install ipvsadm modcluster piranha system-config-cluster php php-cli php-commonPiranha 是一个WEB服务(Apache+Php),安装完成后需要先设置登录密码:/usr/sbin/piranha-passwd,用户名是piranha 。
1、启动WEB服务:service piranha-gui start
2、启动LVS守护进程:service pulse start
3、可以访问了:http://127.0.0.1:3636。
详细配置可参考Redhat官网说明,对LVS稍有了解,搜一下很容易就上手了。
这里我想补充一下RealServer的服务配置。因为Piranha本身提供了Virtual Server本身的配置,但没有提供RealServer的配置。而在网上搜到的一些文章只介绍了RealServer配置方式,不足以批量生产使用。
首先,LVS服务器若修改了配置重启时需要执行以下脚本:
killall -9 nanny
service pulse restart
service piranha-gui restart若客户端使用直接路由方式,服务脚本如下:
#!/bin/bash
# RealServer服务脚本,直接路由方式
WEB_VIP=192.168.10.31

start(){
ifconfig lo:0 $WEB_VIP netmask 255.255.255.255 broadcast $WEB_VIP
/sbin/route add -host $WEB_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 >/dev/null 2>&1
echo "RealServer Start OK [lvs_dr]"
}

stop(){
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
/sbin/ifconfig lo:0 down
/sbin/route del -host $WEB_VIP
sysctl -p >/dev/null 2>&1
echo "RealServer Stoped [lvs_dr]"
}

restart(){
stop
start
}

case $1 in

start)
     start
      ;;
stop)
     stop
      ;;
restart)
     restart
      ;;
status)
     /sbin/ifconfig
      ;;
*)
   echo "Usage: $0 {start|stop|restart|status}"
   exit 1
esac若客户端使用IP隧道方式,服务脚本如下:
#!/bin/bash
# 业务服务器LVS服务脚本,IP隧道方式
WEB_VIP=192.168.10.31

start(){
ifconfig tunl0 $WEB_VIP netmask 255.255.255.255 broadcast $WEB_VIP
/sbin/route add -host $WEB_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 >/dev/null 2>&1
echo "RealServer Start OK [lvs_tun]"
}

stop(){
echo "0" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
ifconfig tunl0 down
/sbin/route del -host $WEB_VIP
sysctl -p >/dev/null 2>&1
echo "RealServer Stoped [lvs_tun]"
}

restart(){
stop
start
}

case $1 in

start)
     start
      ;;
stop)
     stop
      ;;
restart)
     restart
      ;;
status)
     /sbin/ifconfig
      ;;
*)
   echo "Usage: $0 {start|stop|restart|status}"
   exit 1
esac由于笔者未用到NAT方式,在此不介绍。