LAMP架构双机热备完美解决方案

作者:网络医生 发布于:2012-4-26 16:15 Thursday 分类:负载均衡高可用

     如下图,当主服务器出现故障时执行脚本解除虚拟IP的绑定,然后从服务器检测到主服务器出现故障后执行脚本接管虚拟IP并绑定,当主服务器恢复正常后,从服务器解除虚拟IP绑定,主服务器接管虚拟IP继续提供服务。

MySQL采用主从复制,程序文件、图片以及附件采用rsync+inotify的方式实时同步。

点击查看原图 

主服务器脚本server.sh:

#!/bin/sh

#作者:网络医生

#QQ: 76908265

#EMAIL:  mail@num123.com

#BLOG:   http://www.num123.com
#根据apache和mysql的壮态来判断服务器的运行情况
#如果apache和mysql的任何一个停止服务,则认为服务器down掉
#定义变量HTTP_NUM变量判断apache的进程数量,为0则down掉
#定义变量MYSQL_PORT变量,如果mysql监听的端口号消失,则down掉
#定义IF_UP变量,判断是否继续执行配置虚拟IP并启用网卡接口命令,
#如果IP配置成功就不在重复执行
IF_UP="1"
#定义IF_DOWN变量,判断是否继续执行关闭网卡接口命令
#如果关闭成功,就不在重复执行关闭命令
IF_DOWN="1"
##############以下开始循环执行##########
while true
do
     HTTP_NUM=`ps -A|grep httpd|wc -l`
     MYSQL_PORT=`netstat -ant|grep LISTEN|grep 3306|awk '{print $4}'|awk -F ":" '{print $4}'`    
     if [ "$HTTP_NUM" == "0" -o "$MYSQL_PORT" != "3306" ];then
 if [ $IF_DOWN == "1" ];then
           ifconfig seth0:1 down
    /etc/init.d/httpd stop
    IF_UP="1"
    IF_DOWN="0"
        fi
     else
 if [ $IF_UP == "1" ];then
    ifconfig seth0:1 115.158.113.74 netmask 255.255.255.128 up
    arping -I seth0 -c 3 -s 115.158.113.74 115.158.113.1
           IF_UP="0"
    IF_DOWN="1"
        fi
     fi 
sleep 5
done

#########################END##########################

推到后台执行 nohup  sh server.sh &

备服务器脚本 slave.sh

#!/bin/sh
###################################
# 作者:网络医生
# QQ:76908265
# EMAIL: mail@num123.com
# 博客:  http://www.num123.com
##################################
#此循环每5秒执行一次,如果发现主服务器的http壮态码返回不是200
#就断定主服务器down掉,然后开始接管虚拟IP
IF_UP="1"
IF_DOWN="1"
while true
do
      STATUS=`curl -s -I http://115.158.113.72|sed -n '1p'|awk '{print $2}'`
      if [ "$STATUS" != "200" ];then
  if [ "$IF_UP" == "1" ];then
     ifconfig seth0:1 115.158.113.74 netmask 255.255.255.128 up
     arping -I seth0 -c 3 -s 115.158.113.74 115.158.113.1
     IF_UP="0"
     IF_DOWN="1"
         fi
      else
  if [ "$IF_DOWN" == "1" ];then
            ifconfig seth0:1 down
            IF_DOWN="0"
     IF_UP="1"
   fi
      fi
sleep 5
done

#####################END###################

推到后台执行 nohup sh slave.sh &

说明:

       主服务器采用的是通过判断apache的进程和mysql监听的端口号来断定服务器壮态的,也可以采用其它方法,从服务器通过判断主服务器返回的http壮态码来断定主服务器壮态的,双机热备的方法很多,也可以采用keepalive等软件。

       最重要的不是如何去写脚本和使用什么软件,关键在于解决问题的思路,只要思路清晰,解决问题的方法就会有很多种。上面的方案也可以修改成双主热备,但需要DNS的配合。

标签: shell 双机热备 脚本

发表评论:

  • 9
  • 3
  • 8
  • 1
  • 5

Powered by emlog