部署高可用性的自行管理 Oracle 資料庫

本指南說明如何在 Google Distributed Cloud (GDC) 實體隔離標準叢集上,部署高可用性的多區域 Oracle Data Guard 設定。這項設定會使用 Oracle Database Enterprise Edition,並運用 GDC 現有的儲存空間和網路功能。

這項部署作業會使用官方的 Oracle Database Operator for Kubernetes,自動管理資料庫的生命週期。

架構

這項架構說明如何部署高可用性 Oracle Database,並在 GDC 標準叢集中透過 Oracle Database Operator 進行管理。高可用性部署作業包含主要資料庫和待命資料庫,並透過 Data Guard 設定複製和容錯移轉。

高可用性 Oracle 資料庫部署作業,採用 Data Guard 架構圖。

主要元件如下:

  • GDC 專案:資源的專案容器。
  • 標準 Kubernetes 叢集:提供運算資源的標準叢集。
  • Oracle Database 運算子:Kubernetes 運算子,可自動佈建、生命週期管理及監控 Oracle 資料庫。這項服務可簡化修補、備份及復原等複雜工作,讓您在容器化環境中執行具狀態的 Oracle 工作負載時更加輕鬆。
  • 主要資料庫:主動讀寫容器化資料庫執行個體。
  • 待命資料庫:唯讀 (或容錯移轉期間可讀寫) 的備用資料庫執行個體。
  • 資料防護代理程式:負責協調資料庫之間的設定和角色轉換 (切換/容錯移轉)。
  • Harbor:私有容器登錄檔,用於在無網路連線環境中代管資料庫、運算子和用戶端映像檔。
  • Cert-manager:運算子會依賴 cert-manager 管理 Webhook 憑證。cert-manager 已預先安裝在 GDC 標準叢集。

在本指南中,您會在專屬命名空間 (oracle-database-operator-system) 中部署運算子,並在另一個命名空間 (oracle-dbs) 中部署資料庫執行個體。架構圖中以虛線框表示這些命名空間。

建議您分開管理,為求明確且容易管理。不過,資料庫的整理方式完全由您決定。舉例來說,您可能會將特定資料庫分組到不同命名空間,根據工作負載需求、團隊擁有權或安全性規格,管理精細的存取權控管 (RBAC)。

事前準備

開始部署前,請務必確認您的環境符合下列需求:

  • 建立專案,做為本指南中產生所有資源的持有者。
  • 為專案中的使用者授予叢集管理員和標準叢集管理員角色。您可藉此建立標準 Kubernetes 叢集,並管理其資源:

    export PROJECT_ID=PROJECT_ID
    export USER_NAME=USER_NAME
    
    gdcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member="user:${USER_NAME}" \
      --role=cluster-admin
    
    gdcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member="user:${USER_NAME}" \
      --role=standard-cluster-admin
    
  • 建立 Harbor 執行個體和 Harbor 專案,以便代管本指南所需的容器映像檔。

  • 授予使用者 Harbor 執行個體管理員角色,即可將映像檔上傳至 Harbor 執行個體:

    gdcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member="user:${USER_NAME}" \
      --role=harbor-instance-admin
    
  • 在 Harbor 專案中建立 Harbor 機器人帳戶。在本指南稍後,機器人帳戶的憑證會儲存在 Kubernetes 密鑰中,讓叢集在例項化容器時,從 Harbor 提取映像檔。

  • 建立至少有兩個工作站節點的標準 Kubernetes 叢集,每個節點至少要有 16 GB 的記憶體。例如:

    kubectl --kubeconfig MGMT_API_KUBECONFIG create -f - <<EOF
    apiVersion: cluster.gdc.goog/v1
    kind: Cluster
    metadata:
      name: ${CLUSTER_NAME}
      namespace: ${PROJECT_ID}
    spec:
      nodePools:
      - machineTypeName: n3-standard-8-gdc
        nodeCount: 2
        name: ${CLUSTER_NAME}-node-pool
    EOF
    
  • 設定環境變數。本指南會使用這些項目來建立及參照資源:

    注意:

    • 在本指南中,這兩個資料庫執行個體任意命名為 blue 和 green。一開始 blue 執行個體是主要執行個體,green 則是待命執行個體。
    # General info
    export PROJECT_ID="PROJECT_ID"
    export ZONE="ZONE"
    export ORG_NAME="ORG_NAME"
    export CLUSTER_NAME="CLUSTER_NAME"
    
    # Software versions
    export ORACLE_OPERATOR_VERSION="2.1.0"
    export ORACLE_DB_VERSION="21.3.0.0"
    
    # Namespaces
    export ORACLE_OPERATOR_NAMESPACE="ORACLE_OPERATOR_NAMESPACE"
    export DB_NAMESPACE="DATABASE_NAMESPACE"
    
    # Harbor config
    export HARBOR_INSTANCE_PROJECT_ID="HARBOR_PROJECT_ID"
    export HARBOR_INSTANCE_NAME="HARBOR_INSTANCE_NAME"
    export HARBOR_INSTANCE_URL="HARBOR_INSTANCE_URL"
    export HARBOR_PROJECT="HARBOR_PROJECT"
    export HARBOR_PULL_SECRET_NAME="HARBOR_PULL_SECRET_NAME"
    export HARBOR_ROBOT_ACCOUNT="robot\$HARBOR_PROJECT+ROBOT_NAME"
    export HARBOR_ROBOT_SECRET="HARBOR_ROBOT_SECRET"
    
    # Oracle database config
    export ADMIN_PASSWORD="ADMIN_PASSWORD"
    export ADMIN_PASSWORD_SECRET_NAME="ADMIN_PASSWORD_SECRET_NAME"
    
    # Database names
    export DB_NAME_BLUE="database-blue"
    export DB_NAME_GREEN="database-green"
    
  • 網路注意事項:本指南假設您是從可存取 GDC API 的堡壘節點執行,且可存取網際網路,以便下載 Oracle Operator 的資訊清單和容器映像檔。如果是在無法存取網際網路的電腦上執行這項作業,您必須另外取得這些資產 (例如使用 docker save 從連線電腦匯出圖片,然後使用 docker load 匯入圖片),並先將這些資產安全地上傳至您的環境,再繼續進行。

  • 繼續操作前,請先在 container-registry.oracle.com 建立帳戶並取得 API 權杖,然後接受 Oracle Database Enterprise Edition 和 Oracle Instant Client 映像檔的授權協議。

將映像檔載入 Harbor

由於 Google Distributed Cloud 實體隔離方案 中的叢集無法存取外部登錄檔,您必須將所需映像檔鏡像至私人 Harbor 執行個體。

登入 Oracle Container Registry

您必須先向 Oracle 官方登錄檔進行驗證,才能提取基礎映像檔:

docker --config=./docker-oracle login container-registry.oracle.com

成功登入後,憑證會儲存在 ./docker-oracle/config.json 中。

登入 Harbor

使用私人 Harbor 執行個體進行驗證:

docker --config=./docker-harbor login ${HARBOR_INSTANCE_URL} \
  -u ${HARBOR_ROBOT_ACCOUNT} \
  -p ${HARBOR_ROBOT_SECRET}

成功登入後,機器人帳戶的憑證會儲存在 ./docker-harbor/config.json 中。

提取、標記及推送映像檔

從官方 Oracle 容器登錄檔下載映像檔,然後推送至內部 Harbor 專案。您將複製運算子、企業資料庫和即時用戶端,以進行測試。

  1. 鏡像 Oracle 資料庫運算子映像檔:

    docker --config=./docker-oracle pull \
      container-registry.oracle.com/database/operator:${ORACLE_OPERATOR_VERSION} \
      --platform linux/amd64
    
    docker tag container-registry.oracle.com/database/operator:${ORACLE_OPERATOR_VERSION} \
      ${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/oracle-operator:${ORACLE_OPERATOR_VERSION}
    
    docker --config=./docker-harbor push \
      ${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/oracle-operator:${ORACLE_OPERATOR_VERSION}
    
  2. 鏡像 Oracle 資料庫企業版映像檔:

    docker --config=./docker-oracle pull \
      container-registry.oracle.com/database/enterprise:${ORACLE_DB_VERSION} \
      --platform linux/amd64
    
    docker tag container-registry.oracle.com/database/enterprise:${ORACLE_DB_VERSION} \
      ${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/oracle-enterprise:${ORACLE_DB_VERSION}
    
    docker --config=./docker-harbor push \
      ${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/oracle-enterprise:${ORACLE_DB_VERSION}
    
  3. 鏡像 Oracle 即時用戶端映像檔:

    docker --config=./docker-oracle pull \
      container-registry.oracle.com/database/instantclient:latest \
      --platform linux/amd64
    
    docker tag container-registry.oracle.com/database/instantclient:latest \
      ${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/oracle-instantclient:latest
    
    docker --config=./docker-harbor push \
      ${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/oracle-instantclient:latest
    

設定叢集存取權

部署資源前,請先擷取標準叢集的憑證,並建立方便使用的別名:

  1. 擷取標準叢集的 kubeconfig 檔案:

    KUBECONFIG=kubeconfig-${CLUSTER_NAME}.yaml gdcloud clusters \
      get-credentials ${CLUSTER_NAME} \
      --standard \
      --project ${PROJECT_ID} \
      --zone ${ZONE}
    
  2. 建立 kk 別名,簡化後續指令:

    alias kk="kubectl --kubeconfig kubeconfig-${CLUSTER_NAME}.yaml"
    

建立密鑰

建立 Kubernetes Secret,讓叢集使用儲存在本機 ./docker-harbor/config.json 的憑證,從 Harbor 提取映像檔。您需要在運算子的命名空間 (用於提取運算子映像檔) 和資料庫的命名空間 (用於提取資料庫映像檔) 中,使用這個密碼。

  1. 為運算子建立命名空間:

    kk create ns ${ORACLE_OPERATOR_NAMESPACE}
    
  2. 為運算子建立提取密鑰:

    kk create secret docker-registry ${HARBOR_PULL_SECRET_NAME} \
      --from-file=.dockerconfigjson=./docker-harbor/config.json \
      -n ${ORACLE_OPERATOR_NAMESPACE}
    
  3. 為資料庫建立命名空間:

    kk create ns ${DB_NAMESPACE}
    
  4. 為資料庫容器建立映像檔提取密鑰:

    kk create secret docker-registry ${HARBOR_PULL_SECRET_NAME} \
      --from-file=.dockerconfigjson=./docker-harbor/config.json \
      -n ${DB_NAMESPACE}
    
  5. 建立資料庫管理密碼的密鑰:

    kk create secret generic ${ADMIN_PASSWORD_SECRET_NAME} \
      --from-literal=password=${ADMIN_PASSWORD} \
      -n ${DB_NAMESPACE}
    

安裝 Oracle Database Operator

現在,請套用三個資訊清單,將 Oracle Database Operator 安裝至叢集:

  1. 叢集角色繫結:為運算子設定必要權限,以便在整個叢集運作。

    kk apply -f https://raw.githubusercontent.com/oracle/oracle-database-operator/refs/tags/v${ORACLE_OPERATOR_VERSION}/rbac/cluster-role-binding.yaml
    
  2. 節點 RBAC:授予讀取節點拓撲的權限,這對正確排定 Pod 非常重要。

    kk apply -f https://raw.githubusercontent.com/oracle/oracle-database-operator/refs/tags/v${ORACLE_OPERATOR_VERSION}/rbac/node-rbac.yaml
    
  3. Operator 部署作業:部署運算子 Pod 和自訂資源定義。這項指令會下載正式資訊清單、將映像檔路徑替換為 Harbor 網址、插入 imagePullSecrets 設定,讓 Kubernetes 可以向 Harbor 驗證,並套用結果:

    curl -L https://raw.githubusercontent.com/oracle/oracle-database-operator/refs/tags/v${ORACLE_OPERATOR_VERSION}/oracle-database-operator.yaml \
      | sed "s|container-registry.oracle.com/database/operator:latest|${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/oracle-operator:${ORACLE_OPERATOR_VERSION}|g" \
      | awk "/terminationGracePeriodSeconds: 10/{print; print \"      imagePullSecrets:\n      - name: ${HARBOR_PULL_SECRET_NAME}\"; next}1" \
      | kk apply -f -
    

    等待運算子 Pod 執行:

    kk get pods -n ${ORACLE_OPERATOR_NAMESPACE} --watch
    

    輸出內容應如下所示:

    NAME                                                           READY   STATUS    RESTARTS   AGE
    oracle-database-operator-controller-manager-5f7b56874d-k9v4z   1/1     Running   0          45s
    oracle-database-operator-controller-manager-5f7b56874d-n2x8m   1/1     Running   0          45s
    oracle-database-operator-controller-manager-5f7b56874d-r6z7q   1/1     Running   0          45s
    

部署主要和待命資料庫

現在,您會在同一個命名空間中依序部署兩個資料庫執行個體。

部署主要執行個體

  1. 執行下列指令,建立主要資料庫執行個體:

    apiVersion: database.oracle.com/v4
    kind: SingleInstanceDatabase
    metadata:
      name: ${DB_NAME_BLUE}
      namespace: ${DB_NAMESPACE}
    spec:
      replicas: 1
      edition: enterprise
      image:
        pullFrom: "${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/oracle-enterprise:${ORACLE_DB_VERSION}"
        pullSecrets: ${HARBOR_PULL_SECRET_NAME}
        prebuiltDB: true
      sid: ORCLBLUE
      pdbName: ORCLPDB1
      archiveLog: true
      flashBack: true
      forceLog: true
      adminPassword:
        secretName: "${ADMIN_PASSWORD_SECRET_NAME}"
        secretKey: "password"
      persistence:
        size: "50Gi"
        storageClass: "standard-rwo"
        accessMode: "ReadWriteOnce"
      resources:
        requests:
          memory: "4Gi"
    

    重要設定參數:

    • sid / pdbName:定義系統 ID (SID) 和可插拔資料庫 (PDB) 名稱。
    • edition:指定資料庫版本 (本例為 enterprise)。
    • image:指向您的私人 Harbor 登錄檔映像檔。
    • persistence:使用 standard-rwo StorageClass 要求 50Gi 的永久磁碟區,這會在 GDC 中建立區域永久磁碟。
    • replicas:將執行個體的 Pod 數量設為 1。
    • archiveLog:啟用「封存記錄」模式,這是 Data Guard 的必要條件。
    • flashBack:啟用資料庫回溯功能,讓您將資料庫還原至先前的時間點。
    • forceLog:啟用強制記錄功能,確保所有變更都會記錄在案,即使是通常會略過記錄的作業也不例外。

    如需完整的設定選項清單,包括自訂初始化參數和資源限制,請參閱官方說明文件。

    建立資料庫需要大量資源,可能需要 10 到 20 分鐘。

    等待資料庫完全就緒,再繼續操作。這點至關重要,因為待命資料庫必須能存取主要資料庫,才能建立複寫。

    等待資料庫 Pod Running:

    kk get po -n ${DB_NAMESPACE} -l app=${DB_NAME_BLUE} -w
    

    輸出內容應如下所示:

    NAME                   READY   STATUS    RESTARTS   AGE
    database-blue-i5xdj   0/1     Pending   0          0s
    database-blue-i5xdj   0/1     Pending   0          0s
    database-blue-i5xdj   0/1     Pending   0          1s
    database-blue-i5xdj   0/1     Init:0/1   0          1s
    database-blue-i5xdj   0/1     PodInitializing   0          98s
    database-blue-i5xdj   0/1     Running           0          99s
    database-blue-i5xdj   1/1     Running           0          99s
    

    然後查看記錄,等待 DATABASE IS READY TO USE! 訊息:

    kk logs -n ${DB_NAMESPACE} -l app=${DB_NAME_BLUE} -f
    

    輸出內容應包含下列項目:

    #########################
    DATABASE IS READY TO USE!
    #########################
    
  2. 確認狀態為 Healthy,且角色為 PRIMARY:

    kk get sidb -n ${DB_NAMESPACE} ${DB_NAME_BLUE}
    

    輸出內容應如下所示:

    NAME            EDITION      STATUS    ROLE
    database-blue   Enterprise   Healthy   PRIMARY
    

部署待命執行個體

主要執行個體恢復正常後,請部署待命執行個體。請注意,Data Guard 參數 (archiveLog、flashBack、forceLog) 是從主要項目繼承而來,不得在待命資訊清單中指定:

  1. 部署待命執行個體:

    apiVersion: database.oracle.com/v4
    kind: SingleInstanceDatabase
    metadata:
      name: ${DB_NAME_GREEN}
      namespace: ${DB_NAMESPACE}
    spec:
      replicas: 1
      edition: enterprise
      image:
        pullFrom: "${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/oracle-enterprise:${ORACLE_DB_VERSION}"
        pullSecrets: ${HARBOR_PULL_SECRET_NAME}
        prebuiltDB: true
      sid: ORCLGREEN
      pdbName: ORCLPDB1
      adminPassword:
        secretName: "${ADMIN_PASSWORD_SECRET_NAME}"
        secretKey: "password"
      createAs: standby
      primaryDatabaseRef: ${DB_NAME_BLUE}
      persistence:
        size: "50Gi"
        storageClass: "standard-rwo"
        accessMode: "ReadWriteOnce"
      resources:
        requests:
          memory: "4Gi"
    

    等待資料庫 Pod Running:

    kk get po -n ${DB_NAMESPACE} -l app=${DB_NAME_GREEN} -w
    

    輸出內容應如下所示:

    NAME                   READY   STATUS    RESTARTS   AGE
    database-green-q1gur   0/1     Pending   0          0s
    database-green-q1gur   0/1     Pending   0          0s
    database-green-q1gur   0/1     Pending   0          1s
    database-green-q1gur   0/1     Init:0/1   0          1s
    database-green-q1gur   0/1     PodInitializing   0          98s
    database-green-q1gur   0/1     Running           0          99s
    database-green-q1gur   1/1     Running           0          99s
    

    然後查看記錄,等待 DATABASE IS READY TO USE! 訊息:

    kk logs -n ${DB_NAMESPACE} -l app=${DB_NAME_GREEN} -f
    

    輸出內容應包含下列項目:

    #########################
    DATABASE IS READY TO USE!
    #########################
    
  2. 確認狀態為 Healthy,且角色為 PHYSICAL_STANDBY:

    kk get sidb -n ${DB_NAMESPACE}
    

    輸出內容應如下所示:

    NAME             EDITION      STATUS    ROLE
    database-blue    Enterprise   Healthy   PRIMARY
    database-green                Healthy   PHYSICAL_STANDBY
    

設定 Data Guard Broker

  1. 部署 DataguardBroker 來管理 Data Guard 設定:

    apiVersion: database.oracle.com/v4
    kind: DataguardBroker
    metadata:
      name: broker-blue-green
      namespace: ${DB_NAMESPACE}
    spec:
      primaryDatabaseRef: ${DB_NAME_BLUE}
      standbyDatabaseRefs:
        - ${DB_NAME_GREEN}
      protectionMode: MaxAvailability
      fastStartFailover: false
      loadBalancer: true
    

    重要設定參數:

    • protectionMode:設為 MaxAvailability,確保至少有一個待命狀態可用時不會遺失資料,並在至少有一個待命狀態可連線時轉換為非同步模式。
    • fastStartFailover:設為 false 即可停用自動容錯移轉。啟用後,如果主要資料庫無法使用,觀察程序就會自動觸發容錯移轉。
    • loadBalancer:設為 true,為代理程式建立 Kubernetes LoadBalancer 服務,提供穩定的外部 IP 位址,一律會將流量路由至目前的資料庫主要節點。
  2. 監控代理程式狀態,直到回報 Healthy 為止:

    kk get dataguardbroker -n ${DB_NAMESPACE} -w
    

    輸出內容應如下所示:

    NAME                PRIMARY   STANDBYS   PROTECTION MODE   CONNECT STR   STATUS     FSFO
    broker-blue-green                        MaxAvailability                 Creating
    broker-blue-green                        MaxAvailability                 Creating
    broker-blue-green   ORCLBLUE   ORCLGREEN   MaxAvailability   10.0.0.25:32345/DATAGUARD   Creating   false
    broker-blue-green   ORCLBLUE   ORCLGREEN   MaxAvailability   10.0.0.25:32345/DATAGUARD   Healthy    false
    
  3. DataguardBroker 會建立 Kubernetes 服務 (broker-blue-green),自動將流量轉送至目前的主要資料庫。這可為應用程式提供穩定的連線點。如何取得這項服務:

    kk get svc -n ${DB_NAMESPACE} broker-blue-green
    

    輸出內容應如下所示。請注意,系統會為叢集內用戶端佈建 CLUSTER-IP,並為外部用戶端佈建 EXTERNAL-IP (使用負載平衡器):

    NAME                TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)                         AGE
    broker-blue-green   LoadBalancer   10.0.19.198   100.66.38.138   1521:31116/TCP,5500:31842/TCP   8m
    
  4. 檢查代理程式服務的端點。一開始必須指向藍色 Pod 的 IP 位址:

    kk get endpoints -n ${DB_NAMESPACE} broker-blue-green
    

    輸出內容應如下所示,其中應顯示藍色 Pod 的 IP,而非 BLUE_POD_IP:

    NAME                ENDPOINTS
    broker-blue-green   [BLUE_POD_IP]:5500,[BLUE_POD_IP]:1521
    
  5. 檢查資料庫 Pod,找出相關 IP:

    kk get pod -n ${DB_NAMESPACE} -o wide
    

測試資料同步和角色

現在,您可以使用叢集內用戶端 Pod,將資料寫入主要資料庫,並從待命資料庫讀取資料,藉此驗證複製作業。

使用代理程式服務寫入主要資料庫

  1. 部署臨時 Pod,透過穩定版代理程式服務連線至主要資料庫:

    kk run sqlplus -n ${DB_NAMESPACE} --rm -it --restart=Never \
      --image=${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/oracle-instantclient:latest \
      --image-pull-policy=Always \
      --overrides='{"spec": {"imagePullSecrets": [{"name": "'${HARBOR_PULL_SECRET_NAME}'"}]}}' \
      -- sqlplus sys/${ADMIN_PASSWORD}@broker-blue-green:1521/ORCLPDB1 as sysdba
    
  2. 建立測試資料表:

    CREATE TABLE employees (id NUMBER, name VARCHAR2(50));
    INSERT INTO employees VALUES (1, 'John Doe');
    COMMIT;
    SELECT * FROM employees;
    exit;
    

    輸出內容應如下所示:

            ID NAME
    ---------- --------------------------------------------------
            1 John Doe
    

從待機狀態讀取 (直接存取)

  1. 部署臨時 Pod,直接連線至待命服務:

    kk run sqlplus -n ${DB_NAMESPACE} --rm -it --restart=Never \
      --image=${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/oracle-instantclient:latest \
      --image-pull-policy=Always \
      --overrides='{"spec": {"imagePullSecrets": [{"name": "'${HARBOR_PULL_SECRET_NAME}'"}]}}' \
      -- sqlplus sys/${ADMIN_PASSWORD}@${DB_NAME_GREEN}:1521/ORCLPDB1 as sysdba
    
  2. 驗證資料複製:

    SELECT * FROM employees;
    exit;
    

    輸出內容應如下所示:

            ID NAME
    ---------- --------------------------------------------------
            1 John Doe
    

執行手動切換

觸發手動切換,反轉角色,將綠色資料庫設為新的主要資料庫。運算子需要切換目標的 SID (例如 ORCLGREEN)。

  1. 執行下列指令:

    kk patch dataguardbroker broker-blue-green -n ${DB_NAMESPACE} --type='merge' \
      -p "{\"spec\":{\"setAsPrimaryDatabase\":\"ORCLGREEN\"}}"
    
  2. 監控切換進度:

    kk get sidb -n ${DB_NAMESPACE} -w
    

    切換完成後,輸出內容應如下所示:

    NAME             EDITION      STATUS    ROLE
    database-blue    Enterprise   Healthy   PHYSICAL_STANDBY
    database-green                Healthy   PRIMARY
    
  3. 確認資料庫執行個體已切換角色,且綠色資料庫現在是主要資料庫:

    kk get dataguardbroker -n ${DB_NAMESPACE}
    

    輸出內容應如下所示:

    NAME                PRIMARY     STANDBYS   PROTECTION MODE
    broker-blue-green   ORCLGREEN   ORCLBLUE   MaxAvailability
    
  4. 確認 broker-blue-green 服務端點已更新,指向綠色 Pod 的 IP:

    kk get endpoints -n ${DB_NAMESPACE} broker-blue-green
    

    輸出內容應如下所示,其中應顯示綠色 Pod 的 IP,而非 GREEN_POD_IP:

    NAME                ENDPOINTS
    broker-blue-green   [GREEN_POD_IP]:5500,[GREEN_POD_IP]:1521
    

後續步驟