假期平臺子系統高可用方案

czxin788發表於2015-03-21

 

假期平臺子系統高可用方案

 近期,本人給公司寫了個方案,大家也幫我一起來探討一下這個方案吧。

一、           方案背景

 

假期平臺子系統:

在北京和海口各部署一套tomcatMySQL,並且資料時時同步。以北京地區為生產主系統,海口只做備份用。當北京伺服器發生故障後,可以自動將應用切換到海口的備機。

考慮到MySQL資料庫是異地時時同步,網路因素和業務訪問量不可控,所以可能會出現在北京資料庫上寫資料後,不一定能在海口資料庫上及時檢視到資料,所以海口庫只做備份,不做查詢使用。

另外,由於北京和海口沒有對方的路由表,所以不能使用浮動ip的方式實現故障自動切換(因為海口伺服器不能繫結北京的ip地址使用)。

 

二、拓撲圖

假期平臺子系統高可用方案

 

三、方案說明

         1、前端用Apache做轉發。兩個Apache伺服器之間透過keepalive做高可用,當一個Apache當機後,可以自動切換到另外一個Apache機器上;

         2tomcat Atomcat 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部落格 ” ,連結:http://blog.itpub.net/28916011/viewspace-1468893/,如需轉載,請註明出處,否則將追究法律責任。

相關文章