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