Leo Yeh's Blog

SAS Viya (77)

教學目標

初步了解 SAS Viya 中 CAS Controller 故障轉移的基本概念。

重點概念

首先在 SAS Viya 平台中我們能夠設定分散式處理的架構,其中一台機器會被指定為 CAS Controller,而客戶端應用程式主要會與 CAS Controller 進行通訊,同時 CAS Controller 將會協調多個 CAS Worker 節點執行分散式處理,每個 CAS Worker 節點主要會在記憶體中執行資料分析,若與 CAS Worker 節點的通訊遺失,則 CAS Worker 節點將會使用資料的其餘的副本來完成資料分析。此外當 CAS Controller 發生故障時,CAS Controller 故障轉移的機制主要會透過 CAS Backup Controller 為分散式處理的架構提供連續性的,並且在某些情況下,客戶端也能夠透明地進行故障轉移,而無需任何指示連接已切換至 CAS Backup Controller,以及全域範圍的記憶體資料表仍然加載,不受故障轉移的影響,但是對於故障轉移時不在記憶體中的資料可能會受影響。

接著 SAS Viya 是如何檢測 CAS Controller 已經發生故障,並且進行故障轉移,其主要是由 CAS Controller 與 CAS Backup Controller 持續同步,其作法為 CAS Controller 會將 Heartbeat 訊息發佈給 CAS Backup Controller 和 CAS Worker,當在 CAS Backup Controller 的 Heartbeat 訊息超過特定時間未從 CAS Controller 接收到 Heartbeat 訊息時就會進行 CAS Controller 進行故障轉移,逾時參數預設值為 120 秒,我們能夠修改 env.CAS_HEARTBEAT_LOST_TIMEOUT 設定逾時參數,較小的逾時將能夠更快地進行伺服器的故障轉移,而較大的逾時則能夠容忍可能異常過載的伺服器,因此在 SAS Viya 中主要是統一由 CAS Controller 發送 Heartbeat 訊息至所有節點,而非所有節點向 CAS Controller 發送 Heartbeat 訊息。

再來故障轉移之後大部份的 SAS Viya 應用程式皆使用二進制協議,這些應用程式主要是從 Consul 中查找 Controller 的伺服器名稱,而 CAS Backup Controller 服務器會在啟動時在 Consul 中註冊,並且在停止時註銷,而最重要的是當 CAS Controller 進行故障轉移時,Backup Controller 將會使用本身的伺服器名稱更新 Consul 中的 CAS Controller 伺服器位址,因此 SAS Viya 應用程式主要連接至新地址的 CAS Controller ,在故障轉移期間的幾分鐘內,執行 CAS 操作的應用程式可能會無回應,同時已經連線 SAS Viya 應用程式的使用者可能會需要對其 Session 進行調整,像是關閉瀏覽器再次重新登入進行使用 SAS Viya 應用程式。此外 CAS 監控伺服器監控主要提供的 REST API,其主要依賴 Apache HTTP 代理將客戶端從故障的 CAS Controller 重新導向至 CAS Backup Controller,在故障轉移期間,客戶端和 CAS 監控伺服器可能會出現錯誤或無回應,但是當故障轉移完成,並且 Apache HTTP 代理已切換之後,就能夠恢復使用 REST API 和 HTTP 進行連接。更進一步了解 CAS Controller 和 CAS Backup Controller 皆有啟動 cas-shared-default 服務,但是一開始卻僅有 CAS Controller 啟動 cas-shared-default-http 服務,至於 CAS Backup Controller 僅有當 CAS Controller 發生故障轉移之後才會啟動 cas-shared-default-http 服務。

最後當 CAS Controller 啟動時,同時也會啟動 CAS Backup Controller,而當 CAS Backup Controller 在 CAS Controller 繼續執行時發生故障或關閉,則不影響 CAS Controller 繼續執行,但是卻已經沒有故障轉移的機制,因此我們必須定期透過 CAS 監控伺服器查看 CAS Backup Controller 是否正常運作,以利確保有故障轉移的機制。此外請注意當 CAS Controller 在故障轉移狀態下執行時,不要重新啟動故障的 CAS Controller,而是必須透過 SAS Environment Manager 提升為超級使用者之後再停止 CAS Controller ,當停止之後執行修復或更換發生故障的 CAS Controller 所需的任何步驟,並且從 CAS Backup Controller 的 permstore 目錄恢復至 CAS Controller,所謂 permstore 主要是儲存 CASLIBS 和存取控制的相關資訊,而當恢復 permstore 之後請先重新啟動所有 CAS Worker,當所有 CAS Worker 重新啟動完成之後才能夠啟動 CAS Controller,並且透過「/etc/init.d/sas-viya-cascontroller-default status」確認 CAS Controller 是否已經正常啟動。

相關資源

⬅️ Go back