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

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

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

架構

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

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

主要元件如下:

  • GDC 專案:資源的專案容器。
  • 標準 Kubernetes 叢集:提供運算資源的標準叢集。
  • Oracle Database Operator:Kubernetes 運算子,可自動佈建、管理生命週期及觀測 Oracle 資料庫。這項服務可簡化修補、備份和復原等複雜工作,讓您在容器化環境中輕鬆執行有狀態的 Oracle 工作負載。
  • 主要資料庫:運作中的讀寫容器化資料庫執行個體。
  • 待命資料庫:唯讀 (或在容錯移轉期間可讀寫) 的資料庫執行個體副本。
  • Data Guard Broker:自動調度管理資料庫之間的設定和角色轉換 (切換/容錯移轉)。
  • Harbor:用於在實體隔離環境中代管資料庫、operator 和用戶端映像檔的私人 Container Registry。
  • 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 叢集,至少要有兩個 worker 節點,每個節點至少要有 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 Container Registry 下載映像檔,並推送至內部 Harbor 專案。您會建立運算子、企業資料庫和 Instant Client 的鏡像,以便進行測試。

  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 資料庫 Enterprise 映像檔的鏡像:

    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 Instant Client 映像檔:

    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 部署作業:部署 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 要求 50 Gi 永久磁碟區,這會在 GDC 中建立可用區永久磁碟。
    • replicas:將執行個體的 Pod 數量設為 1。
    • archiveLog:啟用封存記錄模式,這是 Data Guard 的必要模式。
    • flashBack:啟用 Flashback Database,可將資料庫還原至先前的時間點。
    • forceLog:啟用強制記錄功能,確保所有變更都會記錄,即使是通常會略過記錄的作業也不例外。

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

    建立資料庫會耗用大量資源,可能需要 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
    

後續步驟