首页 > Linux操作系统 > Linux操作系统 > 假期平台子系统高可用方案
近期,本人给公司写了个方案,大家也帮我一起来探讨一下这个方案吧。
一、 方案背景
假期平台子系统:
在北京和海口各部署一套tomcat和MySQL,并且数据时时同步。以北京地区为生产主系统,海口只做备份用。当北京服务器发生故障后,可以自动将应用切换到海口的备机。
考虑到MySQL数据库是异地时时同步,网络因素和业务访问量不可控,所以可能会出现在北京数据库上写数据后,不一定能在海口数据库上及时查看到数据,所以海口库只做备份,不做查询使用。
另外,由于北京和海口没有对方的路由表,所以不能使用浮动ip的方式实现故障自动切换(因为海口服务器不能绑定北京的ip地址使用)。
二、拓扑图
三、方案说明
1、前端用Apache做转发。两个Apache服务器之间通过keepalive做高可用,当一个Apache宕机后,可以自动切换到另外一个Apache机器上;
2、tomcat A和tomcat B 之间通过rsync进行文件同步,当管理员在tomcat A服务器更新文件后,系统会自动将更新文件同步到tomcat B服务器;
3、两个MySQL数据库做成AB主主复制方式,平时用北京的MySQL进行读写,海口只做备份。
4、在北京的tomcat A服务器上每隔一分钟执行如下监控脚本:
[root@dg ~]# crontab -l
*/1 * * * * /bin/sh /root/monitor_mysql.sh
[root@dg ~]# cat /root/monitor_mysql.sh
#!/bin/bash
num=0
for ((i=1;i<=5;i++))
do
mysql -h10.72.16.228 -uroot -pqwe.123 -e "select host from mysql.user limit 1" > /tmp/a.txt
value=`grep host /tmp/a.txt`
if [ -z $value ];then
let num++
echo $num > /tmp/b.txt
fi
sleep 10
done
#在使用本脚本的时候,下面if语句的部分,可以改成当北京数据库A不可用的时候,修改tomcat A数据库连接文件,将DB指向海口数据库。
if [ $num -eq 5 ];then
echo `date +'%Y-%m-%d %H:%M:%S'` 10.72.16.228的 mysql 状态是:stop >> /tmp/result.txt
else
echo `date +'%Y-%m-%d %H:%M:%S'` 10.72.16.228的 mysql 状态是: start >> /tmp/result.txt
fi
注:上面脚本的作用,是在北京tomcat A服务器上每隔10秒,自动登录一下北京的MySQL A,当有连续5次登录失败后,可以判定MySQL A已经不可用,这时候tomcat A就把自己的tomcat服务关掉,然后将数据库连接地址指向海口的DB,最后再开启自己的tomcat A服务。这样就实现了当MySQL数据库宕机后,可以自动切换到海口备库,而不需要人工干预。
5、如果北京的tomcat A服务器宕机后怎么办?
我们可以仿照上面第四条的方式,即也可以在Apache A上执行上述脚本,如果发现tomcat A不可用的话,就自动将Apache A的连接指向海口的tomcat B(平时Apache A是指向北京的tomcat A的)。
6、如果北京的Apache A宕机后怎么办?
因为在北京对Apache A 和Apache B做了HA(通过keepalived方式),可以自动切换到备机。
以上是假期平台子系统的高可用方案,有问题大家一起讨论。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28916011/viewspace-1468893/ ,如需转载,请注明出处,否则将追究法律责任。