胡科, 陳勇
(長(zhǎng)江大學(xué), 計(jì)算機(jī)科學(xué)學(xué)院, 湖北, 荊州 434020)
隨著互聯(lián)網(wǎng)現(xiàn)代信息網(wǎng)絡(luò)技術(shù)的飛速發(fā)展及普遍應(yīng)用,各種大型網(wǎng)站以及電商平臺(tái)等大量涌現(xiàn),為人們的生活提供了極大的便利,但是隨之而來的是用戶規(guī)模龐大訪問量激增,企業(yè)門戶網(wǎng)站、數(shù)據(jù)中心等的訪問量更是急速增長(zhǎng)。其實(shí),大部分網(wǎng)站比如說電商網(wǎng)站都需要連續(xù)晝夜不間斷地提供服務(wù),任何服務(wù)中斷都會(huì)給用戶和企業(yè)帶來不可估量的損失。
因此,為企業(yè)搭建高可用集群顯得尤為必要,它可以對(duì)外不間斷提供服務(wù),最大地降低了因其他因素造成的故障對(duì)企業(yè)業(yè)務(wù)的影響?;贜ginx作為反向代理搭建集群起負(fù)載均衡的方式[1]也受到了各種大型網(wǎng)站的普遍運(yùn)用,可以通過適當(dāng)?shù)卦鰷p服務(wù)器數(shù)量,提高網(wǎng)站擴(kuò)展性并且解決大型網(wǎng)站的并發(fā)壓力。
高可用集群技術(shù)是指減少中斷時(shí)間和降低服務(wù)量為主的服務(wù)器集群技術(shù)[2-3],它可以持續(xù)地為用戶提供服務(wù)。高可用集群必須運(yùn)行于至少2個(gè)節(jié)點(diǎn)以上,當(dāng)一臺(tái)機(jī)器出現(xiàn)故障時(shí),另一臺(tái)機(jī)器可承擔(dān)服務(wù)任務(wù),從而保證系統(tǒng)能持續(xù)地對(duì)外服務(wù)。
Nginx是一款高性能的具有HTTP和反向代理的Web服務(wù)器,能經(jīng)受住高負(fù)載的考驗(yàn),專為性能優(yōu)化而開發(fā)。Nginx的核心是負(fù)載調(diào)度算法,通過算法輪詢、weight權(quán)重等策略方式將客戶端發(fā)來的請(qǐng)求轉(zhuǎn)發(fā)至不同的服務(wù)器上,提高服務(wù)器的并發(fā)量。因它簡(jiǎn)單的配置文件,CPU、內(nèi)存資源消耗低,并發(fā)能力強(qiáng)且運(yùn)行非常穩(wěn)定,從而受到廣大網(wǎng)站用戶的歡迎。
Keepalived是集群管理中的服務(wù)軟件,它剛開始是專為L(zhǎng)inux虛擬服務(wù)器負(fù)載均衡設(shè)計(jì)的,也可以管理Linux虛擬服務(wù)器集群系統(tǒng)中各個(gè)服務(wù)節(jié)點(diǎn)的狀態(tài)。直到又加入了可以實(shí)現(xiàn)高可用的VRRP(虛擬路由冗余協(xié)議)功能,目的就是為了保證當(dāng)個(gè)別節(jié)點(diǎn)宕機(jī)時(shí),整個(gè)網(wǎng)絡(luò)還可以正常地運(yùn)行。因此,Keepalived還可以作為其他服務(wù)(例如Nginx)的高可用解決方案軟件,它通過檢查服務(wù)器的狀態(tài)可以將失效機(jī)隔離出去,這樣我們就可以實(shí)現(xiàn)Nginx集群以及高可用技術(shù)。
Tomcat是一個(gè)免費(fèi)開源的Web輕量級(jí)應(yīng)用服務(wù)器,其中連接器和容器是它的核心組成部分,在中小型系統(tǒng)和并發(fā)量小的場(chǎng)合下被普遍應(yīng)用,這里可用于模擬集群中的服務(wù)器。
Docker是一個(gè)用Go語言開發(fā)開源的應(yīng)用容器引擎,它可以將開發(fā)者們的完整應(yīng)用打包封裝并獨(dú)立部署到一個(gè)可移植的容器中,這樣就可以發(fā)布并運(yùn)行在任何的Linux機(jī)器上,無需復(fù)雜的外部硬件設(shè)備。Docker容器擁有系統(tǒng)資源更高效性,可以響應(yīng)式部署和擴(kuò)展的優(yōu)點(diǎn)。
新網(wǎng)站剛開始的時(shí)候沒有多少訪問流量,可以毫無壓力地訪問,但是當(dāng)這個(gè)網(wǎng)站訪問量和并發(fā)量上升的時(shí)候,訪問網(wǎng)站會(huì)有延遲卡頓甚至根本訪問不到的情況,那么這個(gè)時(shí)候就需要用到負(fù)載均衡[4]。在以前,部署的都是單個(gè)服務(wù)器,現(xiàn)在則需要部署多個(gè)服務(wù)器集群,把客戶端流量分散到集群中不同服務(wù)器上,這就可以交給負(fù)載均衡技術(shù)去解決了。使用了負(fù)載均衡后,每個(gè)節(jié)點(diǎn)機(jī)器上處理的請(qǐng)求相對(duì)會(huì)少很多,所以能夠解決訪問延遲卡頓和訪問失敗的問題[5],提高網(wǎng)站用戶體驗(yàn)。
實(shí)驗(yàn)環(huán)境為L(zhǎng)inux環(huán)境下的CentOS 7.0版本,需配置2臺(tái)機(jī)器,每臺(tái)機(jī)器都要安裝Keepalived和Nginx。為了效果能夠更好,將Nginx反向代理加2個(gè)版本的Tomcat實(shí)現(xiàn)負(fù)載均衡,還需要裝上Docker以及Tomcat。
默認(rèn)情況下CentOS7中沒有Nginx的源,Nginx官方提供了源,所以執(zhí)行以下命令添加源(見圖1):rpm-Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm。
圖1 安裝Nginx源
之后便可以安裝Nginx了,用命令yum install-y nginx安裝成功之后將Nginx設(shè)置開機(jī)自啟,并關(guān)掉防火墻。
接下來安裝Keepalived、yum install keepalived,安裝成功之后會(huì)發(fā)現(xiàn)在/etc目錄下會(huì)生成Nginx和Keepalived文件夾,里面有我們需要編輯的配置文件,包括nginx.conf和keepalived.conf,如圖2所示。
圖2 安裝Nginx并設(shè)置開機(jī)自啟
第1步:打開主機(jī)器的/etc/keepalived目錄的keepalived.conf配置文件,里面有很多節(jié)點(diǎn),我們主要配置的是global_defs全局定義節(jié)點(diǎn)和vrrp_inatance VI_1實(shí)例配置節(jié)點(diǎn),其余都可以不管。
global_defs:把vrrp_strict這一行去掉,要嚴(yán)格符合VRRP協(xié)議。然后修改router_id 為KEEPALIVED_NGINX_MASTER,以便識(shí)別。
第2步:打開/etc/hosts配置文件,里面需要添加一行127.0.0.1 KEEPA LIVED_NGINX_MASTER。
vrrp_inatance VI_1:這里面我們需要自定義虛擬IP為自己的虛擬機(jī)IP,后面2位改為自己慣用的IP即可。
先把虛擬機(jī)關(guān)掉,然后克隆1臺(tái)主機(jī)master,其IP為192.168.45.129,這里稱為備份機(jī)。
第1步:打開備份機(jī)的keepalived.conf配置文件,將global_defs里面的router_id改為KEEPALIVED_NGINX_BACKUP,以及vrrp_inatance VI_1里面的state改為BACKUP,還有priority改為50。
第2步:打開/etc/hosts配置文件,里面需要添加一行127.0.0.1 KEEPA LIVED_NGINX_BACKUP。到此備份機(jī)修改完畢,集群也搭建完畢。
首先修改一下Ngixn的默認(rèn)目錄root/usr/share/nginx/html,修改index.html內(nèi)容為當(dāng)前機(jī)器IP,以便區(qū)分主機(jī)和備份機(jī)。
第1步:現(xiàn)在啟動(dòng)Keepalived命令systemctl start keepalived.service,然后訪問前面設(shè)置的虛擬IP,結(jié)果出現(xiàn)的是主機(jī)IP,因?yàn)?28是主機(jī)器,權(quán)重高。
第2步:我們?nèi)绻?28掛掉,在主機(jī)里面用systemctl stop keepaliveed.service命令,備份機(jī)保持Keepalived開啟的狀態(tài)。這個(gè)時(shí)候的結(jié)果是自動(dòng)切換至備份機(jī)129,說明高可用集群搭建成功,也可以看到在主機(jī)掛掉的情況下,訪問虛擬IP可以直接切換至備份機(jī)。
第1步:首先設(shè)置Docker的yum源,yum-config-manager--add-repo,https://download.docker.com/linux/centos/do-cker-ce.repo,然后安裝最新版本的Docker,yum install docker-ce docker-ce-cli containerd.io即可。驗(yàn)證一下是否安裝成功,輸入查看Docker的版本即可,如圖3所示。
圖3 查看Docker版本
第2步:安裝Tomcat,在這里直接使用命令docker pull tomcat:7即可完成安裝步驟,注意要裝7版本和8版本2個(gè),裝完之后可以檢驗(yàn)一下,用docker images命令,主機(jī)和備份機(jī)都要裝上,如圖4所示。
圖4 安裝Tomcat
第3步:?jiǎn)?dòng)Tomcat7,docker run -d -p 8080:8080 e614000ce544,這里的是版本7的鏡像ID。注意:Tomcat8版本的默認(rèn)WebApps下是空的,我們需要?jiǎng)h除,然后把webapp.dist改名為webapps即可,用mv webapps.dist/ webapps命令(見圖5)。
圖5 修改webapp.dist文件
第4步:全部配置完成之后,我們可以打開瀏覽器測(cè)試,輸入192.168.45.128:8080,也就是主機(jī)IP,出現(xiàn)的是Tomcat7版本。當(dāng)輸入192.168.45.129:8080時(shí),也就是備份機(jī)IP,出現(xiàn)的是Tomcat8版本。
我們修改主機(jī)的Nginx配置文件,找到/etc/nginx目錄,打開nginx.conf配置文件,在include /etc/nginx/conf.d/*.conf;上方加上如下內(nèi)容:
upstream www.huke.com{
server 192.168.45.128:8080;
server 192.168.45.129:8080;
}
其中,upstream是配置Nginx與后端服務(wù)器負(fù)載均衡不可缺少的一個(gè)模塊,還可以對(duì)后端服務(wù)器的狀態(tài)進(jìn)行檢查監(jiān)控,然后添加自定義的域名,weight是權(quán)重配置,權(quán)重越高,分配到的概率越大。
然后,修改nginx/nginx/conf.d/下的default.conf文件,將其中的proxy_pass改為前面我們?cè)O(shè)置的域名即可,另外備份機(jī)也需要修改,也是一樣的修改內(nèi)容。
全部配置完成后,我們就可以用IP192.168.45.128測(cè)試,會(huì)發(fā)現(xiàn)隨機(jī)的通向Tomcat7版本或者8版本,另外用IP192.168.45.129或者192.168.45.99可以直接隨機(jī)通向Tomcat7或者8版本,這樣就實(shí)現(xiàn)了負(fù)載均衡。
現(xiàn)在企業(yè)中都要配置高可用集群,緩解服務(wù)器壓力,以上實(shí)驗(yàn)利用開源軟件Nginx+Keepalived實(shí)現(xiàn)了高可用負(fù)載均衡架構(gòu),通過上述構(gòu)建過程,完成了基本的集群部署以及實(shí)現(xiàn)了負(fù)載均衡。此架構(gòu)能有效緩解服務(wù)器的壓力,解決并發(fā)壓力,提高應(yīng)用處理性能,為企業(yè)提供了一個(gè)良好平臺(tái)。