Regional Persistent Disk & High Availability
Tại sao HA cho storage phức tạp hơn HA cho compute
HA cho compute tương đối đơn giản: launch VM thay thế ở zone khác, redirect traffic. HA cho storage phức tạp hơn vì phải trả lời câu hỏi: khi một zone fail, data ở đó nằm đâu, và replica ở zone còn lại có đủ up-to-date không?
Persistent Disk zonal thông thường chỉ có một replica trong một zone. Nếu zone đó fail, bạn phải restore từ snapshot (RPO = thời gian từ lần snapshot cuối đến failure). Regional Persistent Disk giải quyết bằng cách duy trì hai replicas đồng bộ ở hai zones.
Cơ chế synchronous replication
Theo Google Cloud documentation, Regional PD implement synchronous cross-zone replication:
"When you write data to your disk, Compute Engine synchronously replicates that data to the disk replicas in both zones to ensure HA."
"Synchronous" ở đây có nghĩa rõ ràng: write operation không được acknowledge cho application cho đến khi cả hai replicas ở cả hai zones xác nhận đã nhận data. Không phải async với eventual consistency, không phải "ghi zone A trước rồi propagate sang zone B sau".
Đây là khác biệt thiết kế quan trọng so với nhiều HA storage solutions khác (như asynchronous replication thường dùng cho cross-region DR). Với synchronous replication:
RPO = 0 trong trường hợp zone failure đơn lẻ. Bất kỳ write nào đã được acknowledged bởi Regional PD đều đã được ghi vào cả hai zones. Không có data loss window.
Tradeoff: Write latency cao hơn Zonal PD cùng type vì mỗi write phải round-trip đến cả hai zones. Trong cùng một region, cross-zone latency thường 1–2ms, nên overhead khoảng 2–4ms per write (cho round-trip đến zone thứ hai và acknowledgment). Với workloads latency-sensitive, đây là overhead đáng kể.
Ba trạng thái replica và implications
Regional PD replicas có ba trạng thái:
Synced (Fully Replicated): Replica nhận tất cả writes và up-to-date. Đây là trạng thái bình thường. Trong Cloud Console, disk hiển thị là "Fully replicated".
Catching up: Replica available nhưng đang sync lại — thường sau khi zone có sự cố ngắn hoặc sau khi tạo mới Regional PD. Trong trạng thái này, write vẫn hoạt động bình thường (primary zone xử lý), nhưng secondary đang catch up. Disk hiển thị "Catching up".
Out of sync (Degraded): Replica không available tạm thời — zone đang có vấn đề. Disk hoạt động trong "degraded mode" chỉ dùng primary replica. Đây là trạng thái "amber alert" — data vẫn accessible nhưng không còn HA. Nếu zone còn lại fail trong lúc này, data có thể mất.
Monitoring recommendation: alert khi disk status = "Degraded" để biết khi nào HA bị mất.
Failover: force-attach mechanism
Khi zone fail, Regional PD cần được reattach vào VM ở zone còn lại. Tuy nhiên, VM ở zone lỗi đang "chết" nhưng hệ thống GCP chưa detect là zone fail (network partition). Cơ chế attach bình thường yêu cầu detach từ VM cũ trước, nhưng VM cũ không thể response.
Force-attach giải quyết bằng cách bypass detach requirement:
gcloud compute instances attach-disk standby-vm-in-zone-b \
--disk=my-regional-disk \
--disk-scope=regional \
--force-attachVới --force-attach, GCP gắn disk vào VM mới mà không cần xác nhận từ VM cũ. Quá trình này mất dưới một phút cho storage-layer failover.
Lưu ý quan trọng: Force-attach chỉ giải quyết storage layer. Total RTO còn bao gồm:
- Instance startup time (nếu standby VM không running)
- Application startup time
- Filesystem mount và journal replay (nếu disk không được unmount cleanly)
- Application health check và traffic redirect
Trong production, kịch bản lý tưởng là có pre-launched standby VM đang chạy ở zone B nhưng chưa mount disk — khi failover, chỉ cần force-attach và start application. RTO có thể xuống dưới 5 phút.
Initial sync time sau khi tạo Regional PD
Khi tạo mới Regional PD, replica thứ hai được tạo nhưng cần thời gian để đạt "Fully Replicated" state. Theo documentation:
"After creation, you can use the regional disk clone within 3 minutes, on average. However, you might need to wait for tens of minutes before the disk reaches a fully replicated state."
Điều này có implication cho automation: nếu script tạo Regional PD và ngay lập tức deploy application lên đó, application chạy trong degraded mode (không có full HA) trong giai đoạn initial sync. Cần health check để verify "Fully Replicated" trước khi marking deployment as complete.
Machine type constraints
Regional PD không hỗ trợ tất cả machine families. Chỉ các machine types sau được hỗ trợ:
- E2 — General-purpose
- N1 — General-purpose (older generation)
- N2 — Balanced compute
- N2D — AMD-based balanced compute
Các machine families không hỗ trợ Regional PD:
- C2, C2D (compute-optimized)
- M2, M3 (memory-optimized)
- A2, A3 (accelerator-optimized)
Nếu workload cần HA storage trên machine types này, phải dùng Hyperdisk Balanced HA thay vì Regional PD.
Regional PD vs Hyperdisk Balanced HA
Google Cloud đang dần định hướng workloads mới dùng Hyperdisk Balanced HA thay cho Regional PD. So sánh:
| Tiêu chí | Regional PD | Hyperdisk Balanced HA |
|---|---|---|
| Max IOPS | 80,000 (balanced) / 100,000 (ssd) | 100,000 |
| Max throughput | 1,200 MiB/s | 2,400 MiB/s |
| Machine types | E2, N1, N2, N2D | C3, C3D, N4, Z3, và nhiều loại mới |
| Dynamic IOPS | Không | Có |
| Durability | >99.9999% (regional balanced/ssd) | >99.9999% |
| Min size | 200 GiB (standard) | 4 GiB |
| Multi-writer | Có (max 10 read-only) | Có (max 8 read-write) |
Kết luận: Với workloads mới trên machine types hỗ trợ Hyperdisk, Hyperdisk Balanced HA là lựa chọn tốt hơn về performance và flexibility. Regional PD vẫn phù hợp cho workloads đang chạy trên E2/N2 không muốn migrate machine type.
Kết hợp Regional PD với Managed Instance Group (MIG)
Pattern phổ biến cho stateful HA workloads:
# Regional MIG với failover policy
resource "google_compute_region_instance_group_manager" "stateful_mig" {
name = "stateful-db-mig"
base_instance_name = "db"
region = "us-central1"
stateful_disk {
device_name = "data-disk"
delete_rule = "NEVER" # Không xóa disk khi replace instance
}
auto_healing_policies {
health_check = google_compute_health_check.default.id
initial_delay_sec = 300
}
}MIG với stateful disk sẽ tự động recreate instance trong zone khác nếu zone fail, và reattach Regional PD vào instance mới. Đây là cơ chế tự động hóa failover cho stateful workloads.
Trường hợp Regional PD không đủ
Regional PD bảo vệ khỏi single zone failure. Nó không bảo vệ khỏi:
- Toàn region fail: Cả hai zones trong region đều down — hiếm nhưng có xảy ra
- Application-level corruption: Nếu application write data sai, replication sẽ replicate data sai sang cả hai zones
- Accidental deletion: Nếu xóa disk hoặc xóa data, cả hai replicas đều bị xóa
Cho cross-region DR (bảo vệ region-level failure), cần kết hợp Regional PD với asynchronous replication sang region khác hoặc snapshot-based backup sang region khác.