熊超 李滿 劉曉莉 秦黃 劉曉娟
摘要:隨著大數(shù)據(jù)時(shí)代到來,企業(yè)對數(shù)據(jù)倉庫的需求日益增加,一個(gè)企業(yè)通常需要部署和管理上千臺(tái)服務(wù)器,而數(shù)據(jù)倉庫涉及的配置非常復(fù)雜。隨著集群的組件逐漸增多,規(guī)模逐漸增大,傳統(tǒng)的運(yùn)維方式將不再適用,不僅運(yùn)維難度大,而且效率較低。因此,為了降低運(yùn)維的難度,提高效率,文章提出一種通過Ansible來運(yùn)維管理服務(wù)器的方式,利用Ansible的批量系統(tǒng)配置、批量程序部署、批量運(yùn)行命令等功能,編寫Playbook并且集成到roles中,實(shí)現(xiàn)數(shù)據(jù)倉庫系統(tǒng)的快速部署,提高企業(yè)的工作效率。
關(guān)鍵詞:Ansible;數(shù)據(jù)倉庫;自動(dòng)部署;Hadoop
中圖分類號(hào):TP311 ?文獻(xiàn)標(biāo)志碼:A
0 引言
數(shù)據(jù)倉庫是大數(shù)據(jù)背景下的存儲(chǔ)和分析系統(tǒng),能夠支持海量數(shù)據(jù)的存儲(chǔ)和分析,是各大IT企業(yè)的重要組件。中國互聯(lián)網(wǎng)絡(luò)信息中心(CNNIC)發(fā)布的第49次《中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告》顯示,截至2021年12月,中國網(wǎng)民規(guī)模達(dá)10.32億人,較2020年12月增長4 296萬人,互聯(lián)網(wǎng)普及率達(dá)73.0%。在如此龐大的網(wǎng)民數(shù)量下,每一天都會(huì)產(chǎn)生海量的數(shù)據(jù),而雙十一、618這種購物高峰期的前后一周內(nèi),各大互聯(lián)網(wǎng)企業(yè)的用戶產(chǎn)生的數(shù)據(jù)量和訂單都會(huì)激增,所以各大企業(yè)都會(huì)在這段時(shí)間內(nèi)臨時(shí)增加大量服務(wù)器。由于在數(shù)據(jù)倉庫集群中,每增刪一個(gè)服務(wù)器都需要對集群中所有節(jié)點(diǎn)進(jìn)行修改,這就導(dǎo)致運(yùn)維人員在高峰期將面臨大量的重復(fù)任務(wù)。傳統(tǒng)的shell腳本運(yùn)維方式不僅效率低下,而且需要頻繁地修改和維護(hù)服務(wù)器,而Ansible自動(dòng)化運(yùn)維,不僅效率高,而且其中的template模塊能夠?qū)ε渲梦募M(jìn)行動(dòng)態(tài)修改,完美地解決了高峰期所帶來的大量重復(fù)任務(wù),減少了運(yùn)維人員的工作量,提升了運(yùn)維的效率[1-2]。
1 Ansible的工作原理
Ansible是基于Python的paramiko模塊開發(fā)的一款輕量級自動(dòng)化運(yùn)維工具(見圖1),不遵循Client/agents架構(gòu),基于模塊化工作,一共有3 387種模塊,其中包括Command和shell模塊,能夠代替shell腳本完成大部分的工作內(nèi)容。Ansible安裝完成之后會(huì)生成/etc/ansible/hosts主機(jī)清單文件,在執(zhí)行Ansible命令時(shí),Ansible會(huì)訪問這個(gè)文件拿到相應(yīng)的所有主機(jī)地址,通過SSH來批量執(zhí)行模塊,并且Ansible對shell模塊還做了一些優(yōu)化。通過shell模塊遠(yuǎn)程執(zhí)行本地腳本的時(shí)候,Ansible會(huì)自動(dòng)將腳本拷貝到目標(biāo)主機(jī)執(zhí)行,完成后還會(huì)自動(dòng)刪除腳本文件,即使在執(zhí)行異常退出時(shí),Ansible也會(huì)將遠(yuǎn)程腳本刪除,避免了腳本文件堆積[3-4]。
Ansible有Playbook的定義,Playbook是由一個(gè)或多個(gè)Play組成的列表。Play的主要功能是將預(yù)定義的一組主機(jī),裝扮成事先通過Ansible中task定義好的角色。task實(shí)際是調(diào)用Ansible中的一個(gè)模塊,將多個(gè)Play組織在一個(gè)Playbook中,就可以按照一定的順序執(zhí)行預(yù)定義的動(dòng)作。
在整個(gè)數(shù)據(jù)倉庫集群中,如果需要增加或者減少服務(wù)器,就必須修改所有服務(wù)器的配置文件,大部分自動(dòng)化運(yùn)維工具對此沒有很好的解決方案,但是Ansible中的template就完美地解決了這個(gè)問題。通過Jinja2語言為每一個(gè)配置文件編寫一個(gè)模板,所有的服務(wù)器都根據(jù)這個(gè)模板進(jìn)行配置。對于需要變動(dòng)的部分,Jinja2也提供了循環(huán)和分支遍歷提前設(shè)置好的變量文件進(jìn)行靈活改變,這樣工作人員只需要修改一個(gè)文件就可以對所有服務(wù)器的配置文件進(jìn)行更改。
但是在實(shí)際生產(chǎn)環(huán)境中,用一個(gè)Playbook來管理整個(gè)數(shù)據(jù)倉庫集群顯然是不合理的,如果僅僅需要更新某一個(gè)組件,就需要把整個(gè)集群都檢測一遍。因此,Ansible提出了role的定義,工作人員可以將某一個(gè)組件的安裝、配置、啟動(dòng)設(shè)置成一個(gè)role,在批量部署和修改的時(shí)候通過調(diào)用這個(gè)role就能完成這一組件的部署。在需要部署、修改某一組件的時(shí)候,工作人員僅需要調(diào)用這一組件對應(yīng)的role,而不是重新部署和配置整個(gè)集群。
在文件結(jié)構(gòu)上,每一個(gè)role都對應(yīng)一個(gè)文件夾,每一個(gè)文件夾都有tasks,files,templates,handlers,vars子文件夾等。其中最主要的就是tasks文件,里面放了很多yml文件,每一個(gè)文件都對應(yīng)一個(gè)操作,比如安裝、配置和啟動(dòng)等。此外,文件夾中還有一個(gè)main.yml文件,main.yml文件決定了操作的執(zhí)行順序,將需要執(zhí)行的yml文件按照執(zhí)行順序從上到下依次聲明,在role執(zhí)行的時(shí)候就會(huì)按照順序調(diào)用對應(yīng)的yml文件,從而完成整個(gè)組件的部署和修改。
2 數(shù)據(jù)倉庫集群部署規(guī)劃
Ansible部署數(shù)據(jù)倉庫集群的過程非常靈活,只需要根據(jù)集群規(guī)劃(見表1),為每一個(gè)組件編寫role,再依次執(zhí)行就能完成整個(gè)集群的部署。
為了方便統(tǒng)一管理,提前確定好組件壓縮包目錄、安裝目錄、變量文件以及對應(yīng)組件的壓縮包名稱和安裝名稱,如表2—3所示。
3 Ansible自動(dòng)化部署過程
3.1 基礎(chǔ)環(huán)境配置
關(guān)鍵配置主要包括:(1)配置SSH免密連接,需要Ansible節(jié)點(diǎn)對集群所有節(jié)點(diǎn)免密登錄。(2)Ansible節(jié)點(diǎn)安裝Ansible。(3)準(zhǔn)備集群需要的所有組件的壓縮包。此外還需要完成系統(tǒng)的一些基礎(chǔ)配置,這些基礎(chǔ)配置也都可以通過Ansible來批量完成,例如:執(zhí)行ansible all -m shell -a “sed -i’s/SELINUX=.*/SELINUX=disabled’ /etc/selinux/config”,設(shè)置selinux永久關(guān)閉、執(zhí)行ansible all -m shell-a “systemctl stop firewalld”、ansible all -m shell-a “systemctl disable firewalld”關(guān)閉防火墻并關(guān)閉開機(jī)自動(dòng)開啟,執(zhí)行ansible all -m copy -a “src=path to hosts dest=/etc/hosts”為所有主機(jī)添加主機(jī)映射等。
3.2 編寫role并測試
工作人員創(chuàng)建一個(gè)roles目錄,在該目錄中創(chuàng)建需要部署的組件的子目錄:Hadoop,zookeeper,Kafka,F(xiàn)lume,Hive,Sqoop,Spark,Hbase,并在每個(gè)子目錄中創(chuàng)建files,handlers,tasks,templates目錄。在編寫role之前創(chuàng)建一個(gè)全局的變量文件vars.yml,設(shè)置一個(gè)包括集群所有節(jié)點(diǎn)IP的數(shù)組和每個(gè)組件所在節(jié)點(diǎn)的IP,并且設(shè)置一些常用的變量,方便在需要的時(shí)候進(jìn)行修改。組件的部署流程大致分為3個(gè)步驟——解壓、修改配置文件、啟動(dòng),分別對應(yīng)tasks目錄中的3個(gè)yml文件:install.yml,config.yml,start.yml。除此之外,還有配置文件的模板文件,Ansible通過模板文件來動(dòng)態(tài)修改配置文件。
4 Ansible部署和測試
編寫好的role不能直接執(zhí)行,在Ansible架構(gòu)中只提供了單個(gè)模塊的執(zhí)行命令(ansible)和Playbook的執(zhí)行命令(ansible-playbook)。想要執(zhí)行role必須通過Playbook來調(diào)用role,示例如下:
---
- hosts: all
remote_user: xx
vars_files:
- /home/xx/ansible/roles/vars.yml
- ...
roles:
- { role: hadoop ,tags: ['hadoop'] }
- { role: spark-standalone ,tags: ['spark-standalone'] }
- { role: zookeeper ,tags: ['zookeeper']}
- { role: kafka ,tags: ['kafka'] }
Playbook的核心元素包括Hosts(主機(jī)清單)、tasks(任務(wù)集)、Variables(內(nèi)置變量或者自定義變量)、roles(角色集)、tags(標(biāo)簽)等。調(diào)用role的時(shí)候必須聲明hosts,roles,如果設(shè)置了外部變量文件則必須添加vars_files,引入變量文件,如果需要用到其他用戶執(zhí)行role,可以添加“remote_user: xx”指定連接的用戶,前提是當(dāng)前用戶對目標(biāo)主機(jī)能夠通過SSH免密登錄。
在執(zhí)行Playbook之前,通常會(huì)在ansible-playbook命令后面加上“--syntax-check”或者“-C”對Playbook進(jìn)行語法檢測和測試運(yùn)行,當(dāng)確認(rèn)無誤后再真正執(zhí)行部署命令。在Playbook執(zhí)行過程中,藍(lán)色的部分表示該步驟跳過執(zhí)行,綠色的部分表示執(zhí)行成功并且不需要做改變的操作,黃色的部分表示執(zhí)行成功并且對目標(biāo)主機(jī)做變更,紅色的部分表示執(zhí)行失敗。
5 結(jié)語
市面上有很多專門做數(shù)據(jù)倉庫運(yùn)維和自動(dòng)部署的集成工具,比如Ambari和CDH,雖然很方便,功能也比較多,但是不夠靈活。對于Ambari和CDH這種平臺(tái)級工具而言,想要進(jìn)行組件更新非常復(fù)雜,必須重新編譯Ambari的源碼才能完成對單個(gè)組件的更新。就這一點(diǎn)而言,Ansible很好地解決了這個(gè)問題,不僅自身部署靈活,而且各個(gè)組件之間的角色互相獨(dú)立。不僅如此,Ansible是一個(gè)開源的工具,對于大數(shù)據(jù)的初學(xué)者而言這是一個(gè)不錯(cuò)的選擇,而且Ansible的部署流程比較偏向底層,在部署過程中能夠讓初學(xué)者很清晰地了解到整個(gè)數(shù)倉的架構(gòu)。
參考文獻(xiàn)
[1]李沁蔓.基于Ansible的服務(wù)器自動(dòng)化運(yùn)維技術(shù)研究與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2020(13):23-26,31.
[2]范永合,楊澎濤,朱應(yīng)科,等.基于Ansible實(shí)現(xiàn)Zabbix自動(dòng)部署[J].電腦知識(shí)與技術(shù),2019(35):260-261.
[3]李湘林,向全,韋美雁,等.基于Ansible自動(dòng)化運(yùn)維系統(tǒng)批量部署LAMP架構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)[J].大眾科技,2021(3):1-4.
[4]趙創(chuàng)業(yè),唐亮亮,郭威,等.基于Ansible和Flume的海量數(shù)據(jù)自動(dòng)化采集系統(tǒng)[J].電子設(shè)計(jì)工程,2020(3):47-51.
(編輯 王雪芬)
Research and implementation of data warehouse automation deployment based on Ansible
Xiong? Chao, Li? Man*, Liu? Xiaoli, Qin? Huang, Liu? Xiaojuan
(Guangzhou College of Technology and Business, Guangzhou 510000, China)
Abstract:? As the big data era, the enterprise growing demand for data warehouse, an enterprise usually need to deploy and manage thousands of servers, which involves the configuration of the data warehouse is very complex, as the big data era, enterprise growing demand for data warehouse, an enterprise usually need to deploy and manage thousands of servers, which involves the configuration of the data warehouse is very complicated, As the components of the cluster gradually increase and the scale gradually increases, the traditional operation and maintenance methods will no longer be applicable, which is not only difficult to operate and maintain, but also inefficient. Therefore, in order to reduce the difficulty of operation and maintenance and increase the efficiency, this paper proposes a way to operate and maintain the server through Ansible. Using the functions of batch system configuration, batch program deployment and batch command running of Ansible, the Playbook is written and integrated into roles to realize the rapid deployment of the data warehouse system, increase the work efficiency of the enterprise.
Key words: Ansible; the data warehouse; automatic deployment; Hadoop