Amazon Redshift 是快速、廣受歡迎的完全託管式雲資料倉儲,允許您使用標準 SQL 處理資料倉儲、運營資料庫和資料湖中的 EB 級資料。它提供不同的節點型別以適應各種工作負載;您可以根據需求從 RA3、DC2 和 DS2 中選擇。RA3 是最新的例項型別,它允許您獨立擴充套件計算和儲存並支付其費用,還支援跨叢集資料共享和跨可用區叢集重新定位等高階功能。有關升級時節點計數和型別建議的更多資訊,請參閱升級到 RA3 節點型別。
博文藉助帶託管儲存的新型 Amazon Redshift RA3 節點擴充套件雲資料倉儲和降低成本與Amazon Redshift 基準測試:比較 RA3 與 DS2 例項型別詳細介紹了從 DS2 遷移到 RA3 的優勢。在瞭解了 RA3 的優勢之後,我們的許多現有 DC2 客戶在成功評估其效能後已遷移到 RA3。但是,此評估主要通過手動完成,這需要您複製工作負載以評估在新節點上的效能。
您可以使用 Simple Replay 工具進行假設分析並評估工作負載在不同場景中的效能。例如,您可以使用該工具在 RA3 等新例項型別上對實際工作負載進行基準測試、評估新功能或評估不同的叢集配置。它還包括增強了對使用 COPY 和 UNLOAD 語句重播資料攝入和匯出管道的支援。要開始和重播您的工作負載,請從下載該工具。
在本文中,我們將介紹有關通過 Amazon Redshift Simple Replay 實用程式自動評估 Amazon Redshift RA3 例項的步驟。如果您使用舊一代 DS2 和 DC2 節點型別在 Amazon Redshift 中執行生產工作負載,則可以使用此解決方案自動從源生產叢集中提取工作負載日誌並在隔離的環境中重播這些日誌,以便您直接無縫地對比這兩個 Amazon Redshift 叢集。
先決條件
此解決方案使用 Amazon CloudFormation 自動預置您亞馬遜雲科技賬戶中的所有必需資源。有關詳情,請參閱 Amazon CloudFormation 使用入門。
作為此解決方案的先決條件,您需要完成以下步驟。您可能需要擁有亞馬遜雲科技賬戶的管理員訪問許可權,才能執行這些步驟以及隨後部署此解決方案。
- 在 Amazon Redshift 控制檯的源 Amazon Redshift 叢集中啟用審計日誌記錄,然後指定 Amazon Simple Storage Service (Amazon S3)儲存桶位置以儲存日誌檔案。有關詳情,請參閱資料庫審計日誌記錄。
- 將引數組 enable_user_activity_logging 更改為 true。有關詳情,請參閱使用控制檯管理引數組。
- 重新啟動叢集。
- 在計劃部署 Amazon CloudFormation 模板的亞馬遜雲科技賬戶中建立 Amazon Elastic Compute Cloud (Amazon EC2) 金鑰對。有關詳情,請參閱使用 Amazon EC2 建立金鑰對。
解決方案概覽
該解決方案包括兩個 Amazon CloudFormation 模板,用於執行工作負載的提取和重播。您可以在託管 Amazon Redshift 叢集的同一賬戶中部署這兩個模板,這是我們推薦的方法。或者,您也可以在生產賬戶執行提取模板,在獨立的開發賬戶執行重播模板來執行此評估,如下圖所示。
該流程使用 Amazon Step Functions 和 Amazon Lambda 來編排端到端工作流以進行提取和重播。第一個模板在源賬戶中部署提取應用程式。這將從存放Amazon Redshift審計日誌的 Amazon S3 儲存桶中提取審計日誌以進行記錄。它將其儲存在為重播-提取流程建立的新 Amazon S3 儲存桶中。它還會建立您叢集的手動快照,並授權重播賬戶恢復快照。
第二個模板將重播應用程式部署在開發賬戶中(如果您選擇不在源賬戶中執行重播)。它使用來自提取應用程式的 Amazon S3 檔案,並生成重播的自動評估摘要。
端到端工作流:提取流程
提取流程在您輸入要執行此流程的時間間隔時開始。它自動從源叢集中提取審計日誌,並將這些日誌儲存在該賬戶的新 Amazon S3 儲存桶中。它還會部署大小為 m5.large 的 Amazon EC2 例項(安裝有 Simple Replay 實用程式)。下圖展示了該解決方案架構。
下圖顯示了用於提取流程的 Amazon Step Functions 狀態機。
狀態機執行以下步驟,將源叢集後設資料提取到提取 Amazon S3 儲存桶中:
- 等待源叢集處於可用狀態。
- 使用與叢集識別符號字串連線的識別符號 ra3-migration-evaluation-snapshot-,建立源叢集的手動快照。
- 將快照授權給您計劃執行重播流程的目標賬戶。
- 將源叢集配置引數上傳到提取 Amazon S3 儲存桶。
- 執行提取流程以從源叢集獲取日誌並將其放入提取 Amazon S3 儲存桶中。
提取 Amazon CloudFormation 模板自動啟動提取流程的第一次迭代,但您可以提交帶有 start_time 和 end_time 輸入引數的狀態機來隨時重新執行該流程,如以下程式碼所示:
{"input": {"start_time": "<>", "end_time": "<>"}}
將 start_date 和 end_date 的值替換為 ISO-8601 格式的實際日期(例如,2021-03-05T12:30:00+00:00)。以下螢幕截圖顯示了狀態機執行輸入。
您需要在託管源叢集的同一賬戶中為提取流程部署 Amazon CloudFormation 模板。此模板要求您提供以下引數:
- SourceRedshiftClusterEndpoint — 非 RA3 源叢集端點,包括埠號和資料庫名稱。
- AccountIdForReplay — 如果您計劃在其他賬戶中執行重播流程,請在此引數中輸入 12 位亞馬遜雲科技賬戶 ID。如果您在同一賬戶中執行提取和重播流程,請輸入 N/A。
- SimpleReplayStartTime — 您想從源叢集執行提取流程的第一次迭代的開始日期,採用 ISO-8601 格式(例如,2021-01-20T21:41:16+00:00)。您可以稍後在提取狀態機的輸入 JSON 中更改它。
- SimpleReplayEndTime — 您希望從源叢集中提取並在目標 RA3 叢集中重播的結束日期和時間,採用 ISO-8601 格式。您可以稍後在提取狀態機的輸入 JSON 中更改它。請確保開始時間和結束時間之間相差不超過 24 小時。
- ExtractSystemTables — 這是可選步驟(前提是您要提取源叢集系統表以供參考)。我們建議將此引數設定為 No,因為它會將 Amazon Identity and Access Management (IAM) 角色新增到源叢集中,以便從源叢集UNLOAD統表。
- EndUserIamRoleName — 可能在執行提取-重播評估的終端使用者的現有 Amazon IAM 角色名稱。您可以使用此引數,允許非管理員使用者在沒有對亞馬遜雲科技資源的任何其他許可權情況下執行提取-重播狀態機。如果您不想提供任何終端使用者許可權,請輸入 N/A。
- EC2InstanceAMI — 基於 Amazon Linux 2 的 Amazon EC2 例項的 Amazon AMI。我們建議保留此引數的預設 AMI,除非合規性要求需要它。
部署模板後,導航到模板的輸出選項卡,其中列出了重播流程部署所需的一些相關引數。
端到端工作流:重播流程
此解決方案的第二部分是,使用 Amazon CloudFormation 模板在執行提取流程的同一賬戶或同一區域的其他賬戶中部署重播流程。
此流程預置兩個 Amazon Redshift 叢集:一個為副本叢集(配置與源叢集完全相同),另一個為具有 RA3 配置的目標叢集。它將部署安裝了 Simple Replay 實用程式的 M5 系列的兩個 Amazon EC2 例項,並在這些叢集中同時重播提取的工作負載。由於重播流程會保留查詢和事務之間的時間間隔,以模擬來自源叢集的確切工作負載,因此,此流程所花費的時間與您在執行提取流程時提供的 start_time 與 end_time 之間的持續時間大致相同。下圖展示了該解決方案的架構。
下圖顯示了用於重播流程的 Amazon Step Functions 狀態機。
狀態機執行以下步驟,重播從提取 Amazon S3 儲存桶中提取的工作負載:
- 將 Amazon Redshift 引數組更新為與源叢集引數組相同的配置,該引數組作為提取流程的一部分儲存在提取 Amazon S3 儲存桶中。
- 如果副本和目標叢集不存在,則並行啟動其建立叢集流程。副本叢集將通過與源叢集完全相同的配置建立,而目標叢集將通過 RA3 配置建立(如果源叢集與您在部署 Amazon CloudFormation 模板時指定的 RA3 配置的彈性調整相容)。如果目標 RA3 配置與彈性調整不相容,則它會通過與副本叢集相同的配置建立目標叢集。
- 如果上一步由於與彈性調整不相容而使用非 RA3 配置建立了目標叢集,則當該叢集可用時,它將針對該叢集執行經典的調整。
- 如果目標叢集或副本叢集處於暫停狀態,它將恢復該叢集。
- 如果目標叢集或副本叢集處於可用狀態,且針對該叢集的任何恢復操作(如果適用)已完成,則它會執行 SQL 指令碼,在叢集的公共架構中設定一些 Amazon Redshift 物件,以便在叢集之間執行自動效能比較。
- 目標叢集和副本叢集的設定流程完成後,它會同時在兩個叢集中執行重播流程,從而執行從源叢集中提取的所有 SQL,同時保持與源叢集相同的事務順序和時間間隔。
- 重播流程完成後,它將從副本叢集中下載查詢統計資料並將其載入到目標 RA3 叢集,從而實現 RA3 叢集內各環境之間的直接效能比較。
重播流程的 Amazon CloudFormation 模板自動啟動重播流程的第一次迭代,但您可以通過提交不帶任何引數的狀態機,隨時重新執行該流程。此模板要求您提供以下引數:
- SourceAccountNumber — 執行提取流程的源賬號。您可以在提取堆疊的輸出選項卡上找到它。
- SourceAccountSimpleReplayS3Bucket — 提取 Amazon S3 儲存桶,由提取模板建立(可在堆疊輸出選項卡上找到)。
- SourceRedshiftClusterEndpoint — 非 RA3 源叢集端點,包括埠號和資料庫名稱(可在堆疊輸出選項卡上找到)。
- SourceRedshiftClusterKMSKeyARN
— Amazon Key Management Service (KMS) 金鑰 ARN (Amazon Resource Name)(如果您的源 Redshift 叢集經過加密)(可在堆疊輸出選項卡上找到)。如果源叢集經過加密,則您需要在同一賬戶中執行提取和重播。 - SourceRedshiftClusterMasterUsername — 與源叢集的主使用者賬戶關聯的使用者名稱(可在堆疊輸出選項卡上找到)。SourceRedshiftClusterPrimaryDatabase — 源叢集中您要重播工作負載的主資料庫名稱。Amazon Redshift 會自動建立名為 dev 的預設資料庫,該資料庫可能不是您的主資料庫。根據您的部署輸入正確的值。如果您有多個資料庫,則需要一次對一個資料庫執行提取和重播。
- TargetRedshiftClusterNodeType — 要預置的 RA3 節點型別。我們建議按照升級到 RA3 節點型別中的建議使用節點型別和節點計數。
- TargetRedshiftClusterNumberOfNodes — 叢集中計算節點的數量。
- ndUserIamRoleName — 可能在執行提取-重播評估的終端使用者的現有 IAM 角色名稱。您可以使用此引數,允許非管理員使用者在沒有對亞馬遜雲科技資源的任何其他許可權情況下執行提取-重播狀態機。如果您不想提供任何終端使用者許可權,請輸入 N/A。
- GrantS3ReadOnlyAccessToRedshift — 如果您在同一賬戶中部署提取和重播流程,則可以為此引數輸入 Yes,該引數將 AmazonS3ReadOnlyAccess 授予給 Amazon Redshift 目標和副本叢集,以在賬戶中重播 Amazon Redshift 的副本語句。否則,您需要手動複製檔案,並調整提取 Amazon S3 儲存桶最新提取資料夾中的 copy_replacement.csv 檔案,還需在重播 Amazon S3 儲存桶的 config/replay.yaml 檔案中將副本語句的引數設定為 true。
- VPC — 您希望部署叢集和 Amazon EC2 例項的現有 Amazon Virtual Private Cloud (Amazon VPC)。
- SubnetId — VPC 內您部署叢集和 Amazon EC2 例項的現有子網。
- KeyPairName — 允許 SSH 連線到重播 Amazon EC2 例項的現有金鑰對。
- OnPremisesCIDR — 用於從 SQL 客戶端訪問目標叢集和副本叢集的現有基礎設施的 IP 範圍(CIDR 表示法)。如果不確定,請輸入公司桌面的 CIDR 地址。例如,如果桌面的 IP 地址是 10.156.87.45,請輸入 10.156.87.45/32。
- EC2InstanceType — 託管 Simple Replay 實用程式程式碼庫的 Amazon EC2 例項型別。如果叢集中的資料大小小於 1 TB,則您可以使用大型例項型別。我們建議針對較大工作負載使用較大的例項型別,以防止 Amazon EC2 例項在從叢集獲取查詢結果時成為瓶頸。
- EC2InstanceVolumeGiB — 以 GiB 為單位的 Amazon EC2 例項卷大小。我們建議將其保持 30 GiB 或更多。
- EC2InstanceAMI — 基於 Amazon Linux 2 的 Amazon EC2 例項的 Amazon AMI。除非您需要符合合規性要求,否則不要更改此引數。
訪問許可權和安全性
要使用 Amazon CloudFormation 部署此解決方案,您需要對計劃部署提取和重播流程的 亞馬遜雲科技賬戶擁有管理員訪問許可權。兩個模板都提供有輸入引數 EndUserIamRoleName,您可以使用該引數,允許非管理員使用者在沒有對系統資源的任何廣泛許可權情況下執行流程。
Amazon CloudFormation 模板基於最低許可權原則使用安全最佳實踐來預置所有必需的資源,並在賬戶 VPC 中託管所有資源。Amazon EC2 例項和 Amazon Redshift 叢集共享相同的安全組,不允許對 Amazon EC2 例項進行 SSH 訪問。對 Amazon Redshift 目標叢集和副本叢集的訪問許可權由 Amazon CloudFormation 模板引數 OnPremisesCIDR 進行控制,您需要提供該引數才能允許本地使用者在 Amazon Redshift 埠上使用 SQL 客戶端連線到新叢集。
所有資源的訪問許可權均使用 Amazon IAM 角色控制,此類角色向 Amazon Redshift、Amazon Lambda、Amazon Step Functions 和 Amazon EC2 授予適當許可權。將提取流程建立的 Amazon S3 儲存桶的讀寫訪問許可權授予給用於重播流程的 亞馬遜雲科技賬戶,以便它從該儲存桶中讀取和更新配置。
評估 RA3 效能
完成重播狀態機的首次執行後,您應該能夠在部署了重播模板的亞馬遜雲科技賬戶的 Amazon Redshift 控制檯上檢視 RA3 目標和非 RA3 副本叢集。重播的每次迭代都會自動填充目標 RA3 叢集公共架構中的以下表和檢視,便於您直接比較叢集之間的效能:
source_target_comparison — 提供兩個叢集重播工作負載所用時間的比較摘要。它提供按 Amazon Redshift 佇列和使用者名稱分組的 total_query_time_saved_seconds 列,這在您的最終評估中可能非常有用。
source_target_comparison_raw — 提供兩個叢集對每個查詢所用時間的詳細比較。
replica_cluster_query_stats — 儲存在副本叢集上執行的重播的查詢級別指標。
target_cluster_query_stats — 儲存在 RA3 叢集上執行的重播的查詢級別指標。
source_cluster_query_stats — 儲存源叢集中的查詢級別指標。此表可能為空,因為它依賴於源叢集中的 STL 日誌檢視,這些檢視僅保留 2-5 天。有關詳情,請參閱用於日誌記錄的 STL 檢視。
detailed_query_stats — 填充 query_stats 表並提供我們用於從 STL 日誌檢視填充這些統計資料的邏輯。
成本和時間表考慮因素
在您的亞馬遜雲科技賬戶中執行此模板會帶來一些成本影響,因為它會預置新的 Amazon Redshift 叢集和三個 Amazon EC2 例項,如果您沒有預留例項,這些例項可能會作為按需例項收費。完成評估後,我們建議刪除 Amazon CloudFormation 堆疊。這將刪除除用於提取和重播的兩個 Amazon S3 儲存桶之外的所有關聯資源。我們還建議在不使用叢集時將其暫停。有關詳情,請參閱 Amazon Redshift 定價 和Amazon EC2 定價。
限制
Simple Replay 和此自動化流程存在一些已知限制:
- 如果將審計日誌傳送到 Amazon S3 存在滯後,則提取流程可能會失敗。在這種情況下,您需要選擇與過去不同的時間間隔來重新執行提取狀態機。
- 不能保證跨連線的相關 SQL 查詢以原始順序執行。
- 如果目標叢集無權訪問外部表,則不會重播 Amazon Redshift Spectrum 查詢。
- 不會重播具有 BIND 變數的查詢。
- 不支援使用 JDBC 進行重播。
- 併發的大量獲取可能會給 Amazon EC2 客戶端造成壓力。對於這些情況,可能需要更大的 Amazon EC2 例項。
- 審計日誌可能包含未提交到生產叢集的 SQL。將重播這些 SQL。
- 您可以使用副本和目標叢集進行比較(而不是與生產 Amazon Redshift 叢集進行直接比較),最大限度地減少這些限制的影響。
結論
與之前的例項相比,Amazon Redshift RA3 例項提供許多額外的優勢。如果您嘗試遷移到 RA3 例項型別,但擔心評估工作,則藉助 Amazon Redshift Simple Replay 實用程式,您可以輕鬆無縫地執行此評估併成功遷移到 RA3 節點。
如果您對 RA3 例項型別的效能感到滿意,可以針對生產叢集執行調整操作,將其移到 RA3 平臺。調整生產叢集所花的時間與建立測試 RA3 叢集所花的時間相近,具體取決於使用的是彈性調整還是傳統調整。我們建議在對生產叢集執行調整操作之前建立手動快照。
本篇作者
Manash Deb
亞馬遜雲科技的高階分析專家解決方案構架師。
超過 15 年以來,他一直致力於採用不同的資料庫和資料倉儲技術構建端到端資料驅動型解決方案。他喜歡學習新技術,通過亞馬遜雲科技上易於使用的雲資料解決方案解決、自動化和簡化客戶問題。
Srinath Madabushi
Amazon Redshift 的高階資料庫工程師
在各種資料倉儲、商業智慧和資料庫技術領域工作了超過 16 年。是一位狂熱的大資料愛好者,與全球客戶合作,以滿足他們的資料倉儲需求。