本頁說明如何管理唯讀副本。這些作業包括停用及啟用複製作業、升級備用資源、設定平行複製作業,以及檢查複製狀態。
如要進一步瞭解複製功能的運作方式,請參閱 Cloud SQL 中的複製功能。
停用複製功能
備用資源預設會在啟用複製的情況下啟動,但是您也可以將其停用以進行其他工作,例如進行偵錯作業或分析執行個體的狀態。準備就緒後,請明確重新啟用複製功能。停用或重新啟用複製功能不會重新啟動備用資源執行個體。
停用複製作業不會停止備用執行個體,而是會將其變成唯讀執行個體,不再從主要執行個體複製資料。系統會繼續收取執行個體費用。在已停用的備用資源上,您可以重新啟用複製功能、刪除備用資源,或將備用資源升級為獨立執行個體。
如果長時間停用複寫功能,磁碟儲存空間需求可能會增加。舉例來說,執行個體可能會累積交易記錄,以便您在重新啟用複製作業時繼續複製。為避免增加磁碟儲存空間需求,請考慮升級副本或建立主要執行個體的副本,而非長時間停用複寫功能。
停用複製功能:
控制台
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
- 按一下備用資源執行個體的名稱來選取備用資源執行個體。
- 按一下按鈕列中的「停用複製功能」。
- 按一下 [確定]。
gcloud
gcloud sql instances patch REPLICA_NAME \ --no-enable-database-replication
REST v1
如要在指令列提示下執行這個 cURL 指令,您可以使用 gcloud auth print-access-token 指令取得存取憑證。您也可以使用 Instances:patch 頁面上的 APIs Explorer 傳送 REST API 要求。
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- replica-name:副本執行個體的名稱
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name
JSON 要求主體:
{ "settings": { "databaseReplicationEnabled": "False" } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
REST v1beta4
如要在指令列提示下執行這個 cURL 指令,您可以使用 gcloud auth print-access-token 指令取得存取憑證。您也可以使用 Instances:patch 頁面上的 APIs Explorer 傳送 REST API 要求。
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- replica-name:副本執行個體的名稱
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name
JSON 要求主體:
{ "settings": { "databaseReplicationEnabled": "False" } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
啟用複製功能
如果備用資源長時間未複製,就需要較長的時間才能趕上主要執行個體。在這種情況下,請刪除副本並建立新的副本。
啟用複製功能:
控制台
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
- 按一下備用資源執行個體的名稱來選取備用資源執行個體。
- 按一下「啟用複製功能」。
- 按一下 [確定]。
gcloud
gcloud sql instances patch REPLICA_NAME \ --enable-database-replication
REST v1
如要在指令列提示下執行這個 cURL 指令,您可以使用 gcloud auth print-access-token 指令取得存取憑證。您也可以使用 Instances:patch 頁面上的 APIs Explorer 傳送 REST API 要求。
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- replica-name:副本執行個體的名稱
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name
JSON 要求主體:
{ "settings": { "databaseReplicationEnabled": "True" } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
REST v1beta4
如要在指令列提示下執行這個 cURL 指令,您可以使用 gcloud auth print-access-token 指令取得存取憑證。您也可以使用 Instances:patch 頁面上的 APIs Explorer 傳送 REST API 要求。
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- replica-name:副本執行個體的名稱
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name
JSON 要求主體:
{ "settings": { "databaseReplicationEnabled": "True" } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
升級備用資源
將唯讀備用資源升級,這樣執行個體就會停止複製資料,並轉換為具備讀寫能力的獨立 Cloud SQL 主要執行個體。
升級後,唯讀備用資源會自動設定備份,但不會自動設定為高可用性 (HA) 執行個體。升級備用資源後,您可以啟用高可用性,做法與任何非備用資源執行個體相同。設定高可用性的唯讀備用資源時,做法與主要執行個體相同。進一步瞭解如何設定高可用性的執行個體。
推送唯讀備用資源前,如果主要執行個體仍可供用戶端使用,請執行下列操作:
- 停止對主要執行個體的所有寫入作業。
- 檢查備用資源的複製狀態 (請按照「psql Client」分頁中的操作說明進行)。
- 確認備用資源正在複製,然後等待
replay_lag
指標回報的複製延遲為 0。
否則,新升級的執行個體可能會遺失部分已提交至主要執行個體的交易。
如要將副本升級為獨立執行個體,請按照下列步驟操作:
控制台
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
- 按一下備用資源執行個體的名稱來選取備用資源執行個體。
- 按一下「推送備用資源」。
- 按一下 [確定]。
gcloud
gcloud sql instances promote-replica REPLICA_NAME
REST v1
如要在指令列提示下執行這個 cURL 指令,您可以使用 gcloud auth print-access-token 指令取得存取憑證。您也可以使用 Instances:promoteReplica 頁面上的 APIs Explorer 傳送 REST API 要求。
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- replica-name:副本執行個體的名稱
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name/promoteReplica
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
REST v1beta4
如要在指令列提示下執行這個 cURL 指令,您可以使用 gcloud auth print-access-token 指令取得存取憑證。您也可以使用 Instances:promoteReplica 頁面上的 APIs Explorer 傳送 REST API 要求。
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- replica-name:副本執行個體的名稱
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name/promoteReplica
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
確認升級的執行個體設定正確無誤。 強烈建議您視需求考慮將執行個體設為高可用性。
檢查複製狀態
使用 Google Cloud 控制台檢視副本執行個體,或使用管理用戶端登入執行個體時,您會取得複寫詳細資料,包括狀態和指標。使用 gcloud CLI 時,您會取得複製設定的簡短摘要。
檢查 Cloud SQL 副本執行個體的複製狀態前,請先使用 gcloud sql instances describe
指令顯示執行個體的狀態。因此,您可以查看備用執行個體是否已啟用複製功能。
副本執行個體可用的指標如下:(進一步瞭解適用於所有執行個體的其他指標,包括非副本執行個體。)
指標 | 說明 |
---|---|
複製狀態 ( cloudsql.googleapis.com ) |
指出複製作業是否正從主要執行個體將記錄串流至副本。可能的值包括:
這項指標會在下列情況回報
|
複製延遲時間 ( cloudsql.googleapis.com ) |
備用資源狀態落後主要執行個體狀態的時間長度。這是指 (1) 目前時間與 (2) 主要項目在副本上套用目前交易時的原始時間戳記之間的差異。具體來說,即使副本已收到寫入作業,但如果尚未將寫入作業套用至資料庫,寫入作業仍可能計為落後。 如果是層疊式副本,系統會分別監控每個主要副本配對,且沒有單一指標可產生端對端 (主要到副本) 的延遲。 詳情請參閱「複製延遲」。 |
延遲位元組 ( cloudsql.googleapis.com ) |
回報唯讀副本比主要副本落後多少位元組。每個副本都會產生四個時間序列,顯示主要副本的預先寫入記錄中尚未…
這些指標的用途各不相同。舉例來說, 這些指標的計算方式是比較 |
最大延遲位元組數 ( cloudsql.googleapis.com ) |
如果是外部主要執行個體的副本,則會回報複製到這個執行個體的所有資料庫中,最長的複製延遲時間 (以位元組為單位)。就每個資料庫而言,這是指主要資料庫預先寫入記錄中的位元組數,這些位元組尚未確認已由副本接收。 這項指標的計算方式是向主要資料庫傳送查詢,比較 |
檢查複製狀態:
控制台
Cloud SQL 會在預設的 Cloud SQL 監控資訊主頁上,回報 Replication State
指標。
如要查看區域內和跨區域副本,以及外部伺服器副本的其他指標,請建立自訂資訊主頁,並在其中新增要監控的指標:
-
前往 Google Cloud 控制台的「Monitoring」頁面。
- 選取「資訊主頁」分頁標籤。
- 按一下「Create dashboard」(建立資訊主頁)。
- 為資訊主頁命名,然後按一下「確定」。
- 按一下 [Add chart] (新增圖表)。
- 在「Resource Type」(資源類型) 中,選取「Cloud SQL Database」(Cloud SQL 資料庫)。
- 請採行下列任一動作:
- 監控複寫狀態指標:在「選取指標」欄位中輸入
Replication state
。然後新增state = "Running"
的篩選條件。如果複製作業正在執行,圖表會顯示 1,否則會顯示 0。 - 如要監控唯讀備用資源的複製延遲 (以位元組為單位):請在「選取指標」欄位中輸入
Lag Bytes
。然後在replica_lag_type = "replay_location"
上新增篩選器。圖表顯示與主要項目上已提交但尚未在副本上重播的交易相關聯的位元組數。 - 如要監控外部主資料庫副本的複製延遲 (以位元組為單位):在「Select a metric」(選取指標) 欄位中輸入
Max Lag Bytes
。圖表顯示與主要項目上已提交但副本尚未確認收到的交易相關聯的位元組數。
gcloud
針對備用資源執行個體,使用以下指令檢查複製狀態:
gcloud sql instances describe REPLICA_NAME
在輸出內容中,找出 databaseReplicationEnabled
和 masterInstanceName
屬性。
如果是主要執行個體,請檢查是否有下列備用資源:
gcloud sql instances describe PRIMARY_INSTANCE_NAME
在輸出內容中,尋找 replicaNames
屬性。
psql 用戶端
部分複製狀態指標是由主要執行個體產生,部分則是由副本產生。如要執行下列步驟,請使用 PostgreSQL 用戶端連線至備用或主要執行個體 (如下所述)。
詳情請參閱「外部應用程式的連線選項」。
- 如要從主要執行個體檢查副本的狀態,請執行下列步驟:
在指令的輸出結果中,尋找下列指標:select * from pg_stat_replication;
client_addr
:副本執行個體的 IP 位址。state
:指出執行中繼記錄檔中事件的 SQL 執行緒是否正在執行。複製作業開始時,這個值為streaming
。replay_lag
:備用資源 SQL 執行緒落後主要執行個體的位元組數。值為O
或少量位元組。
- 如要從副本執行個體檢查副本的狀態,請按照下列步驟操作:
select * from pg_stat_wal_receiver;
在指令輸出中尋找下列指標:
sender_host
:主要執行個體的 IP 位址。status
:指出執行中繼記錄檔中事件的 SQL 執行緒是否正在執行。複製作業開始時,這個值為streaming
。last_msg_send_time
和last_msg_receipt_time
:這兩個時間戳記的差異就是延遲時間。
如要檢查複製作業是否已暫停,請按照下列步驟操作:
select pg_is_wal_replay_paused();
如果複製作業已暫停,值為
t
,否則為f
。如要檢查是否有從主要叢集接收但尚未套用的交易,請按照下列步驟操作:
# for PostgreSQL 9.6 select pg_catalog.pg_last_xlog_receive_location(), pg_catalog.pg_last_xlog_replay_location(); # for PostgreSQL 10 and above select pg_catalog.pg_last_wal_receive_lsn(), pg_catalog.pg_last_wal_replay_lsn();
如果這兩個值相等,表示副本已處理完從主要副本收到的所有交易。
疑難排解
問題 | 疑難排解 |
---|---|
建立唯讀副本時,系統未開始複製作業。 | 記錄檔中可能會有更具體的錯誤。 檢查 Cloud Logging 中的記錄,找出實際錯誤。 |
無法建立唯讀副本 - invalidFlagValue 錯誤。 | 要求中的其中一個標記無效。這可能是您明確提供的旗標,也可能是設為預設值的旗標。 首先,請確認 如果 |
無法建立唯讀副本 - 發生不明錯誤。 | 記錄檔中可能會有更具體的錯誤。
檢查 Cloud Logging 中的記錄,找出實際錯誤。 如果錯誤訊息為 |
磁碟空間已滿。 | 建立副本時,主要執行個體的磁碟大小可能會達到上限。 編輯主要執行個體,將其升級為較大的磁碟大小。 |
磁碟空間大幅增加。 | 如果某個時段未主動用於追蹤資料,PostgreSQL 會無限期保留 WAL 區隔,導致磁碟空間無限擴充。如果您在 Cloud SQL 中使用邏輯複製和解碼功能,系統會自動建立及捨棄複製時段。如要偵測未使用的複寫位置,請查詢 pg_replication_slots 系統檢視畫面,並依 active 欄篩選。未使用過的時段可以捨棄,使用 pg_drop_replication_slot 指令移除 WAL 區段。 |
副本執行個體使用的記憶體過多。 | 副本會使用暫存記憶體快取經常要求的讀取作業,因此使用的記憶體可能比主要執行個體多。 重新啟動副本執行個體,即可回收暫存記憶體空間。 |
複製作業已停止。 | 儲存空間已達上限,且未啟用自動增加儲存空間功能。
編輯執行個體,啟用 |
複製延遲持續偏高。 | 副本的寫入負載過高,如果備用資源上的 SQL 執行緒無法跟上 IO 執行緒,就會發生複製延遲。某些查詢或工作負載可能會導致特定結構定義出現暫時或永久的高複製延遲。複製延遲的常見原因包括:
可能的解決方法包括:
|
在 PostgreSQL 9.6 中重建索引時發生錯誤。 | 您會收到 PostgreSQL 的錯誤訊息,指出需要重建特定索引。這項操作只能在主要執行個體上進行。如果您建立新的副本執行個體,很快就會再次發生相同錯誤。在 PostgreSQL 10 以下版本中,雜湊索引不會傳播至副本。 如果必須使用雜湊索引,請升級至 PostgreSQL 10 以上版本。否則,如果您也想使用副本,請勿在 PostgreSQL 9.6 中使用雜湊索引。 |
主要執行個體上的查詢一律會執行。 | 建立副本後,查詢 SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' 應會在主要執行個體上持續執行。
|
建立副本時發生逾時錯誤。 | 主要執行個體上未提交的長期交易可能會導致唯讀備用資源建立失敗。 停止所有執行中的查詢後,重新建立副本。 |
如果主要執行個體和副本的 vCPU 大小不同,查詢最佳化工具會將 vCPU 大小納入考量,因此可能會發生查詢效能問題。 |
如要解決這個問題,請完成下列步驟:
如果是特定查詢,請修改查詢。舉例來說,您可以變更聯結的順序,看看是否能提升效能。 |
後續步驟
- 瞭解如何建立唯讀副本。
- 進一步瞭解複製的需求與最佳做法。