Captial One如何實現Artifactory HA叢集的自動化維護
一、背景
本文整理自Hank Hudgins,Capital One高階工程師,在JFrog 2019使用者大會上的講演《Automated Artifactory HA Pipeline》。
Capital One是美國最大的數字化銀行之一,其IT管理方法和應用技術也極為敏捷,全球擁有上萬研發,具備非常豐富的 DevOps落地經驗。在Capital One的DevOps體系當中,有很多類似於JFrog Aritfactory的HA(高可用)應用服務叢集。眾所周知,HA叢集的運維,如升級、擴容、打補丁等工作,要想在保持使用者服務不中斷,服務水平不降級的前提下完成,尤其是在像Capital One這麼大規模的DevOps系統當中,是十分困難、複雜,和高風險的。
Captital One使用的Artifactory為其DevOps體系中的製品及依賴管理提供了企業級解決方案,擁有工作(primary)和容災(HR)兩類HA叢集。Hank所在的Artifactory維護團隊,針對Artifactory HA叢集維護的難點,透過建設和執行自動化的流水線,在不影響使用者使用和服務水平的前提下,自動、高效、保質地完成了諸如版本升級、配置更新、補丁載入等工作,並且在檢測到問題時,還能夠實現自動化的回滾。在本次講演中,Hank就介紹了這套自動化流水線的組成與特色。
二、自動化流水線概述
Capital One採用這套可靠的自動化流水線,在Artifactory HA叢集的維護工作中獲得了良好的收益:
首先是透過自動化加速了維護程式,使得開發人員能夠集中精力進行研發,而不需要考慮重複性的部署和測試任務;其次,流水線的可複用性也為維護工作提供了便捷的可擴充套件性,透過修改相關配置,流水線就能在新的環境中進行部署;最後,流水線還提供了可以快速檢測缺陷,並實現無縫、高效回滾的部署過程。
該自動化流水線是按下述方式組成的:
首先是利用Jenkins驅動整個流水線,並整合GitHub進行觸發:
· 每個Pull Request會觸發小規模的測試以得到快速反饋。這些測試不是HA叢集範圍的,但可以得到快速驗證;
· 每個Merge會觸發研發環境HA叢集範圍的部署,並進行相關測試;
· 標籤(Tag)被用來標記程式碼更新的驗證階段和對應的環境。
其次,利用Terraform建立基礎設施,實現了“類”藍/綠的釋出。
最後,利用Chef cookbook實現針對各種應用服務的操作和配置更新。除了Artifactory,這些應用服務還包括了相關用於反向代理的Nginx、監控的Datadog,以及日誌收集的Splunk。
三、自動化流水線組成
接下來,Hank逐一介紹了這套自動化流水線各個階段的任務及實現方式。
首先是程式碼的靜態分析,針對Pull Request和Merge執行。分析的目的是對程式碼結構進行快速驗證和反饋,確保其符合業界標準。流水線整合了一系列的Linter來實現針對不同型別程式碼的靜態分析。
接下來是安全測試,這在流水線當中體現了“左移”的原則,能夠在真正部署之前儘早的檢測和發現潛在的安全漏洞。目前的安全測試分兩類,一類是靜態安全測試,即透過分析程式碼結構來發現如SQL隱碼攻擊、Cross-site指令碼等安全隱患;另一類是JFrog Xray提供的依賴測試,檢測三方依賴包中是否包含已知安全漏洞,並推薦對應的修復版本。
下一步是單元/整合測試,用於驗證程式碼的更新不會破壞預期的功能。這一步測試也可以應用於Artifactory的Custom user plugin的測試。流水線透過啟動包含Artifactory的容器,安裝並測試這些custom plugin,確保其正確工作,而不需要連線到真正的Artifactory HA叢集。
在完成了上述初步的測試之後,自動化流水線進入釋出過程。首先要把部署相關的檔案暫存到可靠的位置,這樣在叢集自動縮放的過程中不會依賴到其他系統,也包括Artifactory自身。目前,部署的相關檔案,包括二進位制包和Chef cookbook,都從Artifactory下載並快取到S3儲存上。
自動化流水線的部署階段實現了“類”藍/綠的部署過程,能夠保證新叢集的部署不會影響到Artifactory的正常服務:
1. 把使用者流量切換到容災叢集;
2. 縮容現有工作叢集,僅保留幾個節點(保持和容災叢集的資料同步),不包括primary節點(由於Artifactory HA叢集實現了多活的架構,每個節點都是支援讀/寫的,所以縮容primary節點並不會影響正常服務)。
3. 基於同樣的資料庫和S3儲存,部署新的工作叢集,包括新的primary節點。
4. 當新的工作叢集透過測試後,再把使用者流量切換回新的工作叢集。
5. 之後再對容災叢集進行升級部署。
在上述部署過程中,兩個Artifactory叢集之間始終保持著資料同步,所以從使用者的角度來看,部署是無縫切換的。
部署完成之後,要立即對叢集中的各個應用服務進行檢測。Jenkins透過SSH通道訪問新的服務,並執行測試,確保Artifactory、Nginx等應用服務執行正常,相關配置檔案的內容、位置、許可權都部署正確,以及所有的網路埠都正常開通。如果檢測失敗,將會啟動回滾過程。
接下來要執行系列的測試,確保Artifactory的各個repository都工作正常,包括能夠正確拉取Docker映象。同時,也要檢測新的系統配置是否會影響製品依賴的解析,以及對不同虛擬repository的製品上傳。
最後,還要進行效能測試,確保部署後叢集效能沒有下降。目前是利用Jmeter來模擬產品級流量,儘可能的匹配峰值流量時的API呼叫頻率。常規15分鐘的負載測試作為流水線的一部分,而可選的1小時負載測試,只有大的變更時才會執行。
效能測試的難點在於流量的建模,這是因為Artifactory的全語言特性帶來的複雜性,支援多種資料包型別,及對接相應的包管理系統。透過分析Artifactory日誌,獲得了用於測試的API呼叫序列。
最後,是自動化流水線當中的回滾機制。目前實現了兩種回滾:
· In-region回滾。當部署後的測試失敗時,馬上啟動自動化回滾,刪除新的叢集,並恢復舊的叢集。
· DR容錯回滾。當工作叢集升級成功後,或監測幾天使用者流量,沒有問題的時候再更新容災叢集。如果在這幾天中發現問題,就會啟動容錯回滾:先把使用者流量切換到DR叢集,然後把工作叢集回滾到之前版本,資料庫回滾到之前的快照,再透過Artifactory Replication同步資料,最後再把流量切換回回滾後的工作叢集。
資料庫的回滾是個難題。在大版本的升級過程中,可能會有DB schema的變化,這時自動化的資料庫回滾很難實現,目前暫時還是透過手工操作來完成。
四、總結
Capital One透過自動化流水線實現Artifactory HA叢集的維護工作,獲得了很好的效果和收益,加速了釋出過程,提供了良好的可複用性和擴充套件性,也能夠啟動有效的回滾機制。
透過自動化流水線的應用也可以看出,即使如Artifactory這樣成熟的商業化產品,也需要對基礎架構和配置進行全面的測試。
最後,自動化流水線本身也是需要持續的投資和提升的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69954434/viewspace-2671420/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CapitalOne - Artifactory高可用叢集的自動化部署實踐API
- k8s叢集自動化維護PODK8S
- vivo大規模 Kubernetes 叢集自動化運維實踐運維
- vivo大規模Kubernetes叢集自動化運維實踐運維
- rac叢集日常維護命令
- hbase叢集 常用維護命令
- 如何搭建一個易於維護的 Hadoop 叢集?Hadoop
- 多雲環境下,如何實現自動化的安全防護?
- HA叢集heartbeat配置--NginxNginx
- HA分散式叢集搭建分散式
- IT 自動化:如何去實現
- HA維護要收集的日誌
- 深度 | 螞蟻金服自動化運維大規模 Kubernetes 叢集的實踐之路運維
- 如何利用python對HTTP代理進行自動化維護?PythonHTTP
- 1款開源工具,實現自動化升級K3S叢集!開源工具
- Win10如何關閉自動維護 win10系統關閉自動維護的方法Win10
- rac維護工具集系列(三)--叢集層crsctl系列
- rac維護工具集系列(四)--叢集層OCR系列
- iOS如何實現自動化打包iOS
- 如何實現辦公自動化?
- win10 自動維護如何關掉_win10自動維護怎麼關閉Win10
- 使用Artifactory叢集作為檔案共享中心
- 如何實現視覺化、智慧化、自動化的檔案採集?一文了解!視覺化
- Oracle叢集技術 | 叢集的自啟動系列(一)Oracle
- 半自動化運維之伺服器資訊維護運維伺服器
- 是否只有實現了容器化、自動編排等等才算是實現了運維自動化?運維
- RHEL5實現高可用HA叢集+GFS+EnterpriseDB(zt)
- Hadoop HA叢集簡單搭建Hadoop
- PLC維護有何難處?如何實現遠端維護?
- Openstack的HA解決方案【mysql叢集配置】MySql
- 如何實現高度自動化測試?
- RabbitMQ叢集運維實踐MQ運維
- 達夢資料庫主備實時叢集搭建和維護資料庫
- Kafka 叢集如何實現資料同步?Kafka
- 陝重汽:大規模資料庫如何實現自動化運維?資料庫運維
- Oracle自動維護任務Oracle
- 掌握 Kubernetes 故障排除:有效維護叢集的優秀實踐和工具
- 《軟體自動化測試成功之道》節選12 - 自動化測試指令碼的維護指令碼