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的配合。
联系方式
-
mail: mail@num123.com
QQ: 76908265
日志分类
随机日志
- replace函数批量替换MySql数据库中指定的字符串
- 详解用squid3.0搭建Web缓存和反向代理服务器
- 在局域网中用单网卡做NAT转换上网
- 用Linux系统做策略路由
- squid FATAL: ipcache_init: DNS name lookup tests failed.解决方法
- 根据内容类型来定制drupal的页面模板
- apache配置文件错误"lowering MaxClients to 256. To increase, please see the ServerLimit"
- 用find+sed批量替换文件中的字符串
- SecureCRT使用openssh生成的密钥登录linux系统
- 最详细的Samba配置记录
- 在局域网中搭建自己的NTP时间服务器
- HTTP 404错误重定向
日历
标签云
最新碎语
- 博客多年没更新了,但一直都在运行。天朝的管制太严格了,今天迁移到香港的服务器上。
2018-07-25 13:51
- 决心一下,行动要快。
2013-09-09 09:02
- 为灾区人民祈福!
2013-04-22 12:45
- 都是停电惹的祸
2013-03-17 20:06
- 假期结束,开始上班。
2012-08-13 07:17
- 堵到机场高速上了
2012-07-13 18:14
- 人生的计划永远赶不上变化。
2012-07-10 18:45
- 接受你所接受的,珍惜你所拥有的。
2012-05-11 14:13
发表评论: