滕飛 陳子銘
(廣東理工學(xué)院,廣東肇慶 526100)
信息化的發(fā)展過(guò)程中,企業(yè)服務(wù)器的大量部署,已然成為運(yùn)維計(jì)算機(jī)管理中最難的一個(gè)步驟。運(yùn)營(yíng)維護(hù)所需要的技術(shù)要求提升是自動(dòng)化管理發(fā)展的大勢(shì)所趨。
人工運(yùn)維模式單一,結(jié)構(gòu)簡(jiǎn)單,只能管理少量的服務(wù)器,管理模式缺乏高效性,浪費(fèi)大量的人力,這種運(yùn)維模式應(yīng)用到服務(wù)器集群管理上顯然不合適。隨著智能時(shí)代的發(fā)展,自動(dòng)化運(yùn)維技術(shù)出現(xiàn),管理工具也孕育而生,利用這些高效的管理工具來(lái)實(shí)現(xiàn)運(yùn)維管理自動(dòng)化已成為現(xiàn)階段運(yùn)維管理的主要技術(shù)手段。所謂的自動(dòng)化運(yùn)維管理,就是指IT運(yùn)維人員,將過(guò)去傳統(tǒng)人工對(duì)每臺(tái)服務(wù)器進(jìn)行操作,實(shí)現(xiàn)部署更新系統(tǒng)操作,轉(zhuǎn)變成全部由機(jī)器自動(dòng)化實(shí)現(xiàn)。
批量部署也是自動(dòng)化運(yùn)維管理的一部分,隨著服務(wù)器數(shù)量的越發(fā)增多,批量部署在整個(gè)系統(tǒng)部署中起到重要的作用,所能達(dá)到的工作效率是有目共睹的。高效的監(jiān)控工具和部署工具的支持,讓運(yùn)維管理可以做到快速處理故障服務(wù)器,本文對(duì)批量部署能力的研究具有重要的理論和現(xiàn)實(shí)意義[1]。
Ansible 是一款開(kāi)源IT自動(dòng)化工具,它基于Python語(yǔ)言開(kāi)發(fā),能夠自動(dòng)執(zhí)行置備、配置管理、應(yīng)用部署、編排和許多其他手動(dòng) IT 流程。與更為簡(jiǎn)易的管理工具不同,Ansible用戶(如系統(tǒng)管理員、開(kāi)發(fā)人員和架構(gòu)師)可以運(yùn)用 Ansible 自動(dòng)化,在整個(gè)企業(yè)范圍內(nèi)更高效地安裝軟件、自動(dòng)執(zhí)行日常任務(wù)、置備基礎(chǔ)架構(gòu)、提高安全性[2]。
Ansible是一個(gè)輕量級(jí)工具,只需要安裝和配置控制終端,其被控制端不需要安裝相應(yīng)的服務(wù)。使用通用
Python語(yǔ)言開(kāi)發(fā),讓它非常友好,使得它在IT行業(yè)越來(lái)越受歡迎。Python的廣泛使用使得Ansible工具的操作符更容易被開(kāi)發(fā)。里面的模塊功能多樣化,一些企業(yè)或個(gè)人甚至在完善相關(guān)的功能模塊,使用Ansible對(duì)于系統(tǒng)部署和配置管理非常有用。
整體架構(gòu)前端利用HAProxy做Nginx的Web服務(wù)器集群的負(fù)載均衡,使用Keepalived的VRRP功能實(shí)現(xiàn)網(wǎng)絡(luò)平穩(wěn)通暢運(yùn)行,達(dá)到高可用的目的,保證了Web集群的訪問(wèn)量與性能。這種架構(gòu)有很多場(chǎng)景,比如一些電商企業(yè)的購(gòu)物網(wǎng)站,可以搭建在LNMP集群上,通過(guò)集群部署的方式在平臺(tái)進(jìn)行推廣時(shí)可能會(huì)增加點(diǎn)擊量,可以通過(guò)前端負(fù)載均衡服務(wù)器會(huì)進(jìn)行流量分配,以減輕服務(wù)器的壓力,保證電商平臺(tái)的正常工作[3]。大型平臺(tái)是有非常多的Web集群和數(shù)據(jù)庫(kù)集群,而IT運(yùn)維人員不可能24h不間斷監(jiān)控,這就需要一個(gè)Zabbix監(jiān)控工具來(lái)監(jiān)控整個(gè)平臺(tái)。整體架構(gòu)設(shè)計(jì)結(jié)構(gòu)如圖1所示。
圖1 整體架構(gòu)設(shè)計(jì)
Ansible部署過(guò)程簡(jiǎn)單,可一次性對(duì)多臺(tái)服務(wù)器進(jìn)行部署。找到/etc/ansible/hosts配置文件,在其中增添被控制端服務(wù)器的IP。Ansible部署安裝完成后,建立SSH連接,使控制端無(wú)需密碼即可登錄受控主機(jī)。編寫Playbook批量部署受控主機(jī),Ansible劇本執(zhí)行流程圖如圖2所示。
圖2 Ansible部署流程
Zabbix的監(jiān)控端需要安裝Zabbix server服務(wù),被監(jiān)控端需要安裝Zabbix agent服務(wù),只要安裝了Agent服務(wù),就連自身也能監(jiān)控。為了減輕Zabbix server的壓力,本文設(shè)計(jì)的監(jiān)控模式采用主動(dòng)模式,由Zabbix agent主動(dòng)收集數(shù)據(jù)并推送給Zabbix server,它只需要處理大量的數(shù)據(jù)并警告即可,Zabbix監(jiān)控流程如圖3所示。
圖3 設(shè)計(jì)zabbix監(jiān)控流程
Keepalive高可用方案部署在HAProxy 2臺(tái)主機(jī)上,去展示HAProxy的高可用,高可用集群包括熱備和互備,這些集群通常由2個(gè)以上機(jī)器組成。文采用2臺(tái)機(jī)器的熱備方案,其中一臺(tái)作為主服務(wù)器對(duì)外提供服務(wù),另一臺(tái)作為備機(jī),但服務(wù)未啟動(dòng)。主機(jī)和備機(jī)通過(guò)網(wǎng)絡(luò)跳線相互監(jiān)控。當(dāng)備機(jī)監(jiān)測(cè)到主機(jī)宕機(jī)時(shí),可以根據(jù)預(yù)設(shè)好的方案將IP和服務(wù)切換到備機(jī)。以下是本次設(shè)計(jì)用到的核心配置:
以IP地址為192.168.191.132的主機(jī)作為主機(jī),nginx1為它的路由器標(biāo)識(shí),虛擬路由器VI_1由vrrp_instance來(lái)定義,定義MASTER工作狀態(tài),工作接口為ens33,虛擬MAC最后一段地址的信息是100,優(yōu)先級(jí)是200,通告頻率為1s,開(kāi)啟通信認(rèn)證機(jī)制,設(shè)置虛擬VIP地址為192.168.191.200。
以IP地址為192.168.191.133的機(jī)器作為備用主機(jī),路由名稱配置為nginx2,虛擬名稱vrrp_instance稱為VI_1,啟動(dòng)待機(jī)工作BACKUP,工作的接口為ens33,100作為虛擬MAC最后顯示的地址信息,優(yōu)先級(jí)低于主機(jī)為150,通告頻率1s,開(kāi)啟通信認(rèn)證的機(jī)制,設(shè)置同樣的虛擬VIP地址為192.168.191.200。設(shè)計(jì)好配置文件,Keepalive高可用架構(gòu)如圖4所示。
圖4 Keepalive高可用架構(gòu)
設(shè)計(jì)HAProxy全局屬性,使服務(wù)以daemon方式在后臺(tái)運(yùn)行,最大同時(shí)256個(gè)連接,指定保存HAProxy進(jìn)程號(hào)的文件,默認(rèn)為http模式,連接server端不能超過(guò)5s,客戶端響應(yīng)不能超過(guò)50s,server端響應(yīng)不應(yīng)超過(guò)50s。前端服務(wù)的監(jiān)聽(tīng)端口為8080,請(qǐng)求轉(zhuǎn)發(fā)至名為“servers”的后端服務(wù)。HAProxy可以向這個(gè)服務(wù)頒發(fā)32個(gè)并發(fā)數(shù),檢查80端口的狀態(tài)。定義監(jiān)控頁(yè)面綁定端口1080,每5s更新監(jiān)控?cái)?shù)據(jù),訪問(wèn)監(jiān)控頁(yè)面使用stats,監(jiān)控頁(yè)面的認(rèn)證提示用戶名和密碼,其核心配置如下所示:
HAProxy通過(guò)負(fù)載均衡算法將訪問(wèn)流量負(fù)載引流到集群中的開(kāi)啟Web服務(wù)的Nginx節(jié)點(diǎn)。當(dāng)Keepalived的Master服務(wù)通過(guò)其自帶的健康檢測(cè)功能,檢測(cè)到網(wǎng)絡(luò)連通不到后端節(jié)點(diǎn),那么Backup節(jié)點(diǎn)就會(huì)變成為Master節(jié)點(diǎn)進(jìn)行服務(wù)。一主多從的多機(jī)熱備更有保障,只要增加備用的Keepalive節(jié)點(diǎn)就可以實(shí)現(xiàn)。很多情況下雙熱備份就能滿足,不需要浪費(fèi)資源。HAProxy負(fù)載均衡流程如圖5所示。
圖5 HAProxy負(fù)載均衡流程
大部分部署軟件都是從源代碼安裝的,因?yàn)榘惭b軟件的模塊應(yīng)該適合企業(yè)的生產(chǎn)環(huán)境和生產(chǎn)需求,企業(yè)會(huì)根據(jù)自己的需求來(lái)選擇軟件的模塊,并編譯出最適合自己的軟件功能條件。按照傳統(tǒng)的編譯安裝方式部署LNMP架構(gòu),需要操作人員在每臺(tái)服務(wù)器上手動(dòng)安裝,錯(cuò)誤率高效力低下。當(dāng)利用Ansible實(shí)現(xiàn)LNMP架構(gòu)的自動(dòng)化批量部署能夠極大地解決傳統(tǒng)運(yùn)維部署方式存在的問(wèn)題。LNMP架構(gòu)搭建流程如圖6所示。
圖6 LNMP架構(gòu)搭建流程
準(zhǔn)備5臺(tái)CentOS7操作系統(tǒng)的虛擬機(jī),并且系統(tǒng)版本完全一致,利于后期系統(tǒng)排錯(cuò)和統(tǒng)一管理,系統(tǒng)內(nèi)存為2G,處理器核心數(shù)量為2。在企業(yè)中Ansible自動(dòng)化部署工具是用來(lái)安裝部署多臺(tái)服務(wù)器的,但在本文中因本人資源有限,只能讓其中1臺(tái)作為Ansible管理節(jié)點(diǎn),其余4臺(tái)被管理服務(wù)器作為測(cè)試節(jié)點(diǎn)。具體安裝服務(wù),如表1所示。
表1 部署安裝環(huán)境測(cè)試表
4.1.1 安裝Ansible
在IP地址為192.168.191.131的CentOS7操作系統(tǒng)的虛擬機(jī)上,使用Yum安裝Ansible自動(dòng)化批量部署工具,使其作為Ansible管理節(jié)點(diǎn)。輸入安裝命令Yum install -y ansible 輸出的結(jié)果如圖7所示。
圖7 安裝Ansible工具
4.1.2 部署ssh免密通信
想要Asible控制端與被控端正常的部署工作,需要讓Ansible控制服務(wù)器與被控制服務(wù)器節(jié)點(diǎn)建立通信,通信的方式主要有2種,第一種是基于密碼鏈接,第二種是基于密鑰連接。我們選擇后者,因?yàn)榍罢卟话踩┞睹艽a,在實(shí)際生產(chǎn)環(huán)境中我們是不能隨便暴露密碼的,第二種比較安全但是需要先創(chuàng)建公鑰和私鑰,并下發(fā)公鑰至被控制端。
讓控制端主機(jī)Ansible能夠免密登錄到被控制端的主機(jī),實(shí)現(xiàn)直接遠(yuǎn)程登錄上被控制端主機(jī)無(wú)需驗(yàn)證密碼。Ansible控制端生成密鑰的命令為ssh-keygen,如圖8所示。
圖8 密鑰的創(chuàng)建
要想實(shí)現(xiàn)Ansible免密登錄到其他的服務(wù)器節(jié)點(diǎn),就要把上圖生成的公鑰發(fā)送到其他服務(wù)器節(jié)點(diǎn),根據(jù)提示輸入其服務(wù)器的用戶和密碼,至此免密通信搭建成功。
推送公鑰到其他被控服務(wù)器節(jié)點(diǎn)的命令為ssh-copyid -i ~/.ssh/id_rsa.pub root@ip 地址,其中 id_rsa.pub為系統(tǒng)存放公鑰的文件。使用免密登錄被控制端主機(jī)的命令ssh root@IP地址,按照主機(jī)清單依次輸入IP地址,驗(yàn)證免密操作是否成功。測(cè)試免密通信成功如圖9所示。
圖9 免密通信
4.1.3 部署Hosts Inventory
在Ansible框架中Hosts Inventory為主機(jī)清單,指定的是一個(gè)配置文件。將需要遠(yuǎn)程管理的主機(jī)IP寫入主機(jī)清單中,指定操作的主機(jī)。Ansible會(huì)根據(jù)主機(jī)清單中提供的主機(jī)IP對(duì)主機(jī)進(jìn)行遠(yuǎn)程控制與監(jiān)控遠(yuǎn)程主機(jī)的運(yùn)行狀態(tài)。可以對(duì)需要遠(yuǎn)程管理的主機(jī)進(jìn)行IP分組管理,有利于分配不同的部署操作。本文測(cè)試中對(duì)4臺(tái)主機(jī)進(jìn)行了遠(yuǎn)程管理,分別將4臺(tái)主機(jī)分成Web組與proxy組。主機(jī)清單配置如圖10所示。
圖10 主機(jī)清單
Zabbix監(jiān)控需要部署安裝Zabbix-agent服務(wù),不像Ansible批量部署技術(shù)一樣,不需要在被控制端安裝服務(wù),只要控制端與被控制端之間能夠通信就可以批量安裝部署。由于Zabbix服務(wù)端需要和Ansible控制端安裝在同一臺(tái)虛擬機(jī)上IP地址為192.168.191.131,Zabbix服務(wù)端只需要安裝在一臺(tái)虛擬機(jī)上,Ansible技術(shù)是為了大量的機(jī)器部署,用來(lái)提高IT運(yùn)維人員的工作效率。但是為了一臺(tái)機(jī)器就編寫一個(gè)劇本會(huì)浪費(fèi)時(shí)間,所以就不需要編寫劇本,只需要寫一個(gè)sh腳本就可以了。
4.2.1 部署Zabbix Server
Zabbix監(jiān)控需要穩(wěn)定運(yùn)行,且Zabbix監(jiān)控是用于內(nèi)部網(wǎng)絡(luò)的監(jiān)控,沒(méi)有大量的訪問(wèn)流量,所以選擇LAMP架構(gòu)來(lái)安裝Zabbix服務(wù)端。
安裝Zabbix監(jiān)控服務(wù)端前,我們需要進(jìn)入MySQL創(chuàng)建Zabbix數(shù)據(jù)庫(kù),并且所有的服務(wù)器節(jié)點(diǎn)均需要授權(quán)。創(chuàng)建數(shù)據(jù)庫(kù)語(yǔ)句為 create database zabbix character set utf8 collate utf8_bin;,創(chuàng)建 Zabbix 用戶并 設(shè)計(jì)密碼 create user zabbix@'%' identified by '123456'; 服務(wù)器節(jié)點(diǎn)均授權(quán)語(yǔ)句 grant all privileges on zabbix.*to zabbix@'%';查詢Zabbix數(shù)據(jù)庫(kù)以及Zabbix用戶白名單,返回的結(jié)果如圖11所示。
圖11 Zabbix數(shù)據(jù)庫(kù)及Zabbix用戶
在Ansible控制端安裝Zabbix服務(wù),采取Yum安裝的語(yǔ)句為 yum -y install zabbix-server-mysql zabbixweb-mysql,安裝完成后開(kāi)啟Zabbix服務(wù)和Apache服務(wù),在網(wǎng)頁(yè)上輸入192.168.191.131/Zabbix,進(jìn)入Zabbix服務(wù)端的安裝界面完成相關(guān)操作。
4.2.2 部署Zabbix Agent
部署Zabbix agent服務(wù),是為了使其能被Zabbix所監(jiān)控,所以需要在所有Ansible被控制端上部署。
如上所示中的Web和Proxy為主機(jī)清單中的兩個(gè)用戶組,執(zhí)行代碼部署。
在IP地址為192.168.191.132和192.168.191.133這2臺(tái)被控制端主機(jī)中,批量安裝Keepalived+HAProxy。
其中Keepalived的安裝部署為yum安裝,HAProxy的安裝部署為源碼編譯安裝。Ansible分別通過(guò)調(diào)用Unarchive模塊解壓源碼包,調(diào)用Shell模塊對(duì)HAProxy進(jìn)行編譯安裝,調(diào)用Yum模塊安裝依賴包和Keepalived。利用命令A(yù)nsible-playbook自動(dòng)化部署過(guò)程如圖12所示。
圖12 部署Keepalived+HAProxy結(jié)果
本文是需要在IP地址為192.168.191.134和192.168.191.135的主機(jī)上部署LNMP架構(gòu)。Ansible批量部署LNMP架構(gòu)的Playbook的設(shè)計(jì)代碼由于過(guò)多,部署軟件所需的各個(gè)目錄與所需要的依賴包等過(guò)程省略截取。
(1)Ansible通過(guò)調(diào)用Unarchive模塊對(duì)Nginx安裝包進(jìn)行解壓,并指定存放地點(diǎn);調(diào)用Shell模塊進(jìn)行編譯安裝Nginx,并且啟動(dòng)Nginx。
(2)Ansible通過(guò)調(diào)用Unarchive模塊對(duì)Php安裝包進(jìn)行解壓;調(diào)用user模塊添加用戶;調(diào)用Shell模塊來(lái)編譯安裝;調(diào)用file模塊來(lái)對(duì)文件進(jìn)行授權(quán)。
(3)安裝MySQL是通過(guò)Ansible調(diào)用Yum模塊來(lái)對(duì)MySQL進(jìn)行部署;通過(guò)Shell模塊來(lái)啟動(dòng)MySQL。
(4)Ansible通過(guò)調(diào)用批量部署LNMP的Playbook。
本次批量部署中,搭載LNMP架構(gòu)測(cè)試的機(jī)器主要有2臺(tái),IP地址分別為192.168.191.134和192.168.191.135。啟動(dòng)Nginx的Web服務(wù),在瀏覽器中分別輸入與之相應(yīng)IP地址,能夠成功訪問(wèn)2臺(tái)Web服務(wù)器。對(duì)其部署的高可用LNMP架構(gòu)進(jìn)行了詳細(xì)的測(cè)試,并且可以實(shí)現(xiàn)使用郵件發(fā)送監(jiān)控警告。Ansible批量部署工具去完成了Keepalived、Haproxy和LNMP架構(gòu)的部署。