大數(shù)據(jù)干貨分享:大數(shù)據(jù)集群的自動化運維實現(xiàn)思路
摘 要
IT公司的數(shù)據(jù)平臺是支撐大規(guī)模數(shù)據(jù)處理、數(shù)據(jù)決策支持的重要基礎(chǔ)設(shè)施,隨著大數(shù)據(jù)及人工智能技術(shù)的發(fā)展,大數(shù)據(jù)集群規(guī)模變得越來越大。然而,如何快速、高效的管理好成千上萬臺的大數(shù)據(jù)集群成為了很多大數(shù)據(jù)工程師的奮斗目標,設(shè)計實現(xiàn)合理的自動化運維系統(tǒng)將使大數(shù)據(jù)集群的管理事半功倍。
本文將從大數(shù)據(jù)集群面臨的挑戰(zhàn)、自動化運維系統(tǒng)的設(shè)計原則、工具選擇等方面闡述大數(shù)據(jù)集群的自動化運維實現(xiàn)思路。
大數(shù)據(jù)集群面臨的挑戰(zhàn)
Hadoop生態(tài)系統(tǒng)組件:

1、服務(wù)器規(guī)模大
由于海量數(shù)據(jù)的存儲需求,大數(shù)據(jù)集群通常服務(wù)器規(guī)模比較大,例如,阿里巴巴云梯Hadoop集群、騰訊TDW系統(tǒng)單個集群均超過5000臺的服務(wù)器,幾百臺至上千臺服務(wù)器規(guī)模的集群非常普遍,集群規(guī)模的增長對故障響應、跨機房容災等方面提出了更高的需求。
2、組件之間的依賴關(guān)系復雜
大數(shù)據(jù)集群通常需要部署多個框架,Hadoop生態(tài)系統(tǒng)包含了分布式存儲、分布式就算、NoSQL系統(tǒng)、實時計算、流式計算、數(shù)據(jù)倉庫等各個組件,以Hadoop本身為例,YARN及Hbase依賴HDFS系統(tǒng),而HDFS系統(tǒng)又包括Namenode、SecondaryNamenode、Datanode等不同的角色,各個角色之間的啟動也有依賴順序關(guān)系。
3、 橫向/縱向擴展需求多
從橫向擴展來看,大數(shù)據(jù)集群通常需要隨著數(shù)據(jù)量的增長而進行集群的擴容,從縱向擴展來看,每個公司的不同產(chǎn)品、不同業(yè)務(wù)線需要部署多個不同的集群。
4、故障處理頻繁
由于集群規(guī)模大,服務(wù)器多,大數(shù)據(jù)集群的硬件故障、系統(tǒng)故障等問題發(fā)生頻繁,以我曾經(jīng)負責的大數(shù)據(jù)集群來看,總計三千臺服務(wù)器,超過6萬塊硬盤,每周更換的損壞磁盤在40塊左右,這種故障頻率對傳統(tǒng)的故障處理流程帶來了挑戰(zhàn),亟須建立自動化的故障處理方式來簡化工作量。
為什么大數(shù)據(jù)平臺更適合自動化運維?
1、軟件體系高度標準化
目前,IT公司的的大數(shù)據(jù)平臺普遍采用Hadoop生態(tài)系統(tǒng)各個組件,開源產(chǎn)品的工具設(shè)計更注重通用性、標準化等方面的要求,因此,在軟件的自動構(gòu)建(普遍采用Maven工具)、API、測試用例(普遍實現(xiàn)了單元測試)、指標監(jiān)控(http接口)等均具比各類自研系統(tǒng)更加規(guī)范。
2、服務(wù)器配置高度收斂
盡管大數(shù)據(jù)集群的規(guī)模大,但是集群在達到一定規(guī)模后,服務(wù)器的配置趨向于收斂特性,即大量的服務(wù)器的硬件、系統(tǒng)、部署的軟件均是一致的,這就為自動化運維系統(tǒng)的設(shè)計帶來了巨大優(yōu)勢。
自動化運維系統(tǒng)設(shè)計原則
1、標準化
自動化前提是標準化,在實現(xiàn)系統(tǒng)自動化之前,應該對操作流程進行一次完善的標準化
2、高可用
大數(shù)據(jù)系統(tǒng)往往都是高可用的系統(tǒng),為了提升整個系統(tǒng)的穩(wěn)定性和可用性,自動化運維系統(tǒng)也需要設(shè)計成高可用,避免因為自動化運維系統(tǒng)的故障導致大數(shù)據(jù)平臺出現(xiàn)無法服務(wù)的情況。
3、冪等性
簡單來說,冪等性指的是一個操作多次執(zhí)行所產(chǎn)生的影響均與一次執(zhí)行的影響相同。在大數(shù)據(jù)系統(tǒng)架構(gòu)中,經(jīng)常存在部分失敗的情況,需要多次運行相同的部署命令,這就需要系統(tǒng)在重復執(zhí)行的情況下,不會出現(xiàn)異常。
4、可回滾
所有自動化操作均需涉及為可回滾,任何一種改變操作,都應該保留相應的數(shù)據(jù)、代碼、日志,并做合理備份,保證在任何一個步驟出現(xiàn)問題的時候,自動化運維系統(tǒng)可以實現(xiàn)回滾至之前的狀態(tài)。
5、高效率
大數(shù)據(jù)系統(tǒng)集群可以達到成千上萬臺服務(wù)器的規(guī)模,一次操作需要在短時間內(nèi)完成所有服務(wù)器的覆蓋,因此自動化系統(tǒng)的運行效率需要提高,一般需設(shè)計可配置的并發(fā)運行數(shù),達到對上線效率的要求。
實現(xiàn)路徑
典型的大數(shù)據(jù)平臺自動化運維系統(tǒng),應該包含OA系統(tǒng)(實現(xiàn)頁面操作、工作流管理)、CMDB(配置管理數(shù)據(jù)庫)、配置管理工具、堡壘機(中控機)、定時任務(wù)系統(tǒng)、持續(xù)集成系統(tǒng)等。
Hadoop自動化運維系統(tǒng)典型架構(gòu):

自動化運維工具選擇
1、Ansible
Ansible是目前github上最受歡迎的開源自動化工具,使用Python語言開發(fā),與Puppet、Slat等工具相比,Ansible無需在被管理的機器安裝agent,而是通過ssh進行管理,Ansible的更加的簡單易用并且功能強大。
2、Puppet
puppet是一種Linux、Unix平臺的集中配置管理系統(tǒng),基于C / S架構(gòu),使用ruby語言,可管理配置文件、用戶、cron任務(wù)、軟件包、系統(tǒng)服務(wù)等。puppet把這些系統(tǒng)實體稱之為資源,puppet的設(shè)計目標是簡化對這些資源的管理以及妥善處理資源間的依賴關(guān)系。
3、SaltStack
SaltStack是一個服務(wù)器基礎(chǔ)架構(gòu)集中化管理平臺,具備配置管理、遠程執(zhí)行、監(jiān)控等功能。SaltStack基于Python語言實現(xiàn),結(jié)合輕量級消息隊列(ZeroMQ)與Python第三方模塊(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)構(gòu)建。
通過部署SaltStack環(huán)境,可以在實現(xiàn):在成千上萬臺服務(wù)器上做到批量執(zhí)行命令;根據(jù)不同業(yè)務(wù)特性進行配置集中化管理、分發(fā)文件、采集服務(wù)器數(shù)據(jù)、操作系統(tǒng)基礎(chǔ)及軟件包管理等。
綜上所述,Ansible是目前Devops業(yè)界非?;钴S的工具,在使用和部署上也非常方便(僅需安裝控制端,無需部署agent),在小批量的集群上建議使用Ansible。如果集群規(guī)模較大(超過1000臺)且對運行速度要求更高,可以考慮Salt和Puppet(對Python做二次開發(fā)選用Salt,熟悉Ruby則可選擇Puppet)。