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