负载均衡之LVS--Shell脚本配置LVS

本篇内容主要用三个脚本来实现LVS的配置。脚本1:lvs.sh 是配置在负载均衡端,脚本2:realserver.sh 是配置后端Real Server服务器上的。脚本3:check_lvs.sh 是用在负载均衡端上来测试后端服务器的健康状态的脚本,如有一个Real Server 宕机就会自动清除,如果恢复了就再加上,后端所有服务器都宕机了,会把负载均衡端提供的错误页面加到集群中来。

规划:

负载均衡:

DIP:192.168.1.11

VIP:192.168.1.10

后台Real Server有两个分别为:

rs1:192.168.1.9

rs2:192.168.1.8

在192.168.1.11上安装ipvsadm和httpd服务,当在后端服务器都宕机时提供错误页面。

yum install ipvsadm -y

在rs1,rs2上分别安装httpd服务,并启动服务,提供网页。

yum install httpd -y

在192.168.1.11服务器上编写脚本lvs.sh

cd /opt/scripts

vim lvs.sh

#!/bin/bash
#
# LVS script for VS/DR
# chkconfig: - 90 10
#
. /etc/rc.d/init.d/functions
#
 
VIP=192.168.1.10
DIP=192.168.1.11
RIP1=192.168.1.9
RIP2=192.168.1.8
PORT=80
RSWEIGHT1=2
RSWEIGHT2=5
 
case "$1" in
    start)
        /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up 
        #启用eth0:0来配置VIP
        /sbin/route add -host $VIP dev eth0:0
        #添加VIP路由信息
 
        echo 1 > /proc/sys/net/ipv4/ip_forward
        #打开ip转发功能
 
        /sbin/iptables -F
        /sbin/iptables -Z
        #清空iptables规则
        
        /sbin/ipvsadm -C
        /sbin/ipvsadm -A -t $VIP:80 -s wlc
        /sbin/ipvsadm -a -t $VIP:$PORT -r $RIP1:$PORT -g -w $RSWEIGHT1
        /sbin/ipvsadm -a -t $VIP:$PORT -r $RIP2:$PORT -g -w $RSWEIGHT2
        
        #添加ipvs规则
        
        /bin/touch /var/lock/subsys/ipvsadm &> /dev/null
        #创建锁文件
    ;;
 
    stop)
        echo 0 > /proc/sys/net/ipv4/ip_forward
 
        /sbin/ipvsadm -C
        /sbin/ifconfig eth0:0 down
        /sbin/route del $VIP
 
        /bin/rm -f /var/lock/subsys/ipvsadm
 
        echo "ipvs is stopped...."
    ;;
 
    status)
        if [ ! -e /var/lock/subsys/ipvsadm ]; then
            echo "ipvsadm is stopped ..."
        else
            echo "ipvs is running ..."
            ipvsadm -L -n
        fi
    ;;
 
    *)
        echo "Usge: $0 {start|stop|status}"
    ;;
esac

此脚本可以加到系统服务列表中,并可以设置开机自动启动。

在后端服务器rs1和rs2中编写脚本realserver.sh如下:

#!/bin/bash
#
# Script to start LVS DR real server.
# chkconfig: - 90 10
# description: LVS DR real server
#
.  /etc/rc.d/init.d/functions

VIP=192.168.1.10

host=`/bin/hostname`

case "$1" in
    start)
        /sbin/ifconfig lo down
        /sbin/ifconfig lo 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

        /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        /sbin/route add -host $VIP dev lo:0
    ;;

    stop)
        /sbin/ifconfig lo:0 down
        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
    ;;

    status)
        islothere=`/sbin/ifconfig lo:0 | grep $VIP`
        isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
        if [ ! "$islothere" -o ! "isrothere" ];then
            # Either the route or the lo:0 device
            # not found.
            echo "LVS-DR real server Stopped."
        else
            echo "LVS-DR real server Running."
        fi
    ;;

    *)
        echo "$0: Usage: $0 {start|status|stop}"
        exit 1
    ;;
esac

完成后可以启动脚本了。

LVS自身没有对后端服务器的健康状态检测功能,下面在192.168.1.11服务器上来使用脚本来每5s种检测下后台服务器健康状态,并实现自动清除宕机的服务器,恢复后可以自动添加。

vim check_lvs.sh

#!/bin/bash
#
#
VIP=192.168.19.211
CPORT=80
FAIL_BACK=127.0.0.1
RS=("192.168.19.245" "192.168.19.219") #定义一个数组并赋值
declare -a RSSTATUS #定义一个空数组
RW=("2" "1")
RPORT=80
TYPE=g #定义为DR模型
CHKLOOP=3
LOG=/var/log/ipvsmonitor.log

 #定义一个添加规则的函数 
addrs() {
    if ipvsadm -L -n | grep "$1:$RPORT" &> /dev/null;then
        return 0
    else
        ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
        [ $? -eq 0 ] && return 0 || return 1
    fi
}
 
#定义删除规则的函数 
delrs() {
    if ipvsadm -L -n | grep "$1:$RPORT" &> /dev/null;then
        ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
        [ $? -eq 0 ] && return 0 || return 1
    else
        return 0
    fi
}
 
#定义是否要添加错误页面的规则的函数 
ifaddls() {
    if [ ${RSSTATUS[0]} -eq 0 ];then
        if [ ${RSSTATUS[1]} -eq 0 ];then
            if ipvsadm -L -n | grep "127.0.0.1:80" &> /dev/null;then
                echo "`date ‘+%F %T‘` All RS is Down and Local web is up" >> $LOG
            else
                ipvsadm -a -t $VIP:$CPORT -r 127.0.0.1:80 -$TYPE
                [ $? -eq 0 ]; echo "`date ‘+%F %T‘` All RS is Down! Local 127.0.0.1:80 is up!!!" >> $LOG
            fi
        else
            if ipvsadm -L -n | grep "127.0.0.1:80" &> /dev/null;then
                ipvsadm -d -t $VIP:$CPORT -r 127.0.0.1:80
            fi
        fi
    else
        if ipvsadm -L -n | grep "127.0.0.1:80" &> /dev/null;then
            ipvsadm -d -t $VIP:$CPORT -r 127.0.0.1:80
        fi
    fi
}
 
#定义检测后端服务器服务健康状态的函数  
checkrs() {
    local I=1
    while [ $I -le $CHKLOOP ];do
        if curl --connect-timeout 1 http://$1 &> /dev/null; then
            return 0
        fi
        let I++
    done
    return 1
}

#检测脚本初始化函数  
initstatus() {
    local I
    local COUNT=0
    for I in ${RS[*]};do
        if ipvsadm -L -n | grep "$I:$RPORT" && > /dev/null; then
            RSSTATUS[$COUNT]=1
        else
            RSSTATUS[$COUNT]=0
        fi
        let COUNT++
    done
}
#脚本开始执行: 
initstatus
ifaddls
 
while :; do #无限循环
    let COUNT=0
    for I in ${RS[*]};do
        if checkrs $I; then
            if [ ${RSSTATUS[$COUNT]} -eq 0 ];then
                addrs $I ${RW[$COUNT]}
                [ $? -eq 0 ] && RSSTATUS[$COUNT]=1 && echo "`date ‘+%F %T‘`, $I is back." >> $LOG
            fi
        else
            if [ ${RSSTATUS[$COUNT]} -eq 1 ]; then
                delrs $I
                [ $? -eq 0 ] && RSSTATUS[$COUNT]=0 && echo "`date ‘+%F %T‘`, $I is gone." >> $LOG
            fi
        fi
        let COUNT++
    done
    ifaddls
    sleep 5 #睡眠5s再循环
done
时间: 2024-10-19 17:06:31

负载均衡之LVS--Shell脚本配置LVS的相关文章

架构设计:负载均衡层设计方案(7)——LVS + Keepalived + Nginx安装及配置

1.概述 上篇文章<架构设计:负载均衡层设计方案(6)--Nginx + Keepalived构建高可用的负载层>(http://blog.csdn.net/yinwenjie/article/details/47130609) 我们解说了Nginx的故障切换.而且承诺各位读者会尽快解说 LVS + Keepalived + Nginx的安装和配置.在中间由于工作的原因.我又插写了三篇关于zookeeper的原理使用的文章.今天这边文章我们回归主题.为各位读者解说LVS + Keepalive

架构设计:负载均衡层设计方案(5)——LVS单节点安装

1.概述 上篇文章<架构设计:负载均衡层设计方案(4)——LVS原理>(http://blog.csdn.net/yinwenjie/article/details/46845997),我们介绍了LVS的工作模式,和每一种模式的具体工作过程.这篇文章中,我们将介绍单一LVS节点的安装方式.比起上一篇文章,这一片要提到的安装和配置就是非常简单的了,只要您了解原理,实践就是从容的事情. 您可以在您的电脑上使用VMware虚拟机,按照下面介绍的过程一步一步实践.我们将采用两台虚拟机,一台作为LVS节

18.6 负载均衡集群介绍 18.7 LVS NAT模式搭建

18.6 负载均衡集群介绍 18.7 LVS介绍 18.8 LVS调度算法 18.9/18.10 LVS NAT模式搭建 三台机器分发器,也叫调度器(简写为dir)内网:15.132,外网:220.198(vmware仅主机模式)rs1内网:15.135rs2内网:15.139 [[email protected] network-scripts]# yum install -y ipvsdam[[email protected] yum.repos.d]# vim /usr/local/sbi

18.6 负载均衡集群介绍 18.7 LVS介绍 18.8 LVS调度算法 18.9/18.10 L

18.6 负载均衡集群介绍18.7 LVS介绍 18.8 LVS调度算法 18.9/18.10 LVS NAT模式搭建 原文地址:http://blog.51cto.com/13227377/2149682

Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理

Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理 通常我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至于4层负载均衡和7层负载均衡的区别,可以参考:http://www.cnblogs.com/kevingrace/p/6137881.html.然而Nginx从1.9.0版本开始,新增加了一个stream模块,用来实现四层协

HAproxy负载均衡动静分离实现及配置详解

 HAproxy负载均衡动静分离实现及配置详解 HAproxy的介绍 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理.HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接.并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上. HAProxy实现了一种事件驱动.单一进程

nginx负载均衡+keepalived高可用完全配置小结

nginx做负载均衡(无高可用) 大致步骤. 1. 前端 nginx安装,pcre安装,具体步骤不解释. 2. 负载配置 A. 默认轮循 在nginx.conf  里加入一行 include upstream.conf,然后所有的负载均衡的配置直接在upstream.conf里配置. [[email protected] conf]# cat upstream.conf upstream httpservers { server 192.168.137.10:80 weight=5; serve

LDAP认证客户端、自动挂载用户家目录shell脚本配置

这个是LDAP认证客户端与自动挂载家目录shell脚本配置,使用"authconfig-tui"图形化配置简单,但是后面需要手动操作,自动写入配置文件还没有研究透彻.以后完善 #!/bin/bash yum install -y nss-pam-ldapd nfs-utils nfs autofs pam_ldap openldap openldap-clients #showmount -e 172.16.16.22 automaster="/etc/auto.master

nginx负载均衡篇一、nginx配置

如果不知道在Linux下如何安装nginx请参考前一篇文章. nginx负载均衡的配置较apache要简单许多,这里用nginx做负载均衡将不再描述tomcat集群的配置,如果对tomcat集群配置有不懂的地方,请参考Apache反向代理结合Tomcat集群来实现负载均衡(三).tomcat集群文章进行配置.下边进入正题,开始配置nginx负载均衡. 先来看下nginx的完全配置: #user nobody; worker_processes 1; #error_log logs/error.l

shell脚本配置ssh免密登陆

通过shell脚本配置免密登陆,分为两个脚本,一个是配置文件config.env,一个是正式脚本sshkey.sh. # config.envexport HOST_USER=(root) export PASSWD=(a) export SSH_HOST=(192.168.165.15 192.168.165.16 192.168.165.165) 以上congfig.env文件中,SSH_HOST参数可配置多个IP,可配置不同的用户 sshkey.sh脚本内容大致如下: 在本地用rsa加密方