IBM Cloud Docs
配置唯讀副本

配置唯讀副本

您可以將您的IBM Cloud® Databases for MySQL部署設定為另一個Databases for MySQL部署的唯讀副本。

唯讀副本設定為使用非同步複製將所有資料從來源實例複製到副本部署。 顧名思義,只讀副本支援讀取事務,可用於平衡同時具有大量寫入和大量讀取操作的資料庫。 如果來源資料庫執行個體發生故障,您也可以使用唯讀副本升級來復原資料。 只讀副本具有單一MySQL資料成員,並且 按照與來源資料庫執行個體相同的每個成員消耗費率 進行計費。

閱讀複製的注意事項

  • 唯讀副本可以存在於與來源資料庫執行個體相同的區域中,也可以存在於不同的區域中,從而使您的資料能夠跨區域複製。

  • 只讀副本必須與其來源資料庫實例具有相同的主要版本。

  • 只讀副本上的備份已停用。 僅在來源資料庫執行個體上進行備份。

  • 不支援將讀取複製傳入或傳出支援歐盟雲的區域(目前 eu-de )。 它在這些地區得到支持。

  • 每個來源實例的唯讀副本數量限制為 5 個。

  • 只讀副本不參與來源資料庫執行個體的選舉,並且不會自動故障轉移到唯讀副本。 將唯讀副本升級為完整部署是一項由使用者啟動的手動任務。

  • 只讀副本的最小大小為 2 GB RAM 和 20 GB 磁碟。 即使您的來源資料庫執行個體部署較小,情況也是如此。

  • 只讀副本不會自動縮放以匹配來源資料庫實例。 如果您儲存的資料量超出了指派給部署的磁碟容量,請擴充唯讀副本上的磁碟,然後擴充來源資料庫執行個體上的磁碟。 首先擴充唯讀副本可確保唯讀副本上的空間不會耗盡。 如果您為了效能而非空間而擴展來源資料庫實例的磁碟,則無需擴充唯讀副本。

  • 複製是異步的,並且可能會出現複製延遲。 預設情況下,主節點和副本節點之間沒有關於一致性的通訊。 只讀副本可能遠遠落後,需要重新同步。 當副本位於地理位置遠離其來源資料庫執行個體的區域時,複製延遲可能會更大。

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

領袖

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

副本之前的複製窗格
副本之前的複製窗格

如果某個部署是領導者並且已附加一個唯讀副本,則_「複製」_窗格將包含一個副本部署清單以及指向每個副本部署的連結。

附加到領導者的副本清單
附加到領導者的副本清單

配置唯讀副本

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

如果您使用 Key Protect,則僅在從 CLI 和 API 進行設定時才支援自帶金鑰 (BYOK)。 否則,只讀副本將使用產生的金鑰進行加密。

透過 API 或 CLI 進行配置

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

例如,要透過 CLI 設定只讀副本,

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

使用相同的參數透過資源控制器 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>",
    "target": "<region>",
    "resource_group": "<your_resource_group_id>",
    "resource_plan_id": "databases-for-mysql-standard",
    "remote_leader_id": "crn:v1:bluemix:public:databases-for-mysql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71819::",
    "members_memory_allocation_mb": "2048",
    "members_disk_allocation_mb": "10240"
  }'

對於 CLI 和 API 命令,您必須指定 RAM 和磁碟量,請記住最小大小為 2 GB RAM 和 20 GB 磁碟。 您可以選擇指定只讀副本是使用公共端點還是專用端點。 您無法指定唯讀副本的版本。 此版本會自動設定為與來源資料庫執行個體部署相同的主要版本。

只讀副本

在唯讀副本的_「唯讀副本_」標籤上,_「複製」_窗格包含其名稱和區域,以及其來源資料庫執行個體的名稱和區域。 它還具有用於重新同步只讀副本併升級它的按鈕。

只讀副本的複製窗格
只讀副本的複製窗格

檢查複製狀態

不會自動監視複製狀態,您必須監視複製。

您可以從來源資料庫實例中檢查帶有 mysql 的唯讀副本的複製狀態以及複製延遲。 使用 管理員憑證透過 mysql 連線到來源資料庫執行個體部署。 連線後,執行以下命令:

mysql> SHOW SLAVE STATUS \G

命令狀態報告中的關鍵欄位是 Seconds_Behind_Master: _。 這是複製 SQL 執行緒處理來源二進位日誌落後的秒數。

有關更多信息,請參閱MySQL's檢查複製狀態

讀取副本使用者和權限

  • 來源資料庫實例上的任何使用者(即使是在預配只讀副本之前存在的使用者)都可以使用與來源資料庫實例上的物件相同的權限登入唯讀副本並在其上執行讀取操作。

  • 如果您有多個唯讀副本附加到來源資料庫實例,則也會在所有其他唯讀副本上建立在來源上建立的使用者。

  • 當唯讀副本升級為獨立部署時,在來源資料庫執行個體上建立的使用者將保留在唯讀副本上,包括 admin 使用者。 升級唯讀副本時,來源資料庫執行個體上所有使用者的使用者和權限都會轉移到升級的部署。

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

  • 在唯讀副本上建立的唯讀副本使用者能夠使用 SELECT 權限連線到來源資料庫實例。

重新同步唯讀副本

如果您需要重新同步只讀副本,請按一下重新同步只讀副本按鈕。 重新同步是一種破壞性操作,執行重新同步會破壞並重建唯讀副本中的資料。 執行重新同步時,唯讀副本無法執行任何其他操作或執行任何查詢。 查詢不會重新路由到來源資料庫實例,因此在完成重新同步之前,與唯讀副本的任何連線都會失敗。

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

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

ibmcloud cdb read-replica-resync <deployment name>

若要透過 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 <>'

提升唯讀副本

只讀副本能夠提升為獨立的集群,可以接受寫入操作和讀取操作。 如果來源資料庫執行個體發生問題,只讀副本可以提升為獨立叢集並開始接受來自應用程式的寫入。

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

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

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

一旦唯讀副本升級為獨立部署,就無法將其還原為唯讀副本,也無法重新加入來源資料庫執行個體。

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

ibmcloud cdb read-replica-promote <deployment name>

若要透過 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 分鐘後就會出現讀/寫可用性,但有一個主要警告:在配方完成之前,資料庫並不具有高可用性。

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

  • 只讀副本是單一成員。 升級時,將新增兩個附加成員作為副本。 這所需的時間取決於資料的大小。 隨著資料庫的成長,創建可能需要大量時間。 在兩個副本的建立完成之前,升級操作不會完成。
  • 如果您選擇將備份作為促銷的一部分,則該備份也需要在配方完成之前完成。 同樣,這取決於資料庫的大小。

請記住,在升級方案完成之前,不存在任何高可用性成員。 同樣,如果您選擇進行初始備份,則在第二點完成或建立手動備份之前不存在備份。