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