Cloud SQL 是 GCP 提供針對 MySQL、PostgreSQL、SQL Server 推出的完全託管關係型資料庫服務,讓使用者能夠從資料庫的管理任務中解放出來,花更多時間在資料本身而非硬體維護。雲端資料庫只是在雲端上建置、部署和存取的資料庫而已,其底層操作和傳統地端資料庫完全一樣,對應其他的雲端服務是 :

  • Amazon Web Services (AWS) : Amazon RDS
  • Microsoft Azure : Azure SQL Database for MySQL/PostgreSQL

Cloud SQL 除了可快速啟用資料庫,還可以同時整合讀寫分離、同步、自動備份、監控等等,也讓我們能更安全便捷地整合 GCP 的其它雲端產品例如:「創建 Table 並從 Cloud Storage 導入 .sql 資料」、「使用 Cloud SQL Auth Proxy 連結到 Compute Engine」、「連接到 BigQuery 來使用聯合查詢」等等。


Cloud SQL Instance

每個 Cloud SQL Instance 都運行在 GCP 託管的 VM 內,每個 VM 都運行著 Database-Program 和其 Service-Agent(例如 Logging 和 Monitoring)。 若有啟動 High-Availability 選項則還會在另一個 Zone 中提供備用 VM,該 VM 具與主 VM 配置相同。

  • Persistent Disk 附加在 VM 上提供資料庫 Scalable 和 Durable。而 Cloud SQL 的自動擴充是指儲存空間的自動擴充,並不是自動增加硬體的 CPU 跟 Memory,對於 CPU 跟 Memory 是需要人工手動去調整的

  • Static-IP-Address 位於每個 VM 的前面,以確保應用程式連接到的 IP 在 Cloud SQL Instance 的整個生命週期內都存在

雖然上述有提到 VM ,但這個 VM 並不是我們在 compute engine 上開的機器,是 GCP 專門為 SQL 相關軟體運行所提供的環境,我們是無法看到關於該環境的任何底層訊息的

Cloud SQL 提供的功能

High Availability(HA)

在剛開始建立 Cloud SQL 時就需要設定是否開啟 HA ,可以把開啟 HA 服務的 Cloud SQL Instance 稱為一個 Regional Instance,其 Instance 的建立是按照 Zone 去部署的,而 HA 的實踐便是在不同的 Zone 進行 Standby Instance 的部署,並搭配 Regional Persistent Disk 達到資料的跨 Zone 同步寫入。

當 Primary Instance 所在的 Zone 的機房發生異常或是主機本身出現異常如記憶體不足時,Regional Persistent Disk 便會掛載至 Standby Instance 來提供服務。

雖然 HA 提供了強大的備援能力,但相對的也需要為此支付額外的設置費用,需審慎評估自身需求選擇是否開啟 HA

Data Protection

在剛開始建立 Cloud SQL 時有一個 Data Protection 設定,這個就是關於 BackupsPoint-in-time Recovery 的設定 :

  • Point-In-Time Recovery (PITR)

    PITR 其實就是透過 Binlog 這個紀錄資料庫 Transaction 操作細節的二進制 Log,來達成倒回資料庫狀態至特定時間點。一般是在系統發生錯誤導致資料遺失時,用來恢復資料庫至錯誤發生前的狀態,減少因錯誤產生的資料缺失成本。

    Cloud SQL Instance 創建時,預設就會開啟這項服務。而開啟 Point-in-time Recovery 也代表會收集額外的 Binlog 產生額外的儲存成本,操作時需特別注意 Binlog 的儲存時效設定

  • Backups

    關於備份在 Cloud SQL 上提供了 On-demand 與 Automated 兩種備份機制 :

    • On-demand 提供隨時的手動備份,該備份不會被自動刪除,可長時間保存,通常建議在要做一些對資料庫有影響的操作前,執行 On-demand 這項功能來保護資料

    • Automated 則是透過設定執行備份的 Backup Window,指定要於哪個時間內執行自動備份。該備份預設保存 7 天,但保留時間可透過修改設定來指定,一般會建議 Backup Window 的設定時段應選在資料庫操作頻率最低的時間段執行,避免影響效能

Replica

建立 Cloud SQL 建立完成之後,可以去 Primary Instance 內設定 Replica,但在建立主 primary instance 的 Replica 之前有一些前置條件:

  • 必須先啟用 backups
  • 必須先啟用 PITR
  • 至少先創建一個 backup

關於 Cloud SQL 的 Replication 有蠻多種類的如「 Read replicas 」、 「 Cross-region read replicas 」、 「 Cascading read replicas 」、 「 External read replicas 」等等,其中先介紹比較常用的兩個:

  • Read Replica

    Read Replica 基本上是精確複製 Primary-Instance 上的資料,但它不能 Write 寫資料,只會針對讀取資料庫的請求專門處理,減少對 Primary-Instance 的負荷,增加服務效能,標準的讀寫分離應用。

  • Cross-Region Read Replica

    上面有提到簡單的 Read Replica ,但特別注意單純 Read replicas 不提供 failover capability,並沒有故障故障轉移功能,而「 Cross-Region Read Replica 」能進一步規劃備援或異地備份方案,能在 Primary-Instance 異常事件發生時,快速將其 Replica 轉為新的 Primary-Instance。

Cloud SQL 的連線

Cloud SQL 開起來之後,因為它概念上並不是給一個裝了 DB 的主機讓你操控,故沒有 SSH 連進去的功能,我們沒有辦法直接進入到它的 VM 底層。在考慮如何連接到 Cloud SQL Instance 時有很多方式和其優缺點:

  • 是否讓 DB 可以從 public internet 連線,還是只要使用 private VPC
    • Internal: VPC-only (Private) IP address
    • External: internet-accessible (Public) IP address

    Cloud SQL Instance 可以同時具有 External 和 Internal 位址。

  • 是打算寫自己的 connection code,還是使用例如其他連接工具

    Database connections 都會消耗資源,故如需自己寫程式來連線 DB 都要注意連接管理,減少超過 Cloud SQL 連接限制的可能。還可以使用以下工具 :

    • Cloud SQL Auth Proxy
    • Database administration 等 DB Client 端產品,比如說常見的產品有 MySQL WorkbenchSQL Server SSMS 等等,可以來觀看 DB 資訊。

    目前很不錯解決方案是使用 Cloud SQL Auth Proxy 進行連線,此解決方案提供 IAM permissions 使用 Service-Account 的 Credential 來連線,Cloud-SQL-Auth-Proxy 也是 GCP 官方提供且推薦的認證連線方式

  • Authenticate

    單純 Granting-Access 給 application 並不會自動啟用 User-Account 使之可以連線 DB ,還是需要 configure default user account :

    • Built-in database authentication 使用 username/password
    • 是否要求 SSL/TLS 進行加密,或者允許未加密連線

參考資料