IBM Cloud Docs
只讀副本

只讀副本

Databases for PostgreSQL只讀副本透過非同步複製將所有資料從領導者部署複製到副本部署。 顧名思義,只讀副本支援讀取事務,可用於平衡同時具有大量寫入和大量讀取操作的資料庫。 只讀副本有一個PostgreSQL資料成員,並且按 與領導者相同的每個成員消耗費率 計費。

高可用性唯讀副本

高可用性Databases for PostgreSQL只讀副本提供的好處包括改進的讀取可擴展性、提高可用性、減少讀取延遲、備份和災難復原功能以及分發讀取的能力交通高效。 它有助於為您的應用程式提供更強大、響應更靈敏的資料庫基礎架構。 有關更多信息,請參閱 Databases for PostgreSQL高可用性唯讀副本

領導者

在預先配讀任何唯讀副本之前,在Databases for PostgreSQL部署的_「唯讀副本」_標籤上,中心窗格會指出不存在唯讀副本並提供 「建立” 按鈕。

如果某個部署是領導者部署並且已附加一個唯讀副本,則_「複製」_窗格將包含一個副本部署清單以及指向每個部署的連結。 按一下唯讀副本部署名稱右側的齒輪圖示對其進行管理。

配置唯讀副本

部署資源按 PostgreSQL 每次部署分配,而標準部署包含兩個成員。 由於唯讀副本只有一個成員,並且配置目前使用的記憶體和儲存請求值的一半,因此配置可能會失敗。 Web UI 無法修改儲存值,它會自動使用領導者部署的值 - 該值會減半。 如果這不足以容納您的數據,您需要使用 API 或 CLI 指定要配置的儲存空間的兩倍。 (這同樣適用於內存,儘管較低的內存量可能不會阻止恢復成功。) 正在進行更新以糾正這種情況。

透過 UI 進行配置

透過點選建立唯讀副本,從領導者的_唯讀副本_標籤配置唯讀副本。 來源實例自動完成。 只讀副本的名稱是在_服務名稱_欄位中自動產生的,但您可以自由重新命名。 您可以選擇部署它的區域及其初始記憶體分配。 磁碟大小、版本以及公用或專用端點會自動配置為與領導者部署的設定相符。

若您使用 Key Protect 此功能,僅在透過命令列介面 (CLI) 和應用程式介面 (API) 進行配置時,才支援自備金鑰 (BYOK)。 否則,只讀副本將使用產生的金鑰進行加密。

透過 CLI 進行配置

透過 CLI 和 API 設定唯讀副本的工作方式與 設定標準Databases for PostgreSQL部署 類似。 配置由資源控制器處理,它使用參數 {"remote_leader_id": "crn:v1:..."} 來指定您正在配置的副本的領導者。

若要透過 CLI 設定只讀副本,請使用下列命令:

ibmcloud resource service-instance-create <REPLICA_NAME_OR_CRN> databases-for-postgresql standard <REGION> \
-p \ '{
  "remote_leader_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71819::",
  "members_memory_allocation_mb": "2048",
  "members_disk_allocation_mb": "10240"
}'

您必須指定 RAM 和磁碟量,請記住最小大小為 2 GB RAM 和 10 GB 磁碟。 您可以選擇指定只讀副本是使用公共端點還是專用端點。 您無法指定唯讀副本的版本。 版本會自動設定為與領導部署相同的主要版本。

透過 API 進行配置

透過 API 設定只讀副本的工作方式與 設定標準Databases for PostgreSQL部署 類似。 配置由資源控制器處理,它使用參數 {"remote_leader_id": "crn:v1:..."} 來指定您正在配置的副本的領導者。

若要透過 API 設定只讀副本,請使用下列命令:

curl -X POST \
  https://resource-controller.cloud.ibm.com/v2/resource_instances \
  -H 'Authorization: Bearer <>' \
  -H 'Content-Type: application/json' \
    -d '{
    "name": "<REPLICA_NAME_OR_CRN>",
    "target": "<REGION>",
    "resource_group": "<RESOURCE_GROUP_ID>",
    "resource_plan_id": "databases-for-postgresql-standard",
    "parameters": {
      "remote_leader_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71819::",
      "members_memory_allocation_mb": "2048",
      "members_disk_allocation_mb": "10240"
    }
  }'

您必須指定 RAM 和磁碟量,請記住最小大小為 2 GB RAM 和 10 GB 磁碟。 您可以選擇指定只讀副本是使用公共端點還是專用端點。 您無法指定唯讀副本的版本。 版本會自動設定為與領導部署相同的主要版本。

只讀副本

在_唯讀副本的唯讀副本_標籤上,_複製_包含其名稱和區域,以及其領導者的名稱和區域。 它還具有用於重新同步只讀副本併升級它的按鈕。

檢查複製狀態

您必須監控複製,因為複製狀態不會自動監控。

使用 psql 檢查唯讀副本的複製狀態,但只能從其領導者檢查。 使用 管理員憑證透過 psql 連接到領導者部署。 連線成功後,請執行以下指令:

SELECT * from pg_stat_replication;

監控複製滯後的輸出時,請注意 application_name 指複製的形成 ID:雲資源名稱 (CRN) 的最後填充部分。 尋找「async」的 sync_state 值、複寫期間的「Streaming」值 state,以及時間統計數據。

您的部署總會有一個副本用於其 HA 配對節點,application_name 將與您的主部署相同,而 sync_state 值將是 "sync"。 您應該預期每個唯讀複製會有一個額外的輸出行列,application_name 將會不同,而 sync_state 將會是 "async"。 然後,您可以評估它是否與查詢結果所提供的附加資訊同步。

如需詳細資訊,請參閱 pg_stat_replication

只讀副本使用者和權限

  • 領導者上的任何用戶,甚至是在只讀副本配置之前存在的用戶,都可以登入唯讀副本並在其上運行讀取,並具有與領導者上擁有的物件相同的權限。

  • 如果您有多個附加到領導者的唯讀副本,則在領導者上建立的使用者也會在所有其他唯讀副本上建立。

  • 當領導者升級為獨立部署時,在領導者上創建的使用者將保留在唯讀副本上,包括 admin 使用者。 當唯讀副本升級時,領導者上所有使用者的使用者和權限都將轉移到升級的部署。

  • 所有使用者對唯讀副本的寫入操作不會被過濾或拒絕,但會在資料庫層級失敗。

您也可以建立有權存取唯讀副本但無權從唯讀副本存取領導者的使用者。 如果您有多個附加到領導者的唯讀副本,則在任一讀副本上建立的使用者也會在所有其他唯讀副本上建立。

在唯讀副本上建立的唯讀副本使用者能夠連接到副本並執行讀取。 只讀副本使用者無法連接領導者並在領導者上執行操作。 當唯讀副本升級為獨立部署時,它們也不會持續存在。

只讀副本創建的使用者由領導者分配權限,並被指派 ibm-cloud-base-user-ro 角色,並且是 ibm-cloud-base-user 群組的成員。 他們可以存取該群組其他成員創建的所有對象,包括領導者上透過_服務憑證_、CLI 或 API 創建的任何使用者。 與 ibm-cloud-base-user 的權限一致,唯讀副本所建立的使用者無權存取 admin 使用者或透過 psql 所建立的其他使用者所建立的物件。 有關更多信息,請參閱 PostgreSQL角色和權限 頁面。

重新同步唯讀副本

如果您需要重新同步只讀副本,請按一下重新同步只讀副本按鈕。 重新同步是一種破壞性操作,執行重新同步會破壞並重建唯讀副本中的資料。 執行重新同步時,唯讀副本無法執行任何其他操作或執行任何查詢。 查詢不會重新路由到領導者,因此與唯讀副本的任何連接都會失敗,直到完成重新同步為止。

重新同步只讀副本所需的時間各不相同,但該過程可能會長時間運行。

透過 CLI 重新同步只讀副本

若要透過 CLI 啟動重新同步,請使用 cdb read-replica-resync 指令。

ibmcloud cdb read-replica-resync <DEPLOYMENT_NAME_OR_CRN>

透過 API 重新同步只讀副本

若要透過 API 啟動重新同步,請將 POST 傳送至 /deployments/{id}/remotes/resync 端點。

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/resync \
  -H 'Authorization: Bearer <>'

提升唯讀副本

只讀副本能夠提升為獨立的集群,可以接受寫入操作和讀取操作。 如果領導者部署發生問題,只讀副本可以提升為獨立叢集並開始接受來自應用程式的寫入。 如果只讀副本群集已擁有多個資料成員,則將唯讀副本群集提升為獨立群集會更快。

升級後,唯讀副本將終止與領導者的連接,並成為獨立的Databases for PostgreSQL部署。 部署可以開始接受並運行讀寫操作,啟用備份,並為其頒發自己的管理員使用者。 新增一個新的資料成員,以便部署成為具有兩個資料成員的叢集。 這會增加成本,因為它以相同的每個成員消耗費率計費,但部署有兩個成員而不是一個。

當您升級唯讀副本時,您可以跳過通常在升級時進行的初始備份。 跳過初始備份意味著您的副本可以更快地變得可用,但沒有立即可用的備份。 升級過程完成後,您可以開始按需備份。

一旦唯讀副本升級為獨立部署,就無法將其還原為唯讀副本或重新加入領導者。

在 UI 中提升唯讀副本

若要從 UI 升級唯讀副本,請按一下升級唯讀副本

在 CLI 中升級唯讀副本

若要透過 CLI 進行升級,請使用 cdb read-replica-promote 指令。

ibmcloud cdb read-replica-promote <DEPLOYMENT_NAME_OR_CRN>

透過 API 提升只讀副本

若要透過 API 進行推廣,請將 POST 傳送至 /deployments/{id}/remotes/promotion 端點。

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/promotion \
  -H 'Authorization: Bearer <>'  \
 -H 'Content-Type: application/json' \
 -d '{"promotion": {}}' \

若要升級並在升級後跳過初始備份,也要在 JSON 正文中設定 skip_initial_backup

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/promotion \
  -H 'Authorization: Bearer <>'  \
 -H 'Content-Type: application/json' \
 -d '{"promotion": {"skip_initial_backup": true}}' \

完成時間

只有當資料庫高度可用時,升級任務才會完成。 但是,讀取/寫入可用性會在大約 10 分鐘後出現,但有一個主要警告:在任務完成之前,資料庫並不具有高可用性。

只讀副本的完整提升時間由資料大小決定,有兩種可能的方式:

  • 只讀副本是單一成員。 升級後,編隊規格將更改為兩個成員,從而創建第二個副本。 該副本的建立時間取決於資料的大小。 此副本的建立速度為 25 MB/s,以避免網路飽和。 隨著資料庫的成長,創建可能需要大量時間。 在該副本的建立完成之前,該任務不會完成。
  • 如果您選擇將備份作為促銷的一部分,則該備份也需要在任務完成之前完成。 同樣,這取決於資料庫的大小。

在升級任務完成之前,不存在 High-Availability 成員。 同樣,如果您選擇進行初始備份,則在第二點完成或建立手動備份之前不存在備份。

升級的同時推廣

如果您需要升級到資料庫的新主要版本,可以在將唯讀副本升級為獨立部署時執行此操作。 有關更多信息,請參閱 升級到新的主要版本

只讀副本注意事項

  • 唯讀副本可以與來源群組存在於同一區域,也可以存在於不同區域,從而使您的資料能夠跨區域複製。

  • 只讀副本必須與其領導者俱有相同的主要版本。

  • 在唯讀副本上停用備份。 僅在領導者部署上進行備份。

  • 副本可恢復到其他區域,但支援 EU Cloud 的區域(目前為 eu-depar-01 )除外,它們只能相互恢復(例如,par-01 副本可以恢復到 eu-de,反之亦然)。

  • 每位領導者的唯讀副本數量限制為 5 位。

  • 只讀副本不參與領導者群集的領導者->追隨者選舉,並且不會自動故障轉移到只讀副本。 將唯讀副本升級為完整部署是一項由使用者啟動的手動任務。

  • 只讀副本的最小大小為 2 GB RAM 和 10 GB 磁碟。 即使您的領導者部署規模較小,也是如此。

  • 只讀副本不會自動縮放以匹配領導者。 如果您儲存的資料量超出了分配給部署的磁碟容量,請先擴展只讀副本上的磁碟,然後再擴展領導者上的磁碟。 首先擴充唯讀副本可確保唯讀副本上的空間不會耗盡。 如果擴充領導者磁碟是為了效能而不是空間,則無需擴充唯讀副本。

  • 複製是異步的,並且可能會出現複製延遲。 預設情況下,主節點和副本節點之間沒有一致的通訊。 只讀副本可能會落後很多,需要重新同步。 當副本位於地理上遠離其領導者的區域時,複製延遲可能會更大。

  • 如果您使用 IBM Cloud Monitoring 服務監控您的部署,您可以觀察 PostgreSQL Read Replica 複製滯後 度量的趨勢。 如果您看到此指標的值為 -2,這可能表示有問題,請完成 檢查複製狀態 中的步驟,以確定複製是否如預期般運作。 如果您在檢查複製狀態後仍有疑慮,請聯絡 IBM Cloud 支援,在重新同步之前檢查您的部署。

  • 只讀副本是具有單一資料成員的部署,並且不具有任何內部高可用性。 維護期間很容易出現暫時中斷和停機。 如果您的應用程式依賴唯讀副本,請確保具有重試失敗查詢的邏輯,或在多個唯讀副本上進行負載平衡。

就地主要版本升級時的唯讀副本狀態

隨著 Databases for PostgreSQL 我們服務中導入就地主要版本升級功能,唯讀複本可協助維持讀取交易的連續性,並在升級過程中展現其特別實用的價值。 然而,請注意此功能目前尚不適用於唯讀複本。 然而,若您的服務需要讀取正在升級中的執行個體的資料,您可考慮 建立備用執行個體,並更新應用程式的連線設定以指向該備用執行個體。 這確保您在開始升級前擁有最新版本的資料庫副本。 若就地升級未能成功完成,備用實例亦可被提升並用作主實例。

在原地進行主要版本升級時,來源執行個體及其唯讀複本將失去複寫功能,且升級完成後不會自動恢復複寫(請注意版本變更會導致它們不相容)。 然而,唯讀副本仍可作為獨立執行個體完全正常運作。 因此,您隨時都能安全地將唯讀複本提升為主實例,此操作與升級結果無關。 若升級失敗,可透過提升唯讀副本的狀態來快速恢復資料庫。