將 WebSphere 應用程式遷移至 Azure Red Hat OpenShift

本指南說明當您想要將現有的 WebSphere 應用程式伺服器 (WAS) 工作負載移轉至在 Azure Red Hat OpenShift 上執行的 IBM WebSphere Liberty 或 Open Liberty 時,應該注意的事項。

移轉前

為確保成功移轉,在開始之前,請先完成下列各節中所述的評量和清查步驟。

確保所選目標適合您的移轉作業

成功將 WAS 應用程式移轉至 Azure 的第一個步驟是選取最適當的移轉目標。

WAS 傳統在 Azure 虛擬機器 上運作良好。 虛擬機器(VM)目標是最簡單的選擇,因為它最接近內部部署環境。 虛擬機器的系統管理與部署體驗類似於您內部部署的內容。

另一種做法是將 WAS 傳統工作負載轉換為應用程式容器,藉此遷移至容器環境。 您可以在 Azure Kubernetes Service (AKS) 和 Azure Red Hat OpenShift 上執行容器目標。 這種便利性的代價是經濟成本。

一般而言,相較於容器,VM 型解決方案的每分鐘成本較高。 雖然容器型解決方案的執行成本較低,但您必須限制應用程式以符合容器協調流程平臺的需求。

如果最小化變更是移轉工作最重要的因素,請考慮以 VM 為基礎的移轉。 在此情況下,請參閱將 WebSphere 應用程式移轉至 Azure 虛擬機器。

如果您可以容許將應用程式轉換為在容器內執行,以降低運行時間成本,請考慮以 AKS 為基礎的或 Azure Red Hat OpenShift 型移轉。

針對以 AKS 為基礎的移轉,您可以開始使用免費層。 取得免費叢集管理,並只支付取用的虛擬機、相關聯的記憶體和網路資源的費用。 在此情況下,請參閱 將 WebSphere 應用程式遷移至 Azure Kubernetes Service。

針對以 Azure Red Hat OpenShift 為基礎的移轉,除了計算和基礎結構成本之外,應用程式節點還有另一個 OpenShift 授權元件的成本。 此成本是根據應用程式節點數目和實例類型計費。 使用隨選定價或保留實例,無論哪一個最符合您的工作負載和商務需求。 在此情況下,請參閱 將 WebSphere 應用程式遷移至 Azure Red Hat OpenShift。

Azure Red Hat OpenShift 檔中的作法指南涵蓋與移轉相關的一些層面。 如需操作說明指南的完整清單,請參閱 Azure Red Hat OpenShift 檔。

判斷預先建置的 Azure Marketplace 供應專案是否為良好的起點

決定 Azure Red Hat OpenShift 是適當的部署目標之後,您必須接受 IBM WebSphere Liberty 操作員或 Open Liberty 操作員(操作員)是在 Kubernetes 上執行 Liberty 的唯一方法。 接受這個事實後,您必須決定預先建置的 Azure Marketplace 供應項目 是否是好的起點。 以下是關於預先建置 Azure Marketplace 供應專案的一些考慮事項:

  • IBM 和 Microsoft 推出此方案,讓您能夠在 Azure Red Hat OpenShift 上快速佈建 Liberty。 在下列內容中會更詳細地說明這個概念。
  • 整體而言,此方案會為您自動執行下列步驟。
    • 如有需要,請取得現有的應用程式映像。
    • 如有需要,請布建 Azure Red Hat OpenShift 叢集。
    • 在 Azure Red Hat OpenShift 上安裝並設定 IBM WebSphere Liberty 操作員或 Open Liberty 操作員。
    • 使用運算符來執行整個專案。 操作員會在 Azure Red Hat OpenShift 中部署和管理容器化 Liberty 應用程式。 您可以在 IBM WebSphere Liberty 操作員和 Open Liberty 操作員中找到參考檔。

如果您未使用預先建置的 Azure Marketplace 供應專案,您必須瞭解如何直接使用 操作員。 精通這個運算子不在本文的討論範圍內。 操作員的完整文件位於 IBM WebSphere Liberty 操作員和 Open Liberty 操作員。

既然您已瞭解在 Azure Red Hat OpenShift 上處理 Liberty 的各種方式,您最好選擇要使用預先建置的 Azure Marketplace 供應專案,或直接使用操作員自行執行。

判斷 Liberty 版本是否相容

您需要 Open Liberty 操作員或 WebSphere Liberty 操作員,才能在 Kubernetes 型叢集上部署和管理應用程式。 請確定您現有的 Liberty 版本是操作員支援的其中一個版本。 Open Liberty 的版本會保留在 GitHub OpenLiberty/open-liberty 中。 IBM 維護 IBM WebSphere 應用程式伺服器 Liberty 的版本。 如需詳細資訊,請參閱 WebSphere 應用程式伺服器自由。

預先建置的 Azure Marketplace 供應專案可讓您從公用登錄中選取應用程式映射,因此隱含支援所有版本。

判斷是否需要授權

對於 IBM WebSphere Liberty,您必須接受與應用程式容器中 IBM 程式版本對應的授權條款。 欲辨識並查看適用的授權協議,請參閱 「查看 WebSphere Liberty 營運商的授權資訊」。 如需詳細資訊,請參閱在 Microsoft Azure 上執行 WebSphere Liberty。

如果您的產品版別不是預設的 IBM WebSphere Application Server(base),則 .spec.license.edition value 必須指定您的產品版別。 其他可用的值為 IBM WebSphere Application Server Liberty Core 和 IBM WebSphere Application Server Network Deployment。 預先建置的 Azure Marketplace 供應專案可讓您選取支援的產品版本。

使用 IBM 移轉工具來盤點差異

若要將應用程式移至 WebSphere Application Server Liberty 或 Open Liberty,您需要規劃移轉、分析應用程式,以及更新原始程式碼。 IBM 提供移轉工具,協助您識別您目前環境與新自由環境中技術之間的任何差異,例如 Java EE 7 或 Java EE 8,以及 Java SE 8 或 Java SE 11。 如需詳細資訊,請參閱 將應用程式移轉至 Liberty。

盤點伺服器容量

記錄目前生產伺服器的硬體(記憶體、CPU、磁碟),以及平均和尖峰要求計數和資源使用率。 不論您選擇的移轉路徑為何,您都需要此資訊。 例如,此資訊有助於引導您節點中 VM 大小的選取、容器要使用的記憶體數量,以及容器需要多少 CPU 共用。

若要節省大量成本來利用未使用的容量,可以使用 Azure Red Hat OpenShift 中的 Azure Spot 虛擬機器。 若要瞭解如何,請參閱在 Azure Red Hat OpenShift 叢集中使用 Azure Spot 虛擬機器。

清查所有秘密

在 Azure 金鑰保存庫 等「設定即服務」技術出現之前,沒有定義完善的「秘密」概念。 相反地,您所擁有的是一組完全不同的組態設定,其作用實際上等同於我們現在所謂的「秘密」。 使用 WAS 之類的應用程式伺服器時,這些秘密位於許多不同的組態檔和組態存放區中。 檢查實際執行伺服器上的所有屬性和設定檔是否有任何秘密和密碼。 您也可以在應用程式內找到包含密碼或認證的設定檔。 WAS 會將組態數據儲存在目錄的級聯階層中的數份檔中。 大部分的組態檔都有 XML 內容。 如需詳細資訊,請參閱設定檔和Azure 金鑰保存庫 基本概念。

在您完整盤點 Secrets 之後,請參閱 Operator 的 Secrets 相關文件。 如需詳細資訊,請參閱下列文章:

清查所有憑證

記載所有用於公用 SSL 端點的憑證。 您可以執行下列命令來檢視實際執行伺服器上的所有憑證:

keytool -list -v -keystore <path to keystore>

當您已有一份完整的憑證清單後,請參閱下列文章進行設定:

驗證支援的 Java 版本是否正常運作

使用 Liberty 需要特定版本的 Java,因此您必須確認應用程式使用該支援的版本正確執行。

WebSphere Application Server Liberty 執行時環境對 Java 執行環境(JRE)的最低版本有特定要求。 如需詳細資訊,請參閱 功能的 Java 版本相依性。

Open Liberty 需要 Java SE 運行時間。 它可以透過 Java Runtime Environment(JRE)或 Java SE Development Kit(JDK)發行版本來執行。 如需詳細資訊,請參閱 支援的 Java SE 版本。

清查 JNDI 資源

清查所有 JNDI 資源。 例如,資料庫之類的數據源可能會有相關聯的 JNDI 名稱,可讓 JPA 正確地將 的 EntityManager 實例系結至特定資料庫。 如需 JNDI 資源和資料庫的詳細資訊,請參閱 IBM 檔中的 WebSphere 數據源 。 其他 JNDI 相關資源,例如 JMS 訊息代理程式,可能需要移轉或重新設定。 如需 JMS 設定的詳細資訊,請參閱 使用 JMS 資源。

如果您使用預先建置的 Azure Marketplace 供應專案,您可以在部署期間自定義的一組 JNDI 資源僅限於供應專案所支援的內容。 針對 Azure Kubernetes Service 上的 WebSphere Liberty (AKS),您可以在預設的 Java 命名和目錄介面 (JNDI) 命名空間中提供物件。 如需詳細資訊,請參閱 在 Liberty 功能中使用 JNDI 預設命名空間進行開發。 關於 Open Liberty,請參閱 Java 命名與目錄介面。

檢查您的設定檔配置

WAS 中的主要組態單位是設定檔。 因此, resources.xml 檔案包含大量組態,您必須仔細考慮進行移轉。 此檔案包含對儲存在子目錄中的其他 XML 檔案的參照。 如需詳細資訊,請參閱 管理分散式作業系統和 IBM i 作業系統上的設定檔。

在應用程式內

檢查deployment.xml檔案和/或 WEB-INF/web.xml 檔案。

您必須在 Azure Red Hat OpenShift 執行的容器映射中擷取這些自定義。 當您使用預先建置的 Azure Marketplace 供應項目時,處理這類自訂作法的最佳方式,是建立自訂容器映像,並將其發佈到公用登錄檔,然後在部署時指定該登錄檔。

如果您使用 WebSphere Application Server Network Deployment 單元,則每個叢集成員都是在傳統 WAS 的安裝環境中執行。 Liberty 是 WebSphere Application Server 的輕量版設定檔。 這是 WAS 的彈性動態配置檔,可讓 WAS 伺服器只部署必要的自定義功能,而不是部署一組大型可用的 JEE 元件。

判斷是否使用會話複寫

如果您的應用程式依賴會話複寫,您有下列選項:

  • 針對 HTTP 工作階段,根據工作階段管理層級,您可以使用快取或資料庫來收集工作階段數據。
  • 針對 分散式會話,您可以使用資料庫會話持續性,將會話儲存在資料庫中。
  • 針對 動態快取,您可以管理快取或資料庫中的會話數據。
  • 您可以重構應用程式以使用資料庫進行工作階段管理。
  • 您可以重構應用程式,將會話外部化至 Azure Redis 服務。 如需詳細資訊,請參閱 Azure Cache for Redis。

對於所有這些選項,最好掌握 Liberty 如何執行 HTTP 工作階段狀態複寫。 下列文件可協助您瞭解如何在 Liberty 中管理 HTTP 工作階段:

文件資料來源

如果應用程式使用任何資料庫,則必須擷取下列資訊:

  • 數據源名稱為何?
  • 連線集區設定是什麼?
  • 哪裡可以找到 JDBC 驅動程式 JAR 檔案?

如需 WAS 中 JDBC 驅動程式的詳細資訊,請參閱 搭配 WebSphere 應用程式伺服器使用 JDBC 驅動程式。

JDBC 組態是 Liberty 中的核心伺服器組態。 如需詳細資訊,請參閱 JDBC Driver。

預先建置的 Azure Marketplace 供應專案對資料庫的支援有限。 您可以在應用程式映像中處理設定,並在部署供應項目時使用該映像。

判斷 WAS 是否已自定義

判斷已進行下列哪一項自定義,並擷取已完成的工作。

  • 啟動文稿是否已變更? 這類腳本包括 wsadmin、 AdminControl、 AdminConfig、 AdminApp 和 AdminTask。
  • 是否有任何特定參數傳遞至 JVM?
  • 是否有 JAR 新增至伺服器類別路徑?
  • 這類 systemd 操作系統層級的設施是否已用來在伺服器重新啟動後自動啟動WAS元件?

您需要根據這些問題的答案,將移轉相關考量納入考量。

您必須在 Azure Red Hat OpenShift 執行的容器映射中擷取這些自定義。 當您使用預先建置的 Azure Marketplace 供應項目時,處理這類自訂作法的最佳方式,是建立自訂容器映像,並將其發佈到公用登錄檔,然後在部署時指定該登錄檔。

判斷是否需要連線至內部部署環境

如果您的應用程式需要存取您的任何內部部署服務,您必須佈建其中一個 Azure 連線能力服務。 如需詳細資訊,請參閱將內部部署網路連線至 Azure。 或者,您需要重構應用程式,以使用由內部部署資源對外提供的公開 API。

判斷 Java 訊息服務 (JMS) 佇列或主題是否正在使用中

如果您的應用程式使用 JMS 佇列或主題,您必須將它們移轉至外部裝載的 JMS 伺服器。 對於使用 JMS 的人而言,其中一種策略是採用 Azure 服務匯流排 和進階訊息佇列通訊協定。 如需詳細資訊,請參閱 搭配 Azure 服務匯流排 Standard 和 AMQP 1.0 使用 Java Message Service 1.1。

如果您已設定 JMS 永續性存放區,則必須擷取其設定,並在移轉之後套用。

如果您使用 IBM MQ,您可以將此軟體移轉至 Azure 虛擬機器,並依目前使用。

Microsoft有整合 IBM MQ 與 Logic Apps 的解決方案。 如需詳細資訊,請參閱從 Azure Logic Apps 的工作流程連線至 IBM MQ 伺服器。

判斷您是否使用自行建立的自訂共用 Java EE 程式庫

如果您使用共用 Java EE 連結函式庫功能,您有兩個選項:

  • 重構應用程式程式代碼以移除連結庫上的所有相依性,並改為將功能直接併入您的應用程式。
  • 將程式庫新增到伺服器的類別路徑中。

您可以使用從 Java EE 應用程式存取第三方 API 中所述的相同技術來處理這些連結庫。

判斷是否使用 OSGi 套件

如果您使用新增至 WAS 的 OSGi 套件組合,則必須將相等的 JAR 檔案直接新增至 Web 應用程式。

您可以將套件組合納入提供給預先建置 Azure Marketplace 供應項目的映像中。 如需詳細資訊,請參閱 為 OSGi 應用程式設定程式庫。

判斷您的應用程式是否包含 OS 特定程式代碼

如果您的應用程式包含主機 OS 上具有相依性的任何程式代碼,則必須重構它以移除這些相依性。 例如,如果您的應用程式在 Windows 上執行,您可能需要將檔案系統路徑中使用的 / 或 \ 替換為 File.Separator 或 Paths.get。

Azure Red Hat OpenShift 上的 Liberty 會在 Linux x86_64上執行。 任何 OS 特定程式代碼都必須與 Linux 相容。 若要瞭解如何探索特定的OS資訊,請遵循判斷自由版本是否相容一節中的步驟。

判斷IBM Integration Bus 是否正在使用中

如果您的應用程式使用 IBM 整合總線,您必須擷取 IBM Integration Bus 的設定方式。 如需詳細資訊,請參閱 IBM 整合總線檔。

IBM Integration Bus 並未在預先建置的 Azure Marketplace 供應項目中獲得直接支援。 若要啟用此功能,請依照 IBM 文件中 在 Liberty 上啟用 JMS 應用程式以連接至服務整合匯流排 的指示。

判斷應用程式是否由多個 WAR 組成

如果應用程式由多個 WAR 組成,則應該將這些 WAR 視為個別應用程式,並瀏覽本指南以了解這些 WAR。

判斷應用程式是否封裝為 EAR

如果您的應用程式封裝為 EAR 檔案,請務必檢查application.xml、ibm-application-bnd.xmi 和 ibm-application-ext.xmi 檔案,並擷取其組態。 如需詳細資訊,請參閱 在 WebSphere 上建置企業封存 (EAR) 套件。

預先建置的 Azure Marketplace 供應專案可讓您使用現有的容器映像。 您可以根據您的商務需求準備應用程式。

識別在生產伺服器上執行的所有外部處理序和精靈

如果您有任何在應用程式伺服器外部執行的處理序 (例如監視精靈),則必須加以消除或將其遷移到其他位置。

判斷是否使用檔案系統以及其使用方式

Kubernetes 透過持久性磁碟區(PV)來處理檔案系統。 預先建置的 Azure Marketplace 供應專案不支援掛接永續性磁碟區。 若要建立 Azure 檔案儲存體 StorageClass,請遵循在 Azure Red Hat OpenShift 4 上建立 Azure 檔案儲存體 StorageClass 中的指示。

唯讀靜態內容

如果您的應用程式目前提供靜態內容,您需要替代位置。 您應該考慮將靜態內容移至 Azure Blob 記憶體,並新增 Azure Front Door 以全域快速下載。 如需詳細資訊,請參閱 Azure 儲存體中的靜態網站裝載 和 將 Azure 儲存體帳戶與 Azure Front Door 整合。

判斷網路拓撲

目前這組 Azure Marketplace 供應項目是您進行移轉的起點。 如果供應專案未涵蓋您需要移轉的架構層面,則需要擷取現有部署的網路拓撲。 然後,您需要在 Azure 中重建該拓撲,即使在使用其中一個解決方案範本部署基本供應項目之後也是如此。

網路拓撲是一個廣泛的主題,但下列參考可以為您的移轉工作提供一些方向:

將 JCA 配接器和資源配接器的使用納入考量

如果您現有的應用程式使用 JCA 配接器或資源配接器連線到其他企業系統,請確定您將這些成品的設定套用至在 Azure Kubernetes Service (AKS) 上執行的 Liberty 伺服器。 如需詳細資訊,請參閱 JCA 組態專案 和 Java 連接器架構概觀。

判斷是否使用叢集

操作員會處理在 Azure Red Hat OpenShift 上執行 WAS 工作負載的所有可能方式的叢集。

檢查您的 EJB 叢集

如果您的應用程式使用本機 Enterprise Java Beans(EJB),您可能需要將其移轉為叢集式 EJB。 如需詳細資訊,請參閱 在 Liberty 上開發 EJB 應用程式。

考慮負載平衡需求

預建的 Azure Marketplace 供應項目會使用 OpenShift 內建路由,在公開 URL 上裝載應用程式,並處理負載平衡。 如需詳細資訊,請參閱 OpenShift Route 設定。

遷移

本節中的步驟假設您的分析已引導您決定使用預先建置的 Azure Marketplace 供應專案。

布建供應專案

若要在 Azure 入口網站中開啟此供應項目,請參閱 Azure Red Hat OpenShift 上的 IBM WebSphere Liberty 與 Open Liberty。 選取 建立,然後使用您在前述步驟中收集的資訊,協助您填寫供應項目的欄位。

KeyStores 的帳戶

您必須將應用程式所使用的任何 SSL/TLS KeyStore 移轉納入考量。 如需詳細資訊,請參閱 設定金鑰存放區。

連線至 JMS 來源

連接資料庫之後,您可以遵循 IBM 檔中 JCA 組態元素概觀中的指示來設定 JMS。

用於記錄的帳戶

您無法在沒有掌握記錄的情況下執行雲端作業。 運算元提供監視的不同方法。 如需詳細資訊,請參閱 監視 Liberty 伺服器運行時間環境。 掌握 Red Hat OpenShift 中的日誌記錄與監控系統很有幫助。 如需更多資訊,請參閱瞭解 Red Hat OpenShift 的記錄子系統以及關於 OpenShift Container Platform 監控。 您可以為 Azure Red Hat OpenShift 設定 Azure 監視器 容器見解。 如需詳細資訊,請參閱 設定適用於 Azure Red Hat OpenShift 的 Azure 監視器 容器見解。 如果您偏好使用彈性堆疊,Azure 會為 Elastic 提供絕佳的支援。 如需完整詳細數據,請參閱 什麼是彈性與 Azure 整合? 您可以結合這些資源中的知識,以達到 Azure Red Hat OpenShift 上 Liberty 的 Azure 優化記錄解決方案。

移轉您的應用程式

無論您是否選擇在部署時間提供應用程式映像,都需要透過 CI/CD 更新應用程式。 OpenShift 檔包含示範如何執行此更新的範例。 如需詳細資訊,請參閱 OpenShift 容器平臺 CI/CD 概觀。

設定測試

您必須針對應用程式設定任何容器內測試,才能存取在 Azure 內執行的新伺服器。 如同 CI/CD 的相關考量,您務必確保必要的網路安全性規則允許您的測試存取部署至 Azure 的應用程式。 如需詳細資訊,請參閱網路安全性群組。

移轉後

在您達到您在移轉前步驟中 定義的移 轉目標之後,請執行一些端對端驗收測試,以確認一切如預期般運作。 下列文章提供有關移轉後增強項目的資訊: