文/王瑛
在互聯(lián)網(wǎng)越來越發(fā)達(dá)的今天,搭建一個(gè)單位或企業(yè)的服務(wù)器勢(shì)在必行。經(jīng)調(diào)研,湖北大學(xué)知行學(xué)院官網(wǎng)使用的是windows(Microsoft-IIS)+linux(apache)。其中心服務(wù)器的地址及配置情況如表1所示。
采用軟件方式搭建具有高可用、高并發(fā)的服務(wù)器集群,首先要選取基礎(chǔ)環(huán)境、搭建主體架構(gòu),然后安裝組件、完善架構(gòu)、安裝輔助軟件。本文采用當(dāng)前經(jīng)典的lnmp架構(gòu),用虛擬技術(shù)模擬多臺(tái)計(jì)算機(jī)服務(wù)器。
測(cè)試程序:JAVA的測(cè)試程序是做的一個(gè)簡(jiǎn)易的圖書管理系統(tǒng),具備分頁功能,連接到后臺(tái)數(shù)據(jù)庫保存數(shù)據(jù)。由于測(cè)試軟件的數(shù)據(jù)庫設(shè)計(jì)較為簡(jiǎn)單,只需版本兼容,不再詳細(xì)說明。
Nginx:lnmp和lamp架構(gòu)的不同在于組件分別為Nginx和apache。apache穩(wěn)定性強(qiáng),bug少,模塊較多,動(dòng)態(tài)處理有優(yōu)勢(shì);nginx配置簡(jiǎn)潔、抗并發(fā)強(qiáng)、可在運(yùn)行時(shí)升級(jí)其版本,具備反向代理功能,適合作為前端響應(yīng)服務(wù)器。由于測(cè)試軟件較為簡(jiǎn)單,故推崇輕量級(jí)的nginx架構(gòu),本文使用nginx1.8.1版本。
Lvs:Lvs(Linux Virtual Server)是虛擬服務(wù)器集群系統(tǒng)。Lvs采用直接連接模式,在收到網(wǎng)關(guān)代理服務(wù)器發(fā)來的請(qǐng)求后不經(jīng)過網(wǎng)關(guān)直接將答復(fù)發(fā)給客戶??蛻敉ㄟ^lvs連接后臺(tái)服務(wù)器,而后端服務(wù)器網(wǎng)絡(luò)使用同一虛擬IP,故可將lvs用做調(diào)度器,采用輪叫調(diào)度模式,從而提高并發(fā)能力。
Web服務(wù)有多個(gè),所以不需要擔(dān)心單節(jié)點(diǎn)故障。
Mysql:為了達(dá)到高可用并保證數(shù)據(jù)同步,啟用數(shù)據(jù)庫之前,設(shè)置好雙主模式,確定兩臺(tái)mysql服務(wù)器互信后才能開始使用,否則會(huì)一直報(bào)錯(cuò)。此外,數(shù)據(jù)要定期備份以保證一定容災(zāi)能力。
Php:php服務(wù)一般都不會(huì)宕掉,本課題不做討論。
Keepalived:為了保證接受請(qǐng)求的網(wǎng)關(guān)長(zhǎng)期在線,必須用keepalived服務(wù)提供支持,讓網(wǎng)關(guān)上的lvs服務(wù)保證在其中一個(gè)宕掉之后,能迅速啟用備用服務(wù)器。
Zabbix:由zabbix server與 zabbix agent可選組件兩個(gè)部分構(gòu)成。zabbix server組織Zabbix服務(wù)的配置,通過zabbix agent、ping、端口監(jiān)視等方法提供對(duì)服務(wù)器的硬盤、內(nèi)存、cpu、網(wǎng)絡(luò)狀況、服務(wù)運(yùn)行狀況進(jìn)行監(jiān)視,收集數(shù)據(jù)等,是可視化監(jiān)控軟件。
Tomcat:與nginx整合一起使用,為了擴(kuò)展更多功能的服務(wù),所以搭建tomcat環(huán)境。
圖1:主體架構(gòu)圖
LINUX系統(tǒng)選擇圖形界面較為友好的centos7.0?;A(chǔ)環(huán)境中要考慮 nat、host、bridge三種網(wǎng)絡(luò)環(huán)境的配置。其中nat相當(dāng)于在局域網(wǎng),bridge是橋接模式,相當(dāng)于直接連到互聯(lián)網(wǎng),host模式是僅主機(jī)模式,相當(dāng)于斷網(wǎng)。另外,還要考慮服務(wù)器之間的安全協(xié)議、安全模式和需要安裝的組件。
高可用是保證服務(wù)長(zhǎng)期在線,高并發(fā)是保證在并發(fā)量很大的時(shí)候服務(wù)穩(wěn)定運(yùn)行。高可用軟件有Keepalived,RHCS,Pacemaker,rose(windows),PowerHA(AIX)。高可用軟件就是以一種心跳機(jī)制監(jiān)控服務(wù)是否在線,若不在線則啟用備用服務(wù)器,并且這個(gè)轉(zhuǎn)換間隔很短,讓人感覺服務(wù)器沒有宕機(jī)過一樣。高并發(fā)軟件有Lvs,Nginx/Tengine,Haproxy等等,其本質(zhì)是做一個(gè)代理,將請(qǐng)求轉(zhuǎn)發(fā)到真實(shí)服務(wù)器,而其本身不提供服務(wù),其中Lvs和nginx配置比較簡(jiǎn)單。
服務(wù)器集群采用linux+nginx+mysql+php架構(gòu),具有高并發(fā)能力。同時(shí),使用lvs/nginx+keepalived做高可用,整合tomcat容器,采用輔助軟件確保多個(gè)數(shù)據(jù)庫之間的數(shù)據(jù)同步和多個(gè)Web服務(wù)器之間的網(wǎng)頁同步,最后用監(jiān)控軟件zabbix監(jiān)控整體服務(wù)器的運(yùn)行情況。如圖1所示。
本文使用lvs/nginx+keepalived組合軟件實(shí)現(xiàn)服務(wù)器的高并發(fā)。測(cè)試時(shí),同時(shí)打開三臺(tái)虛擬機(jī),編輯三個(gè)不同的網(wǎng)頁,然后使用同一個(gè)虛擬IP訪問服務(wù)器IP,測(cè)試結(jié)果是每次訪問得到的頁面均不一樣;關(guān)閉其中一個(gè)虛擬機(jī),再次訪問虛擬IP,可以看到除了關(guān)閉的那臺(tái)服務(wù)器,其他兩臺(tái)服務(wù)器的頁面顯示正常;再次打開將剛剛關(guān)閉的服務(wù)器,共享文件夾啟動(dòng)測(cè)試程序,分別訪問三臺(tái)服務(wù)器和虛擬IP,結(jié)果看到是相同頁面;最后關(guān)閉1-2臺(tái)服務(wù)器,再訪問虛擬IP,同樣可以得到測(cè)試程序。
分析一:每臺(tái)服務(wù)器基礎(chǔ)環(huán)境配置應(yīng)相同,虛擬硬件配置master服務(wù)器要盡可能高一點(diǎn),IP在同一個(gè)網(wǎng)段。
分析二:運(yùn)維工具xshell性能良好,在部署環(huán)境時(shí)候可以不用進(jìn)入VMware,直接進(jìn)行工作。
分析三:在搭建lnmp架構(gòu)時(shí)候要注意各個(gè)組件的版本兼容問題。多臺(tái)nginx服務(wù)器之間用同一個(gè)共享文件夾,Web網(wǎng)頁才有同步更新效果。若某一臺(tái)mysql服務(wù)器宕機(jī),不同步數(shù)據(jù)直接啟動(dòng),會(huì)導(dǎo)致服務(wù)器故障,需要用其他技術(shù)確保數(shù)據(jù)庫的數(shù)據(jù)長(zhǎng)期同步。
分析四:使用keepalived+lvs服務(wù),需要設(shè)置好優(yōu)先級(jí),多臺(tái)服務(wù)器優(yōu)先級(jí)相同會(huì)導(dǎo)致服務(wù)器全部故障。
分析五:git服務(wù)在數(shù)據(jù)備份時(shí)會(huì)產(chǎn)生大量數(shù)據(jù),所以除了重要數(shù)據(jù)所有服務(wù)器均要備份外,其余數(shù)據(jù)分散式備份。
附錄:
Linux系統(tǒng)使用的centos7.0,mysql用的5.7,jdk使用1.7.1,nginx用的1.8.1,php用5.3.30版本,keepalived+lvs使用yum自帶的安裝源,源包為CentOS-7-x86_64-DVD-1611,為了方便管理使用xshell運(yùn)維工具,然后本課題其余的組件都是用的yum自帶安裝源。