顧躍舉
(武警遼寧省總隊,遼寧沈陽110034)
Linux系統下web服務雙機熱備系統設計與實現
顧躍舉
(武警遼寧省總隊,遼寧沈陽110034)
充分利用linux系統所獨有的功能強大的網絡命令工具,編寫基于tomcat+db2的網站更新文件和數據庫文件自動導出與導入腳本程序,配合系統定時器模擬心跳,實現基礎的雙機熱備功能。防止因硬件故障造成網站系統永久性的癱瘓,解決小企業無力購買價格昂貴的雙機熱備軟件的難題。
linux;雙機熱備;腳本程序
雙機熱備一般指兩臺高可用服務器的熱備份,簡稱雙機熱備,雙機高可用按工作中的切換方式分為:主-備方式(Active-Standby方式)和雙主機方式(Active-Active方式),主-備方式即指的是一臺服務器處于某種業務的激活狀態(即Active狀態),另一臺服務器處于該業務的備用狀態(即Standby狀態)。而雙主機方式即指兩種不同業務分別在兩臺服務器上互為主備狀態(即Active-Standby和Standby-Active狀態)。微軟將此功能加入到了windows2000server之后所有的服務器版本之中,命名為網絡負載均衡群集服務(nlb)。群集從切換方式來看為雙主機模式。即兩臺主機同時均可以接受訪問,根據訪問強度自動分配負載,且互為備份。其最大支持8個負載均衡節點。有效解決了高可用系統熱備需求。但也有其局限性,即服務器所連接的交換機必須配置使能組播功能,即使多個mac地址(也就是多塊網卡)共享一個ip地址映射,而一些低端交換機卻無法提供此服務,這就對軟件應用造成了瓶頸。而linux系統據了解目前尚未出現系統自帶的簡單易用的雙機熱備軟件,仍需第三方軟件來支持,如較為知名的rose軟件,不僅配置較為復雜,且系統硬件升級仍須交付軟件重新授權使用費用,這是一般小公司所不希望開銷的費用。本文以linux系統所自帶的網絡與系統命令工具為基礎,編寫了簡單易用的雙機熱備腳本程序,以解決上述難題。
我單位門戶網站由java語言開發,現部署在tomcat應用服務環境下,后臺數據庫部署在db2數據庫管理系統中。由于此門戶網站既提供web服務,又提供本單位的oa自動化辦公服務,其重要性、安全性與穩定性要求非常高。為防止因停電、服務器硬盤老化壞損或其他無法預見因素帶來無法恢復的災難性的影響,本文嘗試以兩臺服務器為基礎,通過編寫雙機熱備腳本代碼程序,實現雙機熱備功能,工作方式為主-備方式。
由于門戶網站服務器主要提供web與數據庫服務,其他服務暫不予考慮。所以只要實現雙機上的web文件與數據庫自動同步與高可用即可。以此為目的,設計基本思路為在主服務器上編寫數據庫導出腳本程序、網站新增文件備份腳本程序。依托linux系統的計劃任務crontab工具,實現每日增量文件自動備份至ftp服務主目錄下的某特定文件夾,并設定網絡用戶的完全訪問權限,以供備份服務器訪問;在從服務器上編寫數據庫導入腳本程序、網站新增文件拷貝腳本程序。以計劃任務工具來模擬心跳,具體自動備份更新的頻率可以設為每周、每日或每時。從服務器以主服務器所提供的網絡訪問用戶登錄ftp目錄,通過與本地文件的創建時間比對,增量拷貝所需更新文件,導入db2數據庫文件,重新啟動tomcat與db2應用服務程序,完成數據的更新過程。
(一)主服務器程序編寫
首先在主服務器上創建遠程ftp訪問用戶,設定遠程訪問主目錄,創建系統備份文件夾,而后編寫web文件與數據庫文件自動備份腳本程序代碼,配置計劃任務,完成系統的數據備份工作。具體實現過程如下:
[root@localhost]service vsftpd start#開啟linux的ftp服務
[root@localhost]useradd–d/home/backupuser–m backupuser#創建遠程訪問用戶并配置用戶登錄目錄
[root@localhost]passwdbackupuser#設置用戶登錄密碼
[root@localhost]cd/home/backupuser
[root@localhost]mkdir backup#創建系統備份文件夾
[root@localhost]cd backup
[root@localhost]mkdirdatabak#創建數據庫備份文件夾
[root@localhost]cd..
[root@localhost]mkdirnewsbak#創建新聞備份文件夾
[root@localhost]cd/usr/local
[root@localhost]vibackup.sh#編寫備份腳本程序#!/bin/sh
Date=’date+%y%m%d’#設定以日期命名的文件名變量
find/usr/local/tomcat/webapps/ROOT/news-name" ${Date}*"-exec cp{}/home/backupuser/backup/newsbak #查找文件名并拷貝至備份文件夾中
su-db2inst1#切換至數據庫管理員用戶
cd/home/backupuser/backup/databak#進入數據庫備份文件夾
db2move OA export#導出數據庫數據到此文件夾
[root@localhost]crontab-e 012***/usr/local/backup.sh–r#每日12點整執行備份程序至此,主服務器備份過程配置完成。
(二)從服務器程序編寫
基本過程與主服務器配置雷同,首先要建立文件拷貝的目錄,通過wget網絡命令比對文件創建時間完成文件增量更新,導入數據庫,最后重啟系統服務完成系統更新操作。具體實現過程如下:
[root@localhost]vi/usr/local/restore.sh#編寫系統更新腳本程序
cd/usr/local/tomcat/webapps/ROOT/news
wget–nc–nH–r–np–c ftp://backupuser:backupuser@192.168.1.2/backup/*#拷貝比本目錄下更新的文件
su db2inst1
cddatabak
db2move OA import#完成數據庫導入
db2stop force
db2start#數據庫重啟
exit
./usr/local/tomcat/bin/shutdown.sh
./usr/local/tomcat/bin/startup.sh#重啟tomcat網頁服務[root@localhost]crontab-e
1012***/usr/local/restore.sh–r#每日12點10分執行更新程序
至此,從服務器更新過程配置完成。
主服務器每日12點開始自動將增量數據備份至備份文件夾,從服務器每日12點10分開始自動將增量數據更新至從服務器。實現雙機熱備的主從工作模式。那么如何能夠讓系統自動檢測故障出現時間,讓從服務器及時替換主服務器進行工作呢?同樣,我們可以利用計劃任務模擬心跳,進行對主服務器的ping操作。如果不能連通,則修改本機ip地址為主服務器ip地址,重啟網絡服務,實現無人值守的自動災難恢復。具體實現過程如下:
[root@localhost]vi/usr/local/ping.sh#創建與主服務器的連通性測試腳本程序if[“$?”–ne“0”];#如果輸出結果不等于0則視為不通
then ifconfig eth0 192.168.1.1#修改本機網卡ip地址為主服務器地址
service netword restart#重起網絡服務
fi
同樣,再利用計劃任務設置每10分鐘進行一次連通性測試,以保證web服務的不間斷運行。
[root@localhost]crontab-e 10****/usr/local/ping. sh–r#每10分中執行連通性測試程序或者,也可以將系統的更新程序添加到連通性測試程序后面,以保證替換的系統能夠保持最新的系統數據。
如果單位資金條件允許,也可以購買網絡存儲設備,就可以將網站與數據庫資源單獨存儲在網絡存儲的磁盤空間中,這時如果當主服務器出現中斷,可以隨時將網站與數據庫資源原原本本的移植到從服務器中,將數據損失風險歸零,且能夠保障網絡服務的不間斷運行。
[1]劉曉潔,黃永佳.基于Linux的雙機熱備系統的實現技術[J].計算機應用研究,2007,24(4).
[2]張立航,陳大勇.基于Linux的雙機熱備系統設計[J].計算機安全,2011,(10).
[3]張永立,胡杰,張根寶.Linux集群心跳檢測方法的研究與實現[J].化工自動化及儀表,2010,37(6).
編輯∕高偉
顧躍舉(1982-),男,遼寧遼陽人,現為武警遼寧省總隊助理工程師,主要研究方向:為計算機系統應用與維護。