Categories
Disaster Recovery

**

Bagi jurutera DevOps, Pentadbir Pangkalan Data (DBA), dan arkitek sistem IT, Objektif Masa Pemulihan (RTO) dan Objektif Titik Pemulihan (RPO) adalah lebih daripada sekadar kata kunci kesinambungan perniagaan—ia adalah kekangan kejuruteraan yang ketat. Apabila menguruskan pangkalan data yang kritikal, kegagalan untuk mengira, merancang, dan mengesahkan metrik ini dengan tepat boleh mengakibatkan kehilangan data yang dahsyat dan masa henti yang berpanjangan.

Dalam persekitaran perusahaan moden, pengiraan RTO dan RPO memerlukan pemahaman mendalam tentang dalaman pangkalan data, I/O storan, daya pemprosesan rangkaian, dan mekanik log transaksi. Panduan ini meneroka metodologi teknikal untuk mengira, menguji, dan mengoptimumkan RTO dan RPO bagi sistem pangkalan data pengeluaran.

Menghuraikan RPO (Objektif Titik Pemulihan) dalam Sistem Pangkalan Data

RPO mentakrifkan jumlah kehilangan data maksimum yang boleh diterima yang diukur dalam masa. Jika RPO anda adalah 15 minit, bencana yang berlaku pada jam 12:00 tengah hari bermakna anda mesti dapat memulihkan semua transaksi yang telah disahkan sehingga sekurang-kurangnya jam 11:45 pagi.

Bagi pangkalan data, RPO ditentukan oleh strategi pengurusan log transaksi anda (WAL dalam PostgreSQL, Redo Logs dalam Oracle, Transaction Logs dalam SQL Server).

Mekanik Kehilangan Data dan Penjanaan Log

Untuk mengira RPO yang boleh dicapai, anda mesti memahami terlebih dahulu kadar penjanaan log transaksi pangkalan data anda. Jika anda menghantar log ke repositori sandaran setiap 15 minit, tetapi rangkaian anda tidak dapat memindahkan log bernilai 15 minit dalam tempoh tersebut, RPO sebenar anda akan terus merosot.

Anda boleh menetapkan kadar penjanaan log anda menggunakan arahan SQL asli. Sebagai contoh, dalam PostgreSQL (versi 10+), anda boleh mengukur kadar penjanaan Write-Ahead Log (WAL) dalam selang masa tertentu:

-- Jalankan ini pada T=0
SELECT pg_current_wal_lsn() AS start_lsn;

-- Tunggu tepat 5 minit (300 saat), kemudian jalankan:
SELECT pg_current_wal_lsn() AS end_lsn,
       pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), 'START_LSN_VALUE')) AS wal_generated_size,
       pg_wal_lsn_diff(pg_current_wal_lsn(), 'START_LSN_VALUE') / 300 AS bytes_per_second;

Jika pertanyaan ini mendedahkan bahawa anda menjana 50 MB/s data WAL semasa beban puncak, RPO 15 minit memerlukan pemindahan 45 GB data log ke storan sandaran anda. Rangkaian dan sasaran storan anda mesti menyokong kelajuan tulis berterusan melebihi 50 MB/s untuk mengekalkan RPO ini.

Kesan Replikasi Segerak lwn. Tidak Segerak

Ramai DBA bergantung pada replikasi Ketersediaan Tinggi (HA) untuk memenuhi RPO. Walau bagaimanapun, replikasi bukanlah sandaran. Jadual yang dipadam (DROP TABLE users;) akan direplikasi serta-merta.

Apabila menggunakan replikasi untuk Pemulihan Bencana (DR), mod replikasi memberi kesan secara langsung kepada RPO:
* Replikasi Segerak (Synchronous): Menjamin RPO sifar (RPO=0). Pangkalan data utama tidak akan mengesahkan transaksi sehingga pangkalan data siap sedia (standby) mengakui penerimaan. Pertukarannya adalah peningkatan kependaman (latency) pada operasi tulis utama.
* Replikasi Tidak Segerak (Asynchronous): Memperkenalkan sela replikasi (replication lag). RPO anda secara berkesan adalah sama dengan sela replikasi semasa anda.

Untuk memantau sela replikasi tidak segerak dalam PostgreSQL, gunakan:

SELECT application_name,
       client_addr,
       state,
       sync_state,
       pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS replication_lag_bytes
FROM pg_stat_replication;

Menghuraikan RTO (Objektif Masa Pemulihan) untuk Pangkalan Data Berskala Besar

RTO adalah tempoh masa henti maksimum yang boleh diterima. Mengira RTO pangkalan data adalah sangat kompleks kerana ia bukan sekadar masa yang diambil untuk menyalin fail kembali ke pelayan.

Model Matematik untuk Pengiraan RTO

Pengiraan RTO pangkalan data yang realistik mesti mengambil kira empat fasa yang berbeza:

RTO = T(infra) + T(transfer) + T(restore) + T(recovery)

  1. T(infra) – Penyediaan Infrastruktur: Masa untuk menyediakan pengkomputeran dan storan gantian. (Boleh hampir sifar dengan tapak DR yang telah disediakan atau saluran paip Infrastruktur-sebagai-Kod).
  2. T(transfer) – Pemindahan Data: Masa untuk memindahkan muatan sandaran dari repositori ke pelayan pangkalan data.
  3. T(restore) – Pemulihan Fizikal: Masa untuk menulis fail data ke cakera sasaran.
  4. T(recovery) – Pemulihan Ranap Pangkalan Data: Masa untuk enjin pangkalan data memainkan semula log transaksi, melaksanakan transaksi yang disahkan, dan membatalkan transaksi yang tidak disahkan.

Mengira Masa Pemindahan dan Pemulihan

Untuk mengira T(transfer) dan T(restore), anda mesti menetapkan penanda aras lebar jalur rangkaian dan IOPS/daya pemprosesan cakera anda. Jangan bergantung pada maksimum teori; uji infrastruktur sebenar anda.

Gunakan iperf3 untuk menguji daya pemprosesan rangkaian antara repositori sandaran dan pelayan pangkalan data anda:

# Pada repositori sandaran (pelayan)
iperf3 -s

# Pada pelayan pangkalan data (pelanggan)
iperf3 -c <backup_repo_ip> -t 60 -P 4

Gunakan fio untuk menguji prestasi tulis berjujukan bagi volum storan pangkalan data anda, mensimulasikan operasi pemulihan pangkalan data:

fio --name=restore_sim --ioengine=libaio --rw=write --bs=1M --size=10G --numjobs=4 --iodepth=32 --direct=1 --filename=/var/lib/postgresql/data/testfile

Jika pangkalan data anda bersaiz 5 TB, dan ujian fio anda menunjukkan kelajuan tulis berterusan maksimum 500 MB/s, T(restore) minimum mutlak anda adalah kira-kira 2.8 jam. Jika SLA perniagaan anda menuntut RTO 1 jam, pemulihan penstriman tradisional akan gagal. Anda mesti mengubah seni bina anda kepada syot kilat (snapshot) peringkat storan atau replikasi peringkat blok.

Perangkap Tersembunyi: T(recovery)

Pemboleh ubah yang paling kerap dipandang remeh ialah T(recovery). Jika anda memulihkan sandaran penuh mingguan dan perlu menggunakan log transaksi selama 6 hari untuk mencapai RPO anda, enjin pangkalan data mesti memainkan semula setiap transaksi secara berjujukan.

Memainkan semula 500 GB log transaksi boleh mengambil masa berjam-jam, terhalang teruk oleh prestasi CPU satu teras dan IOPS storan. Untuk meminimumkan T(recovery), tingkatkan kekerapan sandaran penuh atau pembezaan anda.

Merapatkan Jurang: Langkah Praktikal untuk Mengesahkan RTO dan RPO

Mengira RTO dan RPO teori hanyalah langkah pertama. Persekitaran kritikal memerlukan pengesahan berterusan.

Langkah 1: Laksanakan Pengarkiban Berterusan

Untuk mencapai RPO bawah seminit tanpa penalti prestasi replikasi segerak, laksanakan pengarkiban log berterusan. Daripada menunggu fail log penuh (yang mungkin mengambil masa berjam-jam semasa tempoh trafik rendah), paksa penukaran log pada selang masa yang tetap.

Dalam SQL Server, anda boleh mengautomasikan sandaran Log Transaksi yang kerap:

BACKUP LOG [MissionCriticalDB] 
TO DISK = N'\BackupRepoSQLMissionCriticalDB_Log.trn' 
WITH NOFORMAT, NOINIT, 
NAME = N'MissionCriticalDB-Transaction Log Backup', 
SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10;

Amalan Terbaik: Jadualkan tugasan ini untuk dijalankan setiap 1-5 minit bergantung pada keperluan RPO anda.

Langkah 2: Automasikan Ujian Pemulihan

Sandaran yang tidak diuji hanyalah konsep teori. Untuk menjamin RTO yang dikira, anda mesti melakukan ujian pemulihan automatik.

Platform sandaran perusahaan seperti CloudSave memudahkan perkara ini dengan menyediakan ujian pemulihan yang automatik dan terpencil. CloudSave boleh menghidupkan persekitaran kotak pasir secara automatik, memasang sandaran terkini, melakukan pemulihan pangkalan data penuh, dan melaksanakan skrip pengesahan tersuai (contohnya, DBCC CHECKDB untuk SQL Server) untuk mengukur RTO yang tepat dan memastikan integriti data. Ini mengubah RTO daripada tekaan kepada metrik yang terbukti dan boleh dilaporkan.

Langkah 3: Pantau dan Beri Amaran tentang Pelanggaran SLA

Timbunan pemantauan anda (Prometheus, Datadog, Zabbix) harus menjejaki metrik yang mengancam SLA RTO/RPO anda secara aktif. Peraturan amaran harus dikonfigurasikan untuk:
* Kegagalan Tugasan Sandaran: Ancaman segera kepada RPO.
* Kependaman Penghantaran Log: Jika pemindahan log mengambil masa lebih lama daripada selang penjanaan.
* Pendikitan IOPS Storan: Penyedia awan (seperti AWS EBS) akan mendikit IOPS jika kredit lonjakan habis, yang akan memusnahkan RTO anda secara senyap semasa kecemasan sebenar.

Mengoptimumkan Seni Bina Sandaran Pangkalan Data untuk Memenuhi SLA yang Ketat

Apabila pengiraan matematik mendedahkan bahawa seni bina semasa anda tidak dapat memenuhi SLA perniagaan, anda mesti mengoptimumkan strategi sandaran anda.

1. Manfaatkan Sandaran Tambahan Peringkat Blok

Lambakan pangkalan data tradisional (sandaran logik seperti pg_dump atau mysqldump) terlalu perlahan untuk RTO kritikal. Gunakan sandaran fizikal peringkat blok. Sandaran tambahan peringkat blok hanya menyalin blok cakera yang telah berubah sejak sandaran terakhir, mengurangkan T(transfer) dan beban rangkaian secara drastik.

2. Gunakan Syot Kilat (Snapshot) Storan

Bagi pangkalan data berbilang terabait yang memerlukan RTO kurang daripada 15 minit, penyalinan fail tradisional adalah mustahil secara fizikal melalui rangkaian standard. Integrasi dengan SAN atau syot kilat storan asli awan (contohnya, AWS EBS Snapshots, Pure Storage) membolehkan T(restore) yang hampir serta-merta. Enjin pangkalan data kemudian hanya perlu melakukan pemulihan ranap pada syot kilat tersebut.

3. Laksanakan Selarian (Parallelism)

Pastikan alat sandaran dan pemulihan anda menggunakan berbilang utas (multi-threading). Apabila memulihkan pangkalan data PostgreSQL menggunakan pgbackrest atau pangkalan data SQL Server, tentukan utas pekerja selari secara eksplisit untuk menepukan lebar jalur rangkaian dan cakera anda yang tersedia.

# Contoh pemulihan selari dalam pgBackRest
pgbackrest --stanza=prod_db --process-max=8 restore

Kesimpulan

Mengira RTO dan RPO untuk pangkalan data kritikal adalah latihan yang ketat dalam kejuruteraan sistem. Ia memerlukan DBA untuk bergerak melangkaui konfigurasi sandaran lalai dan memodelkan I/O storan, kapasiti rangkaian, dan mekanik pemulihan pangkalan data mereka secara matematik.

Dengan menetapkan kadar penjanaan log, memahami fasa pemulihan pangkalan data yang berbeza, dan melaksanakan ujian automatik melalui platform yang mantap seperti CloudSave, pasukan IT boleh menjamin SLA pemulihan bencana mereka dengan yakin. Ingat: dalam bidang pentadbiran pangkalan data, harapan bukanlah satu strategi, dan sandaran yang tidak diuji adalah satu liabiliti.

Ketahui cara jurutera DevOps dan DBA boleh mengira, menguji, dan mengoptimumkan RTO dan RPO dengan tepat untuk pangkalan data kritikal menggunakan mekanik pemulihan lanjutan, alat CLI, dan ujian automatik.