天天看點

EDAS釋出單工作原理及問題排查

引言

使用者在使用EDAS進行應用變更的時候,一定會接觸到釋出單功能。釋出單以圖形化的方式展現了應用部署、啟動、停止和擴縮容等操作的具體過程,并能檢視釋出腳本的執行日志,以及出錯資訊。對于分批進行的變更,使用者可以看到每一批變更的具體資訊,對于手動分批的變更,還可以在釋出單界面裡進行“繼續”操作。如果需要中途停止變更,可以使用“終止變更”功能強行中斷正在進行的操作,進而減少因誤操作而造成的損失。

EDAS釋出單工作原理及問題排查

圖1:EDAS釋出單界面展示

但釋出單到底是如何工作的呢?為什麼EDAS控制台上的操作可以影響ECS上的應用程序?這些釋出單腳本到底是什麼?如果釋出單裡出現了異常,有哪些排查的方法呢?本文将為您一一進行揭曉。

釋出單的工作原理

EDAS釋出單工作原理及問題排查

圖2:釋出單工作原理圖

(1)當使用者送出應用變更請求以後,會先經過Gateway進行鑒權,然後傳遞給EAM服務。

(2)EAM服務會将此變更請求生成為一條釋出單記錄,并存儲在Redis緩存中。

(3)AgentServer服務中運作有一個定時任務,會定時從Redis緩存中拉取釋出單。

(4)EAM服務将下發釋出單任務到運作在ECS上的StarAgent服務。

(5)釋出單在ECS上執行并回傳日志資料。

這裡使用者可能會有疑問,為什麼EAM服務将釋出單放入Redis緩存之後,AgentServer拉取到的釋出單任務又返還給EAM來進行下發,難道不是多此一舉嗎?這裡其實Redis不僅僅是緩存,而是充當了一個消息隊列。消息隊列的能力包括異步處理和削峰填谷,當有大量釋出單請求進入系統的時候,EAM會先将資料存儲在Redis中,此時釋出單送出操作就結束了。但是釋出單的真正運作是由下遊的AgentServer定時拉取後返還給EAM,進而實作了異步執行的效果。另外因為每個釋出單的時間長短不一,但通常都是分鐘級,這對于請求響應式的線上服務而言太過漫長,會導緻線程池被占滿,進而影響系統為後續請求提供服務。引入消息隊列以後當有大量請求進入系統的時候會先緩存到隊列中,再由系統慢慢消化處理,不至于讓系統在高峰期失去服務能力。是以看上去多此一舉的設計,在大規模分布式系統中起到了非常重要的作用。

各元件之間的互動時序圖如下:

EDAS釋出單工作原理及問題排查

圖3:各元件互動時序圖

釋出單的結構

如圖1所示,釋出單模型具有一定的結構,從圖中大緻可以看出釋出單有三個層級,如下圖所示:

EDAS釋出單工作原理及問題排查

圖4:釋出單層級圖

一個釋出單由若幹條流水線組成,每條流水線又分為幾個階段,最後一個階段下面包含一些任務,由此構成了釋出單的結構模型。其中Event和Listener是釋出單的通知機制,當一個任務結束以後,其通過事件報告自己的完成狀态,再由其他元件通過Listener監聽該事件進行一些業務邏輯上的後續處理。一個釋出單的樣例描述檔案如下:

EDAS釋出單工作原理及問題排查

圖5:釋出單樣例描述檔案

可以看出該釋出單有一條流水線(edas-app-deploy)和四個階段(startPipeline、slbOffline、vipserverOfflineStage和deployApp),而每個階段下又包含數量不等的任務,比如deployApp階段包含hsfOffline、preStoreInstance和stopInstance等三個任務。階段和任務都包含一些描述屬性,例如任務之間是串行還是并行執行,每個任務的失敗重試次數,以及是否忽略錯誤等等。

釋出單問題排查

EDAS釋出單工作原理及問題排查

圖6:釋出單問題排查流程

①service類型的任務,主要是涉及外部服務的調用,service類型的任務有(括号中是任務對應的名稱,在日志中展示的是括号中的名稱):

  • Teinge上線/下線(tengineOnline/tengineOffline)
  • Tegine配置更新(updateTengineConfig)
  • SLB上線/下線、SLB設定權重(slbOnline/slbOffline、reopenSLBInstance/muteSLBInstance)

②agent類型任務,需要通過staragent把指令下發到使用者ECS上執行,主要有(括号中是任務對應的名稱,在日志中展示的是括号中的名稱):

  • 下載下傳/安裝Tomcat(pullTomcatPack/)
  • 下載下傳應用程式包(pullWar)
  • 應用執行個體啟動/停止(startInstance/stopInstance)
  • Teigine啟動/停止(startTengineInstance/stopTengineInstance)
  • 下載下傳鏡像(pullImage)
  • URL/端口健康檢查(healthCheckWithURL/healthCheckWithPort)
  • 删除應用執行個體/Tegine執行個體資料(deleteInstanceData/deleteTengineInstanceData)
  • HSF服務優雅下線(hsfOffline)
  • 更新Tomcat配置(updateTomcatConfig)
  • 更新指令執行所需的python腳本(updateTaskScript)

基本排查步驟

(1)當應用執行個體生命周期變更操作出現問題,首先通過變更清單,進入釋出單詳情,檢視具體執行失敗的任務日志,根據錯誤具體資訊,來定位問題。

(2)Agent類型任務,可以在使用者ECS機器上檢視/home/admin/edas/logs/tasks/{taskId},用taskId标示(這些日志可以在控制台釋出單詳情頁,具體任務“檢視日志”功能中可以看到),也可以檢視ECS上的日志/home/admin/edas/script/logs/edas.action.trace;也可以通過查詢資料庫,查詢SQL: select cmd from cmd_record where cid = ‘任務Id’,任務id可以在釋出單詳情頁面具體任務執行日志的最上方檢視。

tip:指令執行手動執行時不要最後的-q、–async等,通常以bash開頭。

(3)如果指令在機器上執行沒有失敗,則綜合分析agent-server、edas-admin、edas-console的日志,定位錯誤原因。

(4)service類型的任務,例如Tegine上下線、Tegine狀态更新、SLB上下線、SLB權重設定等任務,需要在EDAS服務元件上檢視相關日志。

  • Tegine任務指令下發在EDAS-AGENT-SERVER/home/admin/edas/logs/changeorder.log,或者/home/admin/edas/logs/agent-server.log中查詢,回調日志在edas-admin中/home/admin/edas/logs/admin.log或者/home/admin/edas/logs/tengine.log中查詢,參考tegine流程管控流程來定位問題。
  • SLB日志在EDAS-AGENT-SERVER/home/admin/edas/logs/slb.log,或者/home/admin/edas/logs/agent-server.log中查詢。
  • 其他服務類型的日志可以在/home/admin/edas/logs/agent-server.log,或者/home/admin/edas/logs/changeorder.log中查詢。

常見問題解決思路

  • 指令通道不通

這個直接可以通過釋出單詳情頁中任務執行的日志來定位問題:一般任務執行日志有“please check if service is available”字樣,可以在機器上執行pkill -9 staragent && /home/staragent/bin/agent.sh start,然後讓使用者重置應用執行個體。

  • 普通應用使用者ECS目錄或檔案權限為root,無法操作相關檔案

一般在任務執行日志,或者edas.action.trace中會有顯示權限不夠的資訊,可以在機器上執行chown admin:admin {要修改的目錄或檔案},然後重試。

  • Tegine啟動、停止失敗

大多是一些前置操作失敗或者目錄權限不正确造成的,通常可以通過重置解決。

  • exit XXX 常見錯誤原因

exit 3: 磁盤滿(du -h)

exit 5: 域名解析失敗(ping -c 1 $domain 測試)

exit 8: 下載下傳腳本或WAR包失敗,通常為4XX/5XX(curl測試)

  • Tegine上下線、狀态更新失敗

檢視與tegine管控互動的日志,定位問題,多起是因為Tegine上線的操作失敗,造成後續對Tegine的操作失敗;可以通過重置解決。

  • SLB上下線失敗、權重設定失敗

通過查詢EDAS-AGENT-SERVER/home/admin/edas/logs/slb.log,或者/home/admin/edas/logs/agent-server.log日志定位。

作者:唐睿

阿裡雲智能基礎産品團隊産品專家

阿裡雲智能中間件和容器團隊産品專家,15年企業級分布式架構及業務研發和産品經驗,目前主要負責阿裡雲中間件PaaS領域的産品設計、使用者洞察及技術布道等工作。打造更好、更易用、更滿足使用者需要的阿裡雲産品。

我們是阿裡雲智能全球技術服務-SRE團隊,我們緻力成為一個以技術為基礎、面向服務、保障業務系統高可用的工程師團隊;提供專業、體系化的SRE服務,幫助廣大客戶更好地使用雲、基于雲建構更加穩定可靠的業務系統,提升業務穩定性。我們期望能夠分享更多幫助企業客戶上雲、用好雲,讓客戶雲上業務運作更加穩定可靠的技術,您可用釘釘掃描下方二維碼,加入阿裡雲SRE技術學院釘釘圈子,和更多雲上人交流關于雲平台的那些事。

EDAS釋出單工作原理及問題排查