本文說明如何設定 PostgreSQL 適用的 Cloud SQL 以供實際使用。Cloud SQL for PostgreSQL 是全代管的 RDBMS 服務,可與 Google Cloud生態系統整合。PostgreSQL 適用的 Cloud SQL 提供多項重要功能和能力:
- 透過Google Cloud的受管理安全性功能 (包括 VPC 和靜態資料和傳輸中資料的自動加密),為全球多個應用程式和使用者提供服務。
- 支援使用主要和備用執行個體的高可用性架構,以及兩者之間的自動容錯移轉。
- 在相同資料庫叢集中,啟用主要節點與唯讀備用資源之間的讀/寫分離功能,以支援分散式資料庫工作負載。
- 支援與 Cloud Storage 整合的自動備份功能,以及自動資料庫維護功能。
- 支援各種線上交易處理 (OLTP) 工作負載。
部署 PostgreSQL 適用的 Cloud SQL 執行個體
您可以使用 Google Cloud 控制台或 Google Cloud CLI,在幾個步驟內設定 PostgreSQL 適用的 Cloud SQL 執行個體。這裡會說明這兩種方法。
控制台
前往 Google Cloud 控制台的「SQL」>「Instances」 頁面。
依序點選「建立執行個體」和「選擇 PostgreSQL」。
在「Create a PostgreSQL instance」(建立 PostgreSQL 執行個體) 頁面中提供下列詳細資料:
- 執行個體 ID:輸入執行個體的名稱。執行個體名稱一經設定即無法變更。
- 預設使用者密碼:選擇 postgres 使用者密碼做為預設管理員帳戶。(您可以在 PostgreSQL 執行個體部署後建立其他使用者)。
- 「區域」和「可用區」:選取區域和可用區。最佳做法是在與相關 Google Cloud 服務 (例如應用程式) 位於同一區域或使用者附近的地理位置部署 PostgreSQL 例項,以便縮短資料處理的延遲時間。選取區域後,之後就無法修改。
- 資料庫版本:選擇最新版本,或您需要的最新可用版本。
按一下「Create」,即可部署 PostgreSQL 執行個體。或者,您也可以按一下「顯示設定選項」來設定其他設定。
其他設定選項:
連線能力:通常,您會透過公開 IP 位址、私人 IP 位址和授權網路,將 PostgreSQL 執行個體連線至網路。您可以設定允許連線的授權網路,藉此建立遠端連線,例如核准來自用戶端特定 IP 位址的連線。
機器類型和儲存空間:根據已配置的資源 (vCPU、RAM)、儲存空間類型 (SSD 或 HDD) 和儲存空間容量,選擇機器類型。增加儲存空間容量後,資料庫的磁碟總處理量 (MB/s) 和讀取/寫入 IOPS 也會隨之增加。根據預期的磁碟處理量和 IOPS 需求調整儲存空間容量。
自動備份和高可用性:您可以使用預設啟用的自動備份功能,定義自動備份作業的時間範圍。此外,您還必須使用時間點復原選項 (使用預先寫入記錄檔),才能建立唯讀備用資源。這些記錄會定期更新,並占用儲存空間。為避免發生意外的儲存空間問題,建議您在使用指定時間點還原功能時,啟用自動增加儲存空間的功能。根據預設,高可用性 (多可用區) 會停用。如要啟用自動容錯功能,請選取「高可用性 (地區性)」選項。
旗標:此設定會指定 Cloud SQL 方法,用於控制執行個體的設定和參數;這相當於未管理 PostgreSQL 執行個體的
postgresql.conf
檔案。如需完整清單,請參閱產品說明文件。變更標記的值或設定新標記,可能需要重新啟動執行個體。維護:這個部分會指定您偏好的維護作業時間窗口,包括錯誤修正和次要版本升級。請注意,維護作業通常需要重新啟動執行個體,且可能會造成短暫的服務中斷。您可以訂閱電子郵件通知,以便在即將進行的維護作業發生時收到通知。
標籤:在這個部分,您可以定義鍵/值組合,以便將 PostgreSQL 執行個體分類,例如:
gcloud
建立 PostgreSQL 執行個體:
gcloud sql instances create postgresql01 \ --cpu=2 \ --memory=7680MB \ --region=us-central1 --zone=us-central1-a
為 PostgreSQL 預設使用者指派密碼 (語法範例):
gcloud sql users set-password postgres \ --instance INSTANCE_NAME \ --password PASSWORD
您可以指定下列額外選項:
- 資料庫版本:支援的 PostgreSQL 版本之一。
- 儲存空間類型:儲存空間類型為 SSD 或 HDD。
- 儲存空間容量:執行個體的初始儲存空間設定。
- 自動增加儲存空間:Cloud SQL 自動化功能,可在可用空間即將用盡時新增額外儲存空間。
- 高可用性:Cloud SQL 高可用性。
- 自動備份:備份的開始時間範圍。
- 時間點復原:時間點復原和預先寫入記錄。
- 維護期間:Cloud SQL 可執行中斷性維護作業的一小時時段。
- 維護時間:在 PostgreSQL 例項上執行更新的偏好時間。您可以為早期更新指定「預覽」,或為後續更新指定「正式版」。
- 資料庫旗標:用於控制設定和參數的 PostgreSQL 資料庫旗標。
下列
gcloud
指令會建立 PostgreSQL 適用的 Cloud SQL 執行個體,並提供一些額外的選項:gcloud sql instances create postgresql01 \ --cpu=2 \ --memory=7680MB \ --region=us-central1 \ --zone=us-central1-a \ --database-version=POSTGRES_12 \ --storage-type=SSD \ --storage-size=100 \ --storage-auto-increase \ --availability-type=regional \ --backup-start-time=23:30 \ --enable-point-in-time-recovery \ --maintenance-window-day=sun \ --maintenance-window-hour=11 \ --maintenance-release-channel=production \ --database-flags max_connections=100
如需詳細資訊,請參閱建立執行個體。
選取的執行個體
選取執行個體或指定大小時,請選取可在 PostgreSQL 適用的 Cloud SQL 上支援 Oracle® 工作負載的機器類型。執行個體類型可分為兩個主要群組:
- 共用核心機器:經濟實惠。
- 採用專屬核心的執行個體:支援多個 vCPU 和記憶體比率。
如要進一步瞭解執行個體類型,請參閱 Cloud SQL 定價。
如要為執行個體設定大小,請先分析來源資料庫所分配及使用的資源。您可以從 V$OSSTAT
系統檢視畫面或 Oracle AWR 報表取得 Oracle 資料庫資源設定 (請參閱以下範例):
實體記憶體 (資料庫伺服器中的實體記憶體總位元組數):
SQL> SELECT ROUND(MAX(VALUE)/1024/1024/1024) AS MEM_SIZE_GB
FROM V$OSSTAT
WHERE STAT_NAME = 'PHYSICAL_MEMORY_BYTES';
已分配的記憶體:
SQL> SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER
WHERE NAME LIKE '%sga%' OR NAME LIKE '%memory%';
CPU 核心 (可用的 CPU 核心數):
SQL> SELECT VALUE FROM V$OSSTAT
WHERE STAT_NAME = 'NUM_CPU_CORES';
CPU 核心 (由使用 V$LICENSE
檢視畫面的 Oracle 例項識別):
SQL> SELECT CPU_CORE_COUNT_CURRENT FROM V$LICENSE;
Oracle AWR 報表資源範例 (Oracle AWR 報表可提供有關特定 Oracle 執行個體工作負載特性的額外洞察資訊):
取得來源資料庫的資源資訊後,建議您選擇最相符的 Cloud SQL 執行個體類型,並執行一些基準測試。基準測試結果可協助您確定要選取哪些執行個體。
高可用性設定
如要實作災難復原解決方案,Cloud SQL for PostgreSQL 提供高可用性功能,類似於 Oracle 的 Data Guard,可從叢集的主要執行個體自動容錯移轉至待命執行個體。備援執行個體位於與主要執行個體相同地區的不同區域中。待命執行個體會透過主要和待命執行個體的永久磁碟之間的同步複製保持同步。這個方法可確保對主要資料庫所做的所有資料修改也套用至待命資料庫。
在發生主要故障 (例如無回應的執行個體或區域層級故障) 時,Cloud SQL 會執行自動容錯移轉。主要執行個體會透過心跳監控,心跳的間隔為 1 秒,如果在 60 秒內未收到來自主要執行個體的心跳,就會啟用容錯機制。此時,主要執行個體會移轉至待命機器,並向應用程式或用戶端提供資料存取權,而現有的讀取用途備用機器則會繼續運作。請注意,與 Active Data Guard 不同,待命執行個體在做為待命時,不會開放讀取作業;在 Cloud SQL 中,只有唯讀備用資源可用於從主要資料庫卸載讀取作業。
您可以在建立執行個體時,或針對現有的 PostgreSQL 執行個體啟用 PostgreSQL 適用的 Cloud SQL 高可用性 (HA) 功能。步驟如下:
控制台
- 在執行個體建立頁面上,依序點選「顯示設定選項」「自動備份和高可用性」,然後選取「高可用性 (區域)」選項。
- 如為現有的 PostgreSQL 執行個體,請按照前述步驟編輯 PostgreSQL 執行個體。這項操作需要重新啟動資料庫。
如要啟動測試用容錯移轉,請前往「Cloud SQL」頁面,然後按一下「容錯移轉」。
您可以以相同方式啟用容錯回復功能。
gcloud
將
availability-type
參數設為regional
,即可啟用高可用性:gcloud sql instances create postgresql01 \ --cpu=2 \ --memory=7680MB \ --region=us-central1 \ --zone=us-central1-a \ --availability-type=regional
檢查現有 PostgreSQL 執行個體是否已設定 HA:
gcloud sql instances describe INSTANCE_NAME
如果這項指令的輸出內容包含
availabilityType: REGIONAL
,表示 HA 已啟用。如果輸出內容包含availabilityType: ZONAL
,表示 HA 尚未設定,可以使用patch
指令啟用:gcloud sql instances patch INSTANCE_NAME --availability-type REGIONAL
啟動從主要資料庫移轉至待命資料庫的容錯測試:
gcloud sql instances failover PRIMARY_INSTANCE_NAME
如要回復,請在新的主要節點上執行相同的容錯移轉指令。
管理員使用者和帳戶
任何 PostgreSQL 適用的 Cloud SQL 安裝作業都會附帶兩個預設 PostgreSQL 使用者帳戶。這些帳戶分別為 postgres
和 cloudsqlimportexport
。
postgres 帳戶
postgres
帳戶是管理員帳戶,相當於 Cloud PaaS 中的 Oracle SYS
或 SYSTEM
使用者。由於 PostgreSQL 適用的 Cloud SQL 是一項代管服務,因此 postgres
使用者 (與 Oracle SYS
或 SYSTEM
使用者不同) 無法存取需要進階權限的特定系統程序和資料表。
postgres
使用者屬於 cloudsqlsuperuser
角色,並具有下列屬性 (權限):CREATEROLE
、CREATEDB
和 LOGIN
。且不含 SUPERUSER
或 REPLICATION
屬性。
cloudsqlimportexport 帳戶
cloudsqlimportexport
帳戶會以 CSV 匯入/匯出作業所需的最低權限組合建立。您可以選擇自行建立使用者來執行這些作業,但如果您沒有建立使用者,系統會使用預設的 cloudsqlimportexport
使用者。cloudsqlimportexport
使用者是系統使用者,您無法直接使用。
帳戶管理 (新增、刪除或變更密碼)
帳戶管理作業包括建立新使用者帳戶、修改現有帳戶的密碼,以及刪除不再需要的帳戶。您可以透過 Google Cloud 控制台、gcloud
工具或 PostgreSQL 用戶端執行這些帳戶作業。
控制台
在 Google Cloud 控制台中列出現有帳戶:前往 Cloud SQL 控制台> 選取 PostgreSQL 執行個體>使用者。
按一下帳戶旁邊的三點 (「更多」) 圖示,即可修改帳戶密碼或徹底刪除帳戶。
在這個畫面中,您可以按一下「Create user account」建立新的 PostgreSQL 使用者。
gcloud
列出現有的使用者帳戶:
gcloud sql users list --instance=postgresql01
輸出結果會與下列內容相似:
NAME HOST Postgres
建立
appuser
使用者帳戶、設定密碼,然後刪除appuser
:gcloud sql users create appuser \ --instance=postgresql01 --password=PASSWORD gcloud sql users set-password appuser \ --host=% --instance=postgresql01 --prompt-for-password gcloud sql users delete appuser --instance=postgresql01
PostgreSQL
監控和警示
Cloud Logging 是 Google Cloud的主要記錄工具。可用於收集及查看 PostgreSQL 適用的 Cloud SQL 等資源的各種監控記錄。
您可以使用 Cloud Logging 查看 Cloud SQL for PostgreSQL 記錄,並依事件層級 (例如「重要」、「錯誤」或「警告」)、事件時間範圍和自由文字搜尋進行篩選,如以下螢幕截圖所示。
PostgreSQL 資料庫執行個體監控
Oracle 的主要監控工具是 Enterprise Manager 和 Grid/Cloud Control。這些工具可讓您在資料庫工作階段和 SQL 陳述式層級,進行即時資料庫執行個體監控。
PostgreSQL 適用的 Cloud SQL 透過 Google Cloud 控制台提供類似的監控功能。您可以從這裡取得資料庫執行個體的摘要檢視畫面,包括 CPU 使用率、儲存空間用量、記憶體用量、讀取/寫入作業、有效連線、每秒交易次數,以及入站/出站位元組。請注意,Google Cloud Observability 為 Cloud SQL for PostgreSQL 提供額外的監控指標,例如主資料庫和讀取副本之間的自動備援要求和複寫延遲。
以下範例圖表顯示過去 6 小時內每秒的交易次數:
監控讀取備用資源
您可以透過 Google Cloud 控制台監控唯讀備用資源,方法與監控主要執行個體相同。我們提供特定指標,可用於檢查主要執行個體與唯讀備用資源執行個體之間的複製狀態。這些指標可用於在Google Cloud 控制台中填入讀取/複本執行個體總覽頁面。
或者,您也可以透過指令列檢查複製狀態:
gcloud sql instances describe REPLICA_NAME
第三個選項是透過 PostgreSQL 用戶端檢查複製狀態。下列 PostgreSQL 指令可檢查讀取/複本狀態:
postgres=> \x on Expanded display is on. postgres=> select * from pg_stat_replication; -[ RECORD 1 ]----+------------------------------------------- pid | 74733 usesysid | 16388 usename | cloudsqlreplica application_name | PROJECT_ID:REPLICA_NAME client_addr | REPLICA_IP client_hostname | client_port | 41660 backend_start | 2020-09-28 06:59:38.783981+00 backend_xmin | state | streaming sent_lsn | 0/2939FFA8 write_lsn | 0/2939FFA8 flush_lsn | 0/2939FFA8 replay_lsn | 0/2939FFA8 write_lag | flush_lag | replay_lag | sync_priority | 0 sync_state | async reply_time | 2020-09-28 07:17:52.714969+00 postgres=>
PostgreSQL 資料庫監控
本節將說明 PostgreSQL 資料庫管理員視為例行工作的其他監控工作。
工作階段監控
您可以查詢稱為「V$」的動態效能檢視畫面,監控 Oracle 工作階段。V$SESSION
和 V$PROCESS
檢視畫面通常用於透過 SQL 陳述式,取得目前資料庫活動的即時洞察資料。您可以透過類似的方式,透過 PostgreSQL 指令和 SQL 陳述式,監控 PostgreSQL 中的工作階段活動。
PostgreSQL pg_stat_activity
動態檢視畫面會提供目前資料庫工作階段活動的詳細資訊:
postgres=> \x on postgres=> select * from pg_stat_activity where backend_type = 'client backend' and usename != 'cloudsqladmin'; -[ RECORD 1 ]----+----------------------------------------------------------------------------------------------------- datid | 14052 datname | postgres pid | 74750 usesysid | 16389 usename | postgres application_name | psql client_addr | CLIENT_IP client_hostname | client_port | 51904 backend_start | 2020-09-28 07:01:30.214099+00 xact_start | 2020-09-28 07:28:48.982115+00 query_start | 2020-09-28 07:28:48.982115+00 state_change | 2020-09-28 07:28:48.982117+00 wait_event_type | wait_event | state | active backend_xid | backend_xmin | 88513 query | select * from pg_stat_activity where backend_type = 'client backend' and usename != 'cloudsqladmin'; backend_type | client backend postgres=>
長時間交易監控
如要找出可能導致效能問題的長時間執行交易,請查詢 pg_stat_activity
動態檢視畫面。您可以對 query_start
和 state
等欄套用適當的篩選器,找出執行時間過長的查詢。
門鎖監控
您可以透過 pg_locks
動態檢視畫面監控資料庫鎖定,該畫面會提供任何可能導致效能問題的鎖定爭用情形即時資訊。
快訊
除了監控和記錄外,您還可以使用快訊。您也可以為條件建立快訊。
資源調度
PostgreSQL 適用的 Cloud SQL 支援垂直和水平的調整選項。
您可以透過為 Cloud SQL 執行個體新增更多資源來進行垂直擴充,例如增加執行個體指派的 CPU 和記憶體數量。執行個體的網路處理量取決於您為 CPU 和記憶體選擇的值。
Cloud SQL 最多可支援 30 TB 的儲存空間。增加儲存空間容量通常會提高執行個體的處理量和磁碟 IOPS。請注意,Cloud SQL 執行個體的網路處理量包括讀取/寫入的資料量 (磁碟處理量)、查詢內容、計算內容,以及未儲存於資料庫的其他資料。在垂直擴充 Cloud SQL 執行個體時,請務必考量這些因素。
您可以建立唯讀備用資源來水平擴充。您可以使用唯讀備用資源,將讀取工作負載擴展至不同的 Cloud SQL 執行個體,而不會影響主執行個體的效能和可用性。
備份與還原
PostgreSQL 適用的 Cloud SQL 有兩種資料庫備份方法:隨選和自動化。您隨時可以執行隨選備份,且備份會保留至您刪除為止。自動備份會使用 4 小時的備份時間,並保留 7 天。
您可以將 PostgreSQL 適用的 Cloud SQL 資料庫備份還原至相同的執行個體,覆寫現有資料,或還原至新的執行個體。此外,只要啟用時間點復原功能並啟用自動備份選項,您就能使用 PostgreSQL 適用的 Cloud SQL 將 PostgreSQL 資料庫還原至特定時間點。
PostgreSQL 適用的 Cloud SQL 提供資料庫複製功能。複本必須從主要執行個體建立 (也就是無法從備用資源建立)。您可以透過Google Cloud 控制台或 gcloud CLI 執行資料庫備份、還原和複本作業。
自動化
您可以使用 Cloud SQL Admin API,完全自動化管理 PostgreSQL 適用的 Cloud SQL 執行個體。Cloud SQL Admin API 是用於控制不同類型資源的 REST API,例如執行個體、資料庫、使用者、標記、作業、SslCerts、層級和 BackupRuns。詳情請參閱 API 說明文件。
後續步驟
- 進一步瞭解 PostgreSQL 適用的 Cloud SQL 使用者帳戶。
- 進一步瞭解 Oracle 使用者適用的 PostgreSQL 適用的 Cloud SQL:
- 探索 Google Cloud 的參考架構、圖表和最佳做法。歡迎瀏覽我們的雲端架構中心。