Categories
Disaster Recovery

**

Bagi insinyur DevOps, Administrator Basis Data (DBA), dan arsitek sistem TI, Recovery Time Objective (RTO) dan Recovery Point Objective (RPO) lebih dari sekadar jargon kelangsungan bisnis—keduanya adalah batasan teknis yang ketat. Saat mengelola basis data yang sangat penting (mission-critical), kegagalan dalam menghitung, merancang arsitektur, dan memvalidasi metrik ini secara akurat dapat mengakibatkan kehilangan data yang fatal dan waktu henti (downtime) yang berkepanjangan.

Dalam lingkungan perusahaan modern, menghitung RTO dan RPO memerlukan pemahaman mendalam tentang internal basis data, I/O penyimpanan, throughput jaringan, dan mekanisme log transaksi. Panduan ini membahas metodologi teknis untuk menghitung, menguji, dan mengoptimalkan RTO dan RPO untuk sistem basis data produksi.

Dekomposisi RPO (Recovery Point Objective) dalam Sistem Basis Data

RPO mendefinisikan jumlah kehilangan data maksimum yang dapat diterima yang diukur dalam waktu. Jika RPO Anda adalah 15 menit, bencana yang terjadi pada pukul 12:00 siang berarti Anda harus dapat memulihkan semua transaksi yang telah dikomit setidaknya hingga pukul 11:45 siang.

Untuk basis data, RPO ditentukan oleh strategi manajemen log transaksi Anda (WAL di PostgreSQL, Redo Logs di Oracle, Transaction Logs di SQL Server).

Mekanisme Kehilangan Data dan Pembuatan Log

Untuk menghitung RPO yang dapat dicapai, Anda harus terlebih dahulu memahami tingkat pembuatan log transaksi basis data Anda. Jika Anda mengirim log ke repositori cadangan setiap 15 menit, tetapi jaringan Anda tidak dapat mentransfer log selama 15 menit dalam jendela waktu tersebut, RPO aktual Anda akan terus menurun.

Anda dapat menetapkan tolok ukur tingkat pembuatan log menggunakan perintah SQL bawaan. Sebagai contoh, di PostgreSQL (versi 10+), Anda dapat mengukur tingkat pembuatan Write-Ahead Log (WAL) selama interval tertentu:

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

-- Tunggu tepat 5 menit (300 detik), lalu 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 kueri ini menunjukkan bahwa Anda menghasilkan 50 MB/dtk data WAL selama beban puncak, RPO 15 menit memerlukan transfer data log sebesar 45 GB ke penyimpanan cadangan Anda. Jaringan dan target penyimpanan Anda harus mendukung kecepatan tulis berkelanjutan yang melebihi 50 MB/dtk untuk mempertahankan RPO ini.

Dampak Replikasi Sinkron vs. Asinkron

Banyak DBA mengandalkan replikasi High Availability (HA) untuk memenuhi RPO. Namun, replikasi bukanlah cadangan. Tabel yang terhapus (DROP TABLE users;) akan ter-replikasi secara instan.

Saat menggunakan replikasi untuk Pemulihan Bencana (DR), mode replikasi secara langsung memengaruhi RPO:
* Replikasi Sinkron: Menjamin RPO nol (RPO=0). Basis data utama tidak akan mengomit transaksi sampai standby mengakui penerimaan. Pertukarannya adalah peningkatan latensi pada operasi tulis utama.
* Replikasi Asinkron: Memperkenalkan jeda replikasi (replication lag). RPO Anda secara efektif sama dengan jeda replikasi Anda saat ini.

Untuk memantau jeda replikasi asinkron di 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;

Dekomposisi RTO (Recovery Time Objective) untuk Basis Data Skala Besar

RTO adalah durasi waktu henti maksimum yang dapat ditoleransi. Menghitung RTO basis data sangatlah kompleks karena bukan sekadar waktu yang dibutuhkan untuk menyalin file kembali ke server.

Model Matematis untuk Perhitungan RTO

Perhitungan RTO basis data yang realistis harus memperhitungkan empat fase yang berbeda:

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

  1. T(infra) – Penyediaan Infrastruktur: Waktu untuk menyiapkan komputasi dan penyimpanan pengganti. (Bisa mendekati nol dengan situs DR yang sudah disediakan sebelumnya atau alur Infrastructure-as-Code).
  2. T(transfer) – Transfer Data: Waktu untuk memindahkan payload cadangan dari repositori ke server basis data.
  3. T(restore) – Pemulihan Fisik: Waktu untuk menulis file data ke disk target.
  4. T(recovery) – Pemulihan Kerusakan Basis Data: Waktu bagi mesin basis data untuk memutar ulang log transaksi, memproses transaksi yang dikomit, dan membatalkan transaksi yang belum dikomit.

Menghitung Waktu Transfer dan Pemulihan

Untuk menghitung T(transfer) dan T(restore), Anda harus menetapkan tolok ukur bandwidth jaringan dan IOPS/throughput disk Anda. Jangan mengandalkan angka maksimum teoretis; ujilah infrastruktur aktual Anda.

Gunakan iperf3 untuk menguji throughput jaringan antara repositori cadangan dan server basis data Anda:

# Pada repositori cadangan (server)
iperf3 -s

# Pada server basis data (klien)
iperf3 -c <backup_repo_ip> -t 60 -P 4

Gunakan fio untuk menguji kinerja tulis sekuensial volume penyimpanan basis data Anda, mensimulasikan operasi pemulihan basis 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 basis data Anda berukuran 5 TB, dan pengujian fio Anda menunjukkan kecepatan tulis berkelanjutan maksimum 500 MB/dtk, maka T(restore) minimum absolut Anda adalah sekitar 2,8 jam. Jika SLA bisnis Anda menuntut RTO 1 jam, pemulihan streaming tradisional akan gagal. Anda harus mengubah arsitektur Anda ke snapshot tingkat penyimpanan atau replikasi tingkat blok.

Jebakan Tersembunyi: T(recovery)

Variabel yang paling sering diremehkan adalah T(recovery). Jika Anda memulihkan cadangan penuh mingguan dan perlu menerapkan log transaksi selama 6 hari untuk mencapai RPO Anda, mesin basis data harus memutar ulang setiap transaksi secara sekuensial.

Memutar ulang 500 GB log transaksi dapat memakan waktu berjam-jam, sangat terhambat oleh kinerja CPU single-threaded dan IOPS penyimpanan. Untuk meminimalkan T(recovery), tingkatkan frekuensi cadangan penuh atau diferensial Anda.

Menjembatani Kesenjangan: Langkah Praktis untuk Memvalidasi RTO dan RPO

Menghitung RTO dan RPO teoretis hanyalah langkah pertama. Lingkungan yang sangat penting memerlukan validasi berkelanjutan.

Langkah 1: Terapkan Pengarsipan Berkelanjutan

Untuk mencapai RPO di bawah satu menit tanpa penurunan kinerja akibat replikasi sinkron, terapkan pengarsipan log berkelanjutan. Alih-alih menunggu file log penuh (yang mungkin memakan waktu berjam-jam selama periode lalu lintas rendah), paksa perpindahan log pada interval reguler.

Di SQL Server, Anda dapat mengotomatiskan cadangan Log Transaksi yang sering:

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

Praktik Terbaik: Jadwalkan pekerjaan ini untuk berjalan setiap 1-5 menit tergantung pada kebutuhan RPO Anda.

Langkah 2: Otomatiskan Pengujian Pemulihan

Cadangan yang tidak diuji hanyalah konsep teoretis. Untuk menjamin RTO yang telah dihitung, Anda harus melakukan pengujian pemulihan otomatis.

Platform cadangan perusahaan seperti CloudSave menyederhanakan hal ini dengan menyediakan pengujian pemulihan yang otomatis dan terisolasi. CloudSave dapat secara otomatis menyiapkan lingkungan sandbox, memasang cadangan terbaru, melakukan pemulihan basis data penuh, dan menjalankan skrip validasi kustom (misalnya, DBCC CHECKDB untuk SQL Server) untuk mengukur RTO yang tepat dan memastikan integritas data. Ini mengubah RTO dari perkiraan teoretis menjadi metrik yang terbukti dan dapat dilaporkan.

Langkah 3: Pantau dan Beri Peringatan pada Pelanggaran SLA

Tumpukan pemantauan Anda (Prometheus, Datadog, Zabbix) harus secara aktif melacak metrik yang mengancam SLA RTO/RPO Anda. Aturan peringatan harus dikonfigurasi untuk:
* Kegagalan Pekerjaan Cadangan: Ancaman langsung terhadap RPO.
* Latensi Pengiriman Log: Jika transfer log memakan waktu lebih lama daripada interval pembuatan.
* Throttling IOPS Penyimpanan: Penyedia cloud (seperti AWS EBS) melakukan throttling IOPS jika kredit burst habis, yang akan menghancurkan RTO Anda secara diam-diam selama keadaan darurat yang sebenarnya.

Mengoptimalkan Arsitektur Cadangan Basis Data untuk Memenuhi SLA yang Ketat

Ketika perhitungan matematis menunjukkan bahwa arsitektur Anda saat ini tidak dapat memenuhi SLA bisnis, Anda harus mengoptimalkan strategi cadangan Anda.

1. Manfaatkan Cadangan Inkremental Tingkat Blok

Dump basis data tradisional (cadangan logis seperti pg_dump atau mysqldump) terlalu lambat untuk RTO yang sangat penting. Gunakan cadangan fisik tingkat blok. Cadangan inkremental tingkat blok hanya menyalin blok disk yang telah berubah sejak cadangan terakhir, yang secara drastis mengurangi T(transfer) dan overhead jaringan.

2. Manfaatkan Snapshot Penyimpanan

Untuk basis data multi-terabyte yang memerlukan RTO kurang dari 15 menit, penyalinan file tradisional secara fisik tidak mungkin dilakukan melalui jaringan standar. Integrasi dengan SAN atau snapshot penyimpanan asli cloud (misalnya, AWS EBS Snapshots, Pure Storage) memungkinkan T(restore) yang hampir instan. Mesin basis data kemudian hanya perlu melakukan pemulihan kerusakan pada snapshot tersebut.

3. Terapkan Paralelisme

Pastikan alat cadangan dan pemulihan Anda menggunakan multi-threading. Saat memulihkan basis data PostgreSQL menggunakan pgbackrest atau basis data SQL Server, tentukan secara eksplisit thread pekerja paralel untuk menjenuhkan bandwidth jaringan dan disk yang tersedia.

# Contoh pemulihan paralel di pgBackRest
pgbackrest --stanza=prod_db --process-max=8 restore

Kesimpulan

Menghitung RTO dan RPO untuk basis data yang sangat penting adalah latihan yang ketat dalam rekayasa sistem. Hal ini mengharuskan DBA untuk melampaui konfigurasi cadangan default dan memodelkan I/O penyimpanan, kapasitas jaringan, dan mekanisme pemulihan basis data mereka secara matematis.

Dengan menetapkan tolok ukur tingkat pembuatan log, memahami fase pemulihan basis data yang berbeda, dan menerapkan pengujian otomatis melalui platform yang kuat seperti CloudSave, tim TI dapat dengan percaya diri menjamin SLA pemulihan bencana mereka. Ingat: dalam ranah administrasi basis data, harapan bukanlah strategi, dan cadangan yang tidak diuji adalah sebuah kewajiban yang berisiko.

Pelajari bagaimana insinyur DevOps dan DBA dapat menghitung, menguji, dan mengoptimalkan RTO dan RPO secara akurat untuk basis data yang sangat penting menggunakan mekanisme pemulihan tingkat lanjut, alat CLI, dan pengujian otomatis.