SAS 系統管理 (102)

教學目標

初步了解 SAS 9 平台中網頁應用程式伺服器的重點概念。

重點概念

首先 SAS 9 平台中的網頁應用程式伺服器皆是基於 Pivotal tc Server 開發,所謂 tc Server 主要是基於開放源始碼 Apache Tomcat ,所謂 Tomcat 主要是由 Apache 軟體基金會下 Jakarta 專案開發的 Servlet 容器,按照 Sun Microsystems 提供的技術規範,實現了對 Servlet 和 JavaServer Page(JSP)的支援,並且實作網站應用程式伺服器的一些功能。而 Tomcat 最外層的容器稱為 Server 代表整個伺服器,其中至少包括一個 Service,主要用於具體提供服務,而 Service 主要包括兩個部分,分別為 Connector 和 Container,所謂 Connector 主要是負責網路連線和請求回應等相關事件,所謂 Container 主要是用於封裝和管理 Servlet 以及處理相關請求。請注意一個 Tomcat 只能有一個 Server,一個 Server 可以包括多個 Service,一個 Service 可以包括多個 Connector,但是只能有一個 Container。

接著 Tomcat 中的 Server 主要是由 org.apache.catalina.startup.Catalina 類別服務進行管理,所謂 Catalina 服務就是整個 Tomcat 的管理類別。其中主要有三個方法分別為 load、start 和 stop,主要用於管理整個伺服器的生命週期,load 方法主要用於根據 server.xml 檔案建立伺服器,而 start 方法則是啟動伺服器,至於 stop 方法則是停止伺服器。若以 SAS 平台中 SASServer1_1 伺服器為例,則一開始就會啟動 Catatlina 服務。

啟動 Catatlina 服務

1
2
2018-12-20 13:33:58,597 INFO  (WrapperSimpleAppMain) [org.apache.catalina.startup.Catalina] Initialization processed in 557 ms
2018-12-20 13:33:59,347 INFO (WrapperSimpleAppMain) [org.apache.catalina.core.StandardService] Starting service Catalina

再來 Tomcat 中的 Container 主要是由 Engine、Host、Context 和 Wrapper 四個子容器所組成,所謂 Engine 主要是用於管理多個站點,但是一個 Service 僅會有一個 Engine,所謂 Host 主要代表一個站點,也能夠稱為虛擬主機,所謂 Context 主要代表一個應用程式皆會對應一個 web.xml 設定檔,所謂 Wrapper 主要代表一個 Servlet。其中 Host 和 Context 的差別在於 Context 代表一個應用,預設在 webapps 資料夾下的每個目錄皆是一個應用,其中 ROOT 目錄中存放著主應用,其它目錄存放著子應用。若以 SAS 平台中 SASServer1_1 伺服器為例,則會先啟動 Engine 容器,之後依序部署子應用設定描述檔 (XML 檔案),此外部署過程中會建立 SecureRandom 實體以利產生 Session ID,但在 Windows 平台主要預設會以 SHA1PRNG 演算法為主,所以不影響效能。

啟動 Engine 容器

1
2018-12-20 13:33:59,347 INFO  (WrapperSimpleAppMain) [org.apache.catalina.core.StandardEngine] Starting Servlet Engine: Pivotal tc Runtime 3.0.0.RELEASE/7.0.55.A.RELEASE

部署 XXX 子應用設定

1
2
2018-12-20 13:33:59,347 INFO  (localhost-startStop-4) [org.apache.catalina.startup.HostConfig] Deploying configuration descriptor D:\SAS\Config\Lev1\Web\WebAppServer\SASServer1_1\conf\Catalina\localhost\XXX.xml
2018-12-20 13:34:21,172 INFO (localhost-startStop-2) [org.apache.catalina.startup.HostConfig] Deployment of configuration descriptor D:\SAS\Config\Lev1\Web\WebAppServer\SASServer1_1\conf\Catalina\localhost\XXX.xml has finished in 21,825 ms

建立 SecureRandom 實體

1
[org.apache.catalina.util.SessionIdGenerator] Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [171] milliseconds.

最後當所有子應用皆部署完成之後,就會啟動 Tomcat 伺服器, 若以 SAS 平台中 SASServer1_1 伺服器為例,在實務上客戶端啟動時間通常需要 10 分鐘至 15 分鐘,主要花費的時間皆在於載入子應用設定為主,若子應用設定越多,則啟動時間越慢,至於是否能夠優化啟動時間,就目前測試若採用 m5.xlarge 等級的 AWS 雲端主機 (4 個 vCPU 、 16GB 記憶體和最多 3,500Mbps 的 EBS 頻寬),在不調整硬碟每秒輸入/輸出 (IOPS) 的情況下就能夠將啟動時間縮短為 3 分鐘至 5 分鐘。

啟動 Tomcat 伺服器

1
2
3
2018-12-20 13:36:20,560 INFO  (localhost-startStop-5) [org.apache.catalina.startup.HostConfig] Deploying web application directory D:\SAS\Config\Lev1\Web\WebAppServer\SASServer1_1\webapps\ROOT
2018-12-20 13:36:20,888 INFO (localhost-startStop-5) [org.apache.catalina.startup.HostConfig] Deployment of web application directory D:\SAS\Config\Lev1\Web\WebAppServer\SASServer1_1\webapps\ROOT has finished in 328 ms
2018-12-20 13:36:20,914 INFO (WrapperSimpleAppMain) [org.apache.catalina.startup.Catalina] Server startup in 142317 ms

總結 SAS 平台中的網站應用程式伺服器主要以 Tomcat 伺服器為基礎進行開發,因此深入了解 Tomcat 伺服器核心原理將有助於平台開發與維運,此外使用者主要會透過 Apache HTTP Server 網站伺服器連線至不同的網站應用程式伺服器,此時必須要注意網站伺服器設定檔中的「stickysession」參數值是否與網站應用程式伺服器設定檔「context.xml」中的「sessionCookieName」參數值一致,至於為何要一致細節之後再分享啦。

相關資源

SAS 系統管理 (101)

教學目標

初步了解 SAS 9 平台設定 SAS WORK 暫存檔案儲存空間的重點概念。

重點概念

首先 SAS 在工作階段執行期間將會需要暫存的磁碟空間,也就是所謂的 SAS WORK,預設 SAS 會儲存 SAS 暫存檔案至暫存的磁碟空間中,而暫存檔案主要則是當 SAS 階段結束之後將會直接被刪除,若沒有被正常刪除的檔案,則建議透過 SAS 官方所提供 Cleanwork 工具進行清理。

接著我們要如何修改暫存的磁碟空間呢?其實只要修改 sasv9.cfg 設定檔即可,我們僅需要加入以下參數。

修改 sasv9.cfg 設定檔

1
-work /disk1/directory

再來我們要如何設定多個暫存的磁碟空間呢?主要有兩種類型,分別為隨機 (Random) 和空間 (Space),隨機主要就是分散讀寫至不同的磁碟空間,空間主要就是選取最大的磁碟空間,但是設定則需要先建立 /sasinfo/workfiles 檔案,接著再修改 sasv9.cfg 設定檔即可

隨機 (Random)

新增 /sasinfo/workfiles 設定檔

1
2
3
4
/disk1/directory
/disk2/directory
/disk3/directory
method=random

修改 sasv9.cfg 設定檔

1
-work /sasinfo/workfiles

空間 (Space)

新增 /sasinfo/workfiles 設定檔

1
2
3
4
/disk1/directory
/disk2/directory
/disk3/directory
method=space

修改 sasv9.cfg 設定檔

1
-work /sasinfo/workfiles

最後我們可以先從 SAS Work 磁碟空間開始進行 SAS 平台的效能優化,當 SAS Work 磁碟空間讀寫效能越快,則 SAS 平台執行效能相對更佳。此外我們更能夠透過以下 SAS 程式查看其它與效能相關的參數設定,至於要如何更進階優化方式之後再分享啦。

查看效能相關設定選項

1
2
proc options group=performance; 
run;

相關資源

SAS 系統管理 (100)

教學目標

初步了解 SAS 9 平台設定 SAS/ACCESS Interface to Hadoop 的重點概念。

重點概念

首先當使用者需要透過 SAS Enterprise Guide 存取 Hadoop 平台中的資料時,通常會有 ODBC 和 SAS/ACCESS 兩種方式,建議採用 SAS/ACCESS 的方式,以利進行更快速的存取。當我們安裝完成 SAS/ACCESS Interface to Hadoop 之後,則需要透過 SAS 部署管理員工具取得存取 Hadoop 平台所需要的 JAR 檔和設定檔至 SAS 客戶端機器,請注意若是伺服器版本,則 SAS 伺服器對於 Hadoop 平台而言就是 SAS 客戶端機器,我們必須以系統管理員帳號執行 SAS 部署管理員工具,點選「Configure Hadoop Client Files」進行設定,若以 Cloudera 的 Hadoop 平台為例,則我們主要將會連線至 7180 連接埠的 Hadoop 叢集管理伺服器資訊,並且輸入 Hadoop 叢集管理伺服器的管理員帳號和密碼。

接著若是輸入 Hadoop 叢集管理伺服器的管理員帳號和密碼正確無誤,則會自動取得 Hive、Impala、Oozie 服務的主機名稱,請注意此處每個服務僅能夠有一個主機名稱,若有多個則會出現錯誤,無法進行下一步操作。此外我們還需要以 SSH 連線至 Hadoop 叢集伺服器,主要有兩種方式進行驗證,分別為私鑰和密碼,一般來說,就是 root 帳號和密碼,請注意 Hadoop 叢集伺服器必須先啟用允許密碼登入 SSH 連線,才能夠使用密碼方式進行驗證,以及我們還需要設定 SAS 專用的 Hadoop 客戶端 JAR 檔和設定檔目錄,請注意此資料夾是設定至 SAS 客戶端機器中。

再來我們可以選擇是否要執行驗證的步驟,基本上就是在「Run Validation」步驟中勾選「SAS/ACCESS Interface to Hadoop」預設會進行驗證,主要輸入 Hive 相關連線資訊,包括 Schema、使用者和密碼,請注意若是有錯誤發生可以查看 Linux 的設定資料夾「/your-home/.SASAppData/SASDeploymentWizard」或 Windows 的設定 Log 檔資料夾「C:\users\your-account\AppData\Local\SASDeploymentWizard」的記錄檔,以利找出發生錯誤的原因,我們設定時就曾經遇過授權碼不符合或 Hive 帳號沒有權限存取 Schema 導致驗證錯誤。

最後當設定完成「SAS/ACCESS Interface to Hadoop」設定之後,我們就能夠透過客戶端的 SAS Enterprise Guide 工具連線至 SAS 伺服器,並且執行以下 SAS 程式進行 Hadoop 函式庫宣告,以利再次進行 SAS 伺服器存取 Hadoop 平台的測試與驗證。

1
libname hdp hadoop server=hxpduped port=10000 schema=default  user=myusr1 password=mypwd1;

相關資源

SAS 系統管理 (99)

教學目標

初步了解 SAS 9 平台若採用叢集 Metadata 伺服器備份還原的重點概念。

重點概念

首先我們針對 SAS 平台針對任何變更時,則建議先備份 Metadata 中繼資料,以利當發生問題時還原 Metadata 中繼資料,然而若我們部署 SAS 平台時採用叢集 Metadata 伺服器,則會發生無法還原的錯誤訊息「A recovery operation cannot be performed on a running cluster, but only on standalone servers. Bring up a server with startNoCluster on which to run the recovery」。

接著我們要如何解決此問題呢?主要重點在於我們無法使用 SAS Management Console 工具還原以叢集模式執行的 Metadata 伺服器,而是我們必須還原叢集中的一個節點,還原之後當重新啟動叢集時,還原的資料就會自動更新至其它的節點。所以我們必須想辦法不以叢集模式執行 Metadata 伺服器,根據官方文件的解決步驟在於以下指令以非叢集模式執行的 Metadata 伺服器,再進行還原相關步驟。

Windows 平台

1
> metadataserver.bat -startNoCluster

Linux 平台

1
# metadataserver.sh -startNoCluster

再來我們透過執行指令以非叢集模式啟動的 Metadata 伺服器時必須注意三件事情,分別為:

  1. 必須先停止所有叢集 Metadata 伺服器節點之後,再以非叢集模式啟動的 Metadata 伺服器。
  2. 必須確認以啟動 Metadata 伺服器服務的網域帳號在命令提示字元或 PowerShell 執行啟動指令。
  3. 建議將啟動 Metadata 伺服器服務的網域帳號加入至本機管理者群組,以及設定擁有「\Lev1\SASMeta\MetadataServer」完全控制的權限。

最後我們總結遵循以下步驟就能夠針對叢集 Metadata 伺服器進行 Metadata 中繼資料的還原,分別為:

  1. 停止叢集中所有 Metadata 伺服器的節點。
  2. 以非叢集模式啟動的 Metadata 伺服器。
  3. 使用 SAS Management Console 工具連接之後進行 Metadata 中繼資料的還原。
  4. 以叢集模式重新啟動 Metadata 伺服器主要節點。
  5. 啟動叢集 Metadata 伺服器中的其他節點,此時主要節點將會更新 Metadata 中繼資料至其他節點。

相關資源

SAS 系統管理 (98)

教學目標

初步了解 SAS 9 與 SAS Viya 有關 Apache HTTP Server 效能參數設定的重點概念。

重點概念

首先 SAS 9 平台或 SAS Viya 平台皆採用 Apache HTTP Server 網站伺服器,當我們完成 SAS 9 平台的安裝與設定之後,根據不同作業系統 Apache HTTP Server 網站伺服器將會採用不同的多執行緒處理模組 (Multi-Processing Module,MPM)。其中 Windows 作業系統主要是採用 mpm_winnt_module 多執行緒處理模組,而 Linux 作業系統主要是採用 mpm_worker_module 多執行緒模組為主。主要會根據伺服器大小選項自動設定不同的參數值,主要有五個重要的參數設定,分別為:

  1. MaxClients:設定同時處理最大請求數。(對於效能影響最大的參數)
  2. ServerLimit:設定占用系統伺服器數的限制。
  3. ThreadsPerChild:設定每個程序建立的執行緒數。
  4. ThreadLimit:設定占用系統執行緒數的限制。(對於效能影響最大的參數)
  5. MaxKeepAliveRequests:設定持續連線的最大數。

請注意 MaxClients <= ThreadsPerChild × ServerLimit ,MaxClients 必須為 ThreadsPerChild 的整數倍,否則 Apache 將會自動調整至一個相對應的值,以及 ThreadLimit <= ThreadsPerChild,當在 Windows 作業系統中主要設定就是 ThreadLimit 而非 MaxClients,簡單來說在 Windows 平台僅需設定以下參數值,理應就能夠同時服務最多 400 個使用者的請求。

1
2
3
4
5
<IfModule mpm_winnt_module>
ThreadLimit 3072
ThreadsPerChild 3072
MaxConnectionsPerChild 0
</IfModule>

接著 Apache HTTP Server 主要有多種多執行緒處理模組 (Multi-Processing Module,MPM),請注意 Windows 作業系統僅適用 Winnt MPM,而 Linux 作業系統才適用以下三種多執行緒處理模組,分別為:

模組名稱 功能特性 支援版本
prefork 一個程序回應一個請求。 2.2、2.4
worker 一個程序產生多個執行緒,一個執行緒回應一個請求。 2.2、2.4
event 一個程序產生多個執行緒,一個執行緒回應多個請求。 2.4

所謂 Prefork MPM 主要是在啟動時,就會預先 fork 一些子程序,然後等待請求進來,以利減少頻繁建立和移除程序。其中每個子程序只能有一個執行緒,並且在一個時間點內只能夠處理一個請求。優點在於成熟穩定兼容所有模組,以及不需要擔心執行緒的安全問題,缺點則是一個程序會占用更多的系統資源耗用更多的記憶體,同時不適合處理高並行的請求,因為所有請求皆會等待可用的程序才會被處理,否則僅能排隊等待。

1
2
3
4
5
6
7
<IfModule mpm_prefork_module>
StartServers 10
MinSpareServers 25
MaxSpareServers 75
MaxRequestWorkers 1024
MaxConnectionsPerChild 0
</IfModule>

所謂 Worker MPM 主要是使用多個程序和多個執行緒的混合模式,此外會會先預載幾個子程序,然後每個子程序皆會建建一些執行緒,並且包括一個監聽執行緒。每個請求皆會被分配至一個執行緒中進行服務。此外因為執行緒通常會共享程序的記憶體空間,所以記體空間佔用較少,因此在高平行的情境下,將會比 Prefork 有更多的可用執行緒。優點在於占用更少的記憶體,高並行下表現更好,缺點則是必須考慮執行緒的安全問題,因為共享記憶體。

1
2
3
4
5
6
7
8
9
<IfModule mpm_worker_module>
ServerLimit 32
StartServers 10
MaxRequestWorkers 1024
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 32
MaxConnectionsPerChild 0
</IfModule>

所謂 Event MPM 主要是解決在 Keep-alive 情境下長期被占用執行緒資源浪費的問題,因此會有一個專門的執行緒來管理這些 Keep-alive 類型的執行緒,當請求進來時就會傳遞給服務執行緒,當執行完畢之後,就會允許釋放, 以利增強高並發情境下的請求處理能力。

1
2
3
4
5
6
7
8
 <IfModule mpm_event_module>
StartServers 10
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 32
MaxRequestWorkers 1024
MaxConnectionsPerChild 0
</IfModule>

再來這三種穩定的多執行緒處理模組效能比較為 Prefork < Event < Worker,所以若我們要有高效能,首先就需要先採用 Worker MPM 多執行緒處理模組。此外除了 MaxClients、ServerLimit、ThreadsPerChild、ThreadLimit 和 MaxKeepAliveRequests 效能基本參數設定之外,還有以下幾個重要效能設定參數,分別為:

  1. StartServers:設定最初建立子程序數。
  2. MinSpareServers:設定最小空閒程序數,若空閒的程序小於設定值,則會自動建立程序,若伺服器平行負載較大時建議加大。
  3. MaxSpareServers:設定最大空閒程序數,若空閒的程序大於設定值,則會自動刪除程序,若伺服器平行負載較大時建議加大。
  4. MaxRequestWorkers:設定允許同時最大請求數,任何超過限制的請求將會等待排隊,這就是當系統資源還剩下很多,但 HTTP 存取卻很慢的主要原因。
  5. MaxConnectionsPerChild:設定每個子程序可以處理的請求數,設定為 0 代表子程序永遠不會被刪除,設定為 1 代表可以防止意外的記憶體外洩,設定為 2 代表伺服器負載下降時會自動減少子程序數。

最後目前若是 SAS 9.4 平台則預設安裝與設定的 Apache HTTP Server 的版本為 2.2,因此我們則需要手動安裝 Hot Fix 升級 2.2 版本至 2.4 版本,除了滿足企業的資訊安全政策和解決弱掃問題之外 (OpenSSL 資安議題),理應更能夠改善伺服器的效能,以利減少記憶體的利用,增強平行處理的能力,並且支援非同步的輸入和輸出。安裝 Hot Fix 時請注意三件事,分別為:

  1. 請確認正確的 SAS 平台的版本和作業系統版本再下載對應的 Hot Fix 檔案。
    (若是 Windows 作業系統請下載 VC++ libraries 函式庫。)
  2. 在套用 Hot Fix 之前最佳實務請先進行系統的備份。
    (尤其是修改過的 sas.conf 設定檔,當然部署工具套用 Hot Fix 時也會自動建立 WebServerBackup 資料夾儲存舊有的所有檔案。)
  3. 在套用 Hot Fix 之前最佳實務請針對設定進行網站安全和效能最佳化的設定。
    (尤其是 MaxClients、ServerLimit、ThreadsPerChild、ThreadLimit 和 MaxKeepAliveRequests 效能基本參數設定。)

(註:若是在 Windows 作業系統中套用 Hot Fix 完成之後我們要如何確認已經更新 2.4 版本完成,則主要可以參考 Windows 作業系統中的「SAS[Config-Lev1]httpd-WebServer」服務的描述是否已經更新為「Apache/2.4.27 (Win64) PivotalWebServer/6.2.4 OpenSSL/1.0.2l-fips mod_bmx/0.9.6」即可。)

相關資源