DBCluster) 適當規劃儲存空間和 Persistent Volume Claim (PVC) 容量。使用 AlloyDB Omni Kubernetes 運算子在 Kubernetes 上部署時,請根據這些大小建議設定磁碟區。
建立 DBCluster 自訂資源時,AlloyDB Omni operator 會根據您在下列欄位中定義的磁碟,佈建 Kubernetes PVC:
- 主要和高可用性 (HA) 待命執行個體:在自訂資源的
spec.primarySpec.resources.disks欄位中設定。DBCluster如果您透過設定spec.availability.numberOfStandbys欄位啟用高可用性,每個待命副本都會使用與主要執行個體相同的磁碟設定。 - 讀取集區執行個體:在每個
DBInstance自訂資源的spec.resources.disks中設定,其中instanceType設為ReadPool。如果省略DBInstance資源的spec.resources區段,讀取集區執行個體會從父項DBCluster資源的spec.primarySpec.resources欄位沿用磁碟設定。
支援的 PVC 磁碟區
AlloyDB Omni 運算子不會同時佈建所有 PVC 磁碟區:
- 一律佈建:運算子一律會為所有主要、高可用性待命和讀取集區資料庫執行個體 Pod 佈建
DataDisk、ObsDisk、BackupDisk和LogDisk。您必須在資訊清單中明確指定DataDisk及其大小。您可以在資訊清單中指定ObsDisk、BackupDisk和LogDisk,也可以不指定。如未提供這些 PVC,如基本安裝資訊清單所示,運算子仍會使用預設大小佈建這些 PVC。 - 預設不會佈建:建立獨立
DBCluster資源或BackupRepoDisk在 Cloud Storage 或 Amazon S3 中儲存備份時,運算子不會佈建磁碟區。只有在建立BackupPlan資源,將備份資料儲存在 Kubernetes 叢集本機時 (也就是沒有遠端backupLocation欄位的BackupPlan資源),這個外掛程式才會佈建備份存放區 Pod 及其BackupRepoDiskPVC。
下表說明 AlloyDB Omni 運算子管理的持續性磁碟區:
| 磁碟名稱 | 掛接路徑 | 目標 Pod | 資訊清單設定 | 佈建行為 | 目的 |
|---|---|---|---|---|---|
DataDisk |
/mnt/disks/pgsql |
資料庫 Pod | 必填 | 一律為每個資料庫 Pod 佈建。 | 儲存 PostgreSQL 資料庫叢集目錄 (PGDATA)、資料表、索引、暫時檔案和作用中的預寫記錄檔 (WAL) 區段。 |
ObsDisk |
/obs |
資料庫 Pod | 選用 (預設值:2Gi) |
一律為每個資料庫 Pod 佈建。 | 儲存可觀測的資料,包括 PostgreSQL 伺服器記錄 (postgresql.log)、pgAudit 記錄 (postgresql.audit)、內部記錄 (postgresql.internal) 和輪替的 .gz 記錄封存檔。 |
BackupDisk |
/backup |
資料庫 Pod | 選用 (預設值:10Gi) |
一律為每個資料庫 Pod 佈建。 | 為資料庫 Pod 的備份作業提供本機暫存目錄。 |
LogDisk |
/archive |
資料庫 Pod | 選用 (預設值:2Gi) |
一律為每個資料庫 Pod 佈建。 | 為自訂或第三方備份輔助容器提供專屬的 WAL 封存目的地。如果未使用自訂 WAL 封存輔助容器,可以從資訊清單中省略這個磁碟,並保留預設的 2Gi 大小。 |
BackupRepoDisk |
/backup |
備份存放區 Pod | 選用 (預設值:10Gi) |
預設不會佈建。只有在 BackupPlan 資源在本機儲存備份時才會佈建 (如果未設定 BackupPlan,或備份使用 Cloud Storage 或 Amazon S3,則不會佈建)。 |
使用本機儲存空間備份時,系統會提供專屬磁碟區,用於儲存實體資料庫備份、增量和差異備份,以及封存的 WAL 檔案。 |
PVC 大小建議
請根據工作負載、記錄設定和備份策略,按照下列指引調整各個 PVC 磁碟區的大小。
DataDisk 主要資料庫儲存空間的磁碟區
AlloyDB Omni operator 一律會為每個資料庫 Pod 佈建 DataDisk 磁碟區,您必須在資訊清單中明確指定磁碟區大小。如要估算 DataDisk 的最低容量,請使用下列公式:
DataDisk capacity = (initial_dataset_size + projected_growth + max_wal_size) * 1.30
調整 DataDisk 磁碟區大小時,請考量下列因素:
- 索引負荷:PostgreSQL 索引和系統目錄表通常需要額外 20% 到 50% 的儲存空間,才能儲存原始資料表資料。
- 有效 WAL 空間:高輸送量的寫入交易會在
pg_wal目錄中累積 WAL 檔案,直到檢查點完成為止。分配足夠的儲存空間,以容納您設定的max_wal_size資料庫參數 (通常為數 GB 到數十 GB,視工作負載而定)。如要查看或修改資料庫參數 (例如max_wal_size),請參閱「設定資料庫參數」。 - 暫時性檔案和清除作業:查詢排序、建立索引、重新建立索引和自動清除作業需要額外的暫時性磁碟空間。
- 一般大小規則:分配原始資料庫大小的 1.5 到 2 倍,包括至少 30% 的安全緩衝區。
ObsDisk 診斷和稽核記錄的數量
AlloyDB Omni 運算子一律會為每個資料庫 Pod 佈建 ObsDisk 磁碟區 (如果您從資訊清單中省略,則會使用 2Gi 預設大小)。如果 ObsDisk 磁碟區已滿,PostgreSQL 就無法寫入新的記錄項目,記錄檔輪替作業也可能會停滯。如要瞭解如何為 ObsDisk 磁碟區設定記錄檔輪替和保留設定,請參閱「設定記錄檔輪替」。
調整 ObsDisk 磁碟區大小時,請考量下列準則:
- 標準記錄:在預設記錄輪替設定 (200 MB 輪替門檻和 7 天保留期限) 下,標準作業記錄的容量為 4 GiB 至 10 GiB。
- 稽核記錄 (pgAudit):使用 pgAudit 啟用稽核記錄時,稽核記錄會產生大量記錄。視查詢率和稽核規則詳細程度而定,配置 20 GiB 至 50 GiB 以上。
BackupRepoDisk 磁碟區,做為本機備份存放區
與資料庫 Pod 磁碟不同,BackupRepoDisk 不會預設佈建。
只有在您建立
BackupPlan 資源,將備份資料儲存在 Kubernetes 叢集本機
,且沒有遠端 backupLocation 欄位時,AlloyDB Omni operator 才會佈建備份存放區 Pod 及其
BackupRepoDisk PVC。如果從 DBCluster 資訊清單中省略這個磁碟,系統會使用預設大小 10Gi。如果未設定 BackupPlan 資源,或 BackupPlan 資源使用 GCS 類型的 Cloud Storage 或 S3 類型的 Amazon S3,則運算子不會佈建 BackupRepoDisk。如要進一步瞭解如何設定備份方案及調整備份儲存空間大小,請參閱「在 Kubernetes 中備份及還原」和「調整備份磁碟大小」。
將備份檔儲存在本機時,BackupRepoDisk 磁碟區會儲存壓縮的完整、差異和增量備份,以及封存的 WAL 檔案。所需總儲存空間取決於資料庫大小、每日資料變更率、backupSchedules中定義的備份排程,以及 backupRetainDays 設定的保留期限:
- 備份壓縮:壓縮備份通常會使用未壓縮資料庫大小的 37% 到 38%,代表大小縮減了 62% 到 63%。舉例來說,50 GiB 的資料庫壓縮後約為 18.5 GiB。
- 備份時間和保留期限:如果每週進行完整備份,每天進行增量或差異備份,所需的儲存空間會比每天進行完整備份少得多。
下表顯示基準尖峰儲存空間用量,以及建議BackupRepoDisk大小 (包括 20% 的緩衝區)。資料庫大小為 100 GiB,每日資料變更率為 10%,保留期限為預設的 14 天 (backupRetainDays: 14),備份排程如下:
備份排程 (backupSchedules) |
完整備份尖峰 | 差異備份 | 增量備份 | 封存的 WAL 檔案 | 儲存空間用量上限 | 建議的 BackupRepoDisk 大小 (外加 20% 緩衝區) |
|---|---|---|---|---|---|---|
| 每週完整 + 每日增量 | 148.0 GiB | 0 GiB | 66.6 GiB | 155.4 GiB | 370.0 GiB | 444 GiB (約為資料庫大小的 4.4 倍) |
| 每週完整 + 週中差異 + 每日增量 | 148.0 GiB | 22.2 GiB | 44.4 GiB | 155.4 GiB | 370.0 GiB | 444 GiB (約為資料庫大小的 4.4 倍) |
| 每週完整 + 每日差異 | 148.0 GiB | 155.4 GiB | 0 GiB | 155.4 GiB | 458.8 GiB | 551 GiB (約為資料庫大小的 5.5 倍) |
| 僅限每日完整資料 (預設時間表) | 592.0 GiB | 0 GiB | 0 GiB | 111.0 GiB | 703.0 GiB | 844 GiB (約為資料庫大小的 8.4 倍) |
BackupDisk 磁碟區,用於資料庫 Pod 備份暫存
AlloyDB Omni 運算子一律會為每個資料庫 Pod 佈建 BackupDisk 磁碟區,預設大小為 10 GiB (10Gi)。AlloyDB Omni 會在備份作業期間,將 BackupDisk 磁碟區做為本機暫存目錄。由於預設的 10 GiB 大小足以應付標準作業,因此您可以從 DBCluster 資訊清單中省略 BackupDisk,使用預設大小。
自訂 WAL 封存的 LogDisk 容量
AlloyDB Omni operator 一律會為每個資料庫 Pod 佈建 LogDisk 磁碟區,預設大小為 2 GiB (2Gi)。只有在部署自訂或第三方邊車容器時,才需要為 LogDisk 磁碟區指定自訂大小,因為這類容器會將 WAL 檔案封存至 /archive 目錄。對於使用內建備份的標準 AlloyDB Omni operator 部署作業,您可以從 DBCluster 資訊清單中省略 LogDisk,並保留預設的 2Gi 大小。
依資料集大小調整大小的參考資料
下表列出常見原始資料集大小的建議 PVC 大小:
| 原始資料大小 | 建議的 DataDisk 大小 |
建議的 ObsDisk 大小 |
建議的 BackupRepoDisk 大小 (僅適用於本機備份) |
建議的 BackupDisk 大小 |
建議的 LogDisk 大小 |
|---|---|---|---|---|---|
| 50 GiB | 100 GiB | 4 GiB (使用 pgAudit 時為 10 到 20 GiB) | 150 GiB | 10 GiB (預設) | 2 GiB (預設) |
| 200 GiB | 400 GiB | 10 GiB (使用 pgAudit 時為 20 至 50 GiB) | 600 GiB | 10 GiB (預設) | 2 GiB (預設) |
| 500 GiB | 1,000 GiB (1 TiB) | 15 GiB (使用 pgAudit 時為 30 至 60 GiB) | 1,500 GiB (1.5 TiB) | 10 GiB (預設) | 2 GiB (預設) |
| 1 TiB | 2,000 GiB (2 TiB) | 20 GiB (使用 pgAudit 時為 50 至 100 GiB) | 3,000 GiB (3 TiB) | 10 GiB (預設) | 2 GiB (預設) |
監控磁碟使用率和 I/O 指標
您可以透過 kubectl,或收集 AlloyDB Omni 匯出的 Prometheus 指標,直接在資料庫和備份儲存庫 Pod 中監控即時磁碟用量。
使用 kubectl 檢查磁碟使用量
如要檢查資料庫 Pod 和備份存放區 Pod 中已掛接 PVC 磁碟區的目前磁碟空間用量,請執行下列指令:
取得
DBCluster資源的資料庫 Pod 名稱:export DB_POD=$(kubectl get pod -n NAMESPACE -l alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME,alloydbomni.internal.dbadmin.goog/task-type=database -o jsonpath='{.items[0].metadata.name}')更改下列內容:
NAMESPACE:部署資料庫叢集的 Kubernetes 命名空間。DB_CLUSTER_NAME:資料庫叢集名稱。
在資料庫容器中執行
df -h,即可查看DataDisk(/mnt/disks/pgsql)、ObsDisk(/obs)、BackupDisk(/backup) 和LogDisk(/archive) 磁碟區的容量和用量:kubectl exec -n NAMESPACE "${DB_POD}" -c database -- df -h /mnt/disks/pgsql /obs /backup /archive如果已設定
BackupPlan資源在本機儲存備份,請取得備份存放區 Pod 的名稱,然後執行df -h,查看BackupRepoDisk磁碟區的容量和用量 (/backup):export BACKUP_REPO_POD=$(kubectl get pod -n NAMESPACE -l alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME,alloydbomni.internal.dbadmin.goog/backup-repository -o jsonpath='{.items[0].metadata.name}') kubectl exec -n NAMESPACE "${BACKUP_REPO_POD}" -c backuprepo -- df -h /backup
使用 Prometheus 監控儲存空間指標
AlloyDB Omni 會在al-INSTANCE_ID-DB_CLUSTER_NAME-monitoring-system
9187 服務 (連接埠 9187) 上匯出儲存空間和磁碟 I/O 指標。如要瞭解如何擷取及查詢這些指標,請參閱「監控 AlloyDB Omni」。如需可用指標的完整清單,請參閱「AlloyDB Omni 指標」。
監控下列磁碟指標:
- 儲存空間用量和容量:監控
alloydb_omni_node_storage_usage_per_disk_byte和alloydb_omni_node_storage_limit_per_disk_byte指標,這些指標會使用disk標籤 (例如DataDisk、ObsDisk或BackupDisk),回報每個磁碟區的儲存空間用量和總容量 (以位元組為單位)。當磁碟用量達到容量的 80% 和 90% 時,請設定快訊,以便在磁碟空間用盡前擴充磁碟區。 - 磁碟輸送量和 I/O 作業:監控磁碟讀取和寫入輸送量的
alloydb_omni_node_storage_read_bytes_count_total和alloydb_omni_node_storage_write_bytes_count_total指標,以及讀取和寫入 I/O 作業的alloydb_omni_node_storage_read_ops_count_total和alloydb_omni_node_storage_write_ops_count_total指標。
調整現有 DBCluster 的 PVC 大小
如果您已按照「建立資料庫叢集」建立 DBCluster 資源,初始資訊清單可能只指定 DataDisk 磁碟區 (例如 10Gi),而 AlloyDB Omni operator 會以預設大小佈建 ObsDisk (2Gi)、BackupDisk (10Gi) 和 LogDisk (2Gi) 磁碟區。您可以更新 DBCluster 資訊清單,擴充任何這類 PVC。
調整 PVC 大小前,請先詳閱下列規定和限制:
- StorageClass 磁碟區擴充:只有在 Kubernetes
StorageClass資源設定allowVolumeExpansion: true時,您才能增加磁碟大小。詳情請參閱「擴充永久磁碟區聲明」。 - 無法縮減或變更 StorageClass:您無法縮減磁碟大小,也無法在現有 PVC 佈建後變更其
storageClass欄位。 - 調整預設大小的磁碟:如要擴充先前從資訊清單中省略的磁碟 (例如
ObsDisk磁碟區或BackupRepoDisk磁碟區),請在spec.primarySpec.resources.disks欄位中為該磁碟新增項目,並將size欄位設為大於目前預設容量。更新資訊清單時,請務必保留disks清單中的DataDisk和任何其他現有磁碟項目。 - Pod 重新啟動行為:修改
resources.disks欄位時,AlloyDB Omni 運算子會更新基礎 PVC,並重新啟動資料庫執行個體 Pod,以套用新的資源規格。在規劃的維護期間執行儲存空間擴充作業,或設定高可用性,盡量縮短停機時間。
如要檢查及調整 DBCluster 的 PVC 大小,請按照下列步驟操作:
列出資料庫叢集命名空間中的 PVC,檢查目前的容量和
StorageClass資源:kubectl get pvc -n NAMESPACE將
NAMESPACE替換為您部署DBCluster的命名空間 (例如default)。如果叢集名為
my-db-cluster,輸出結果會與下列內容相似:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE backupdisk-al-1060-my-db-cluster-0 Bound pvc-45a28be2-a111-40ed-9641-61b9d25f313b 10Gi RWO standard-rwo 10m datadisk-al-1060-my-db-cluster-0 Bound pvc-c23a1ab8-f97c-4449-9072-502b6d9ba869 10Gi RWO standard-rwo 10m logdisk-al-1060-my-db-cluster-0 Bound pvc-f0c41d15-bb13-4d28-b94b-01a28dc67ef6 2Gi RWO standard-rwo 10m obsdisk-al-1060-my-db-cluster-0 Bound pvc-69ea1ca7-a868-4dc9-a9f8-503d5e5f2387 2Gi RWO standard-rwo 10m確認 PVC 使用的
StorageClass資源支援擴充磁碟區:kubectl get storageclass STORAGE_CLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'將
STORAGE_CLASS_NAME替換成先前輸出內容STORAGECLASS欄中的儲存空間類別名稱 (例如standard-rwo)。確認指令傳回true。更新
DBCluster資訊清單中的spec.primarySpec.resources.disks欄位,增加DataDisk磁碟區的size值,並新增需要擴充的任何預設大小磁碟 (例如ObsDisk磁碟區或BackupRepoDisk磁碟區)。下列資訊清單範例會將
DataDisk磁碟區擴充至400Gi,將ObsDisk磁碟區從預設的2Gi擴充至10Gi,並在600Gi為 200 GiB 工作負載設定BackupRepoDisk磁碟區:apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: DB_CLUSTER_NAME namespace: NAMESPACE spec: databaseVersion: "18.3.0" primarySpec: adminUser: passwordRef: name: db-pw-DB_CLUSTER_NAME resources: cpu: 4 memory: 32Gi disks: - name: DataDisk size: 400Gi storageClass: STORAGE_CLASS_NAME - name: ObsDisk size: 10Gi storageClass: STORAGE_CLASS_NAME - name: BackupRepoDisk size: 600Gi storageClass: STORAGE_CLASS_NAME更改下列內容:
DB_CLUSTER_NAME:資料庫叢集的名稱,例如my-db-cluster。NAMESPACE:資料庫叢集的命名空間。STORAGE_CLASS_NAME:永久磁碟區使用的 KubernetesStorageClass資源名稱,例如standard-rwo。如果您在建立叢集時省略storageClass欄位,可以繼續省略,讓運算子使用叢集的預設StorageClass。
套用更新後的
DBCluster資訊清單:kubectl apply -f DB_CLUSTER_MANIFEST.yaml將
DB_CLUSTER_MANIFEST替換為DBCluster資訊清單檔案的路徑。確認 PVC 和
DBCluster狀態反映擴充後的大小:kubectl get pvc -n NAMESPACE您也可以檢查
allocatedResources.disks資源的DBCluster狀態欄位:kubectl get dbcluster DB_CLUSTER_NAME -n NAMESPACE -o jsonpath='{.status.primary.allocatedResources.disks}{"\n"}'更改下列內容:
NAMESPACE:資料庫叢集的命名空間。DB_CLUSTER_NAME:資料庫叢集名稱。
如要進一步瞭解如何調整運算和儲存資源大小,請參閱「調整 Kubernetes 型資料庫叢集的大小」。
後續步驟
- 使用容器自動調度管理工具安裝 AlloyDB Omni
- 管理及監控 AlloyDB Omni
- 設定記錄檔輪替
- 在 Kubernetes 中備份及還原
- 管理 Kubernetes 中的高可用性
- 在 Kubernetes 中建立讀取集區執行個體