Runbook HA/MTDB Kliniktech

Runbook ini menjelaskan jalur migrasi tenant non-master dari shared DB ke tenant DB dedicated. Tenant master kliniktech tetap berada di shared DB apps.ion.net.id.

Setelah gate pilot hijau, baca juga Production Cutover Readiness HA/MTDB sebelum membahas cutover production.

Gate production: cutover login, route modul production, tenant nyata non-demo, deploy/restart, perubahan .env, dan destructive SQL tetap membutuhkan approval eksplisit dan tidak dijalankan otomatis.

1. Pre-check

  1. Pastikan tenant bukan kliniktech master.
  2. Pastikan credential tenant DB, backup, dan readiness provisioning OK.
  3. Jalankan pilot-health dan pastikan schema, koneksi, demo flow, dan count minimal valid.

2. Provisioning dan Schema

  1. Preview DB-only pilot.
  2. Run DB-only pilot dengan frasa yang sesuai.
  3. Run tenant schema migration.
  4. Test dynamic tenant DB connection.

3. Data Copy dan Validasi

  1. Jalankan dry-run copy data minimal.
  2. Jika collision aman, jalankan copy pilot untuk users/customers/invoices/tickets.
  3. Jalankan read-sample dan shadow-read.
  4. Jalankan reconciliation report sampai severity ok sebelum cutover production. Extra row pilot DEMO-* dari seed demo tenant DB boleh tercatat sebagai accepted_pilot_extra; extra lain tetap blocking.

4. Controlled Routing

  1. Aktifkan use_tenant_db_read hanya untuk tenant pilot.
  2. Aktifkan flag granular modul seperti tenant_db_customers_read, tenant_db_invoices_read, dan tenant_db_tickets_read.
  3. Jalankan module-read dan verifikasi source tenant_db untuk tenant pilot.

5. Write Pilot

  1. Jalankan write-plan dan pastikan operasi write siap pilot.
  2. Jalankan dual-write pilot hanya pada tenant demo/pilot dan row demo.
  3. Verifikasi rollback dual-write mengembalikan snapshot.
  4. Untuk jalur tiket, pastikan schema tenant memiliki ticket_comments dan ticket_attachments sebelum tickets.comment_or_attachment dianggap siap pilot.

6. Cutover Gate

Cutover hanya boleh dipertimbangkan jika cutover-gate mengembalikan cutover_allowed=true, semua block kosong, dan approval production eksplisit sudah diberikan. Gate hijau di pilot bukan perintah untuk production cutover otomatis.
  1. Pilot health harus OK.
  2. Reconciliation harus severity OK.
  3. Write-plan harus OK dan tidak ada operasi deferred.
  4. Rollback path harus teruji.
  5. Ambil snapshot readiness read-only dengan php artisan tenant-db:readiness {tenant_slug} sebelum membahas approval production.

7. Production Automation di Platform Admin

  1. Buka Platform Admin → tenant target → panel Provisioning Tenant.
  2. Klik Readiness Snapshot, salin Evidence Fingerprint, lalu klik Verify Fingerprint.
  3. Jika verify OK, klik Approve Production dan isi approver, maintenance window, rollback owner, monitoring owner, alasan approval, serta frasa APPROVE TENANT DB PRODUCTION.
  4. Klik Production Status untuk melihat approval ID dan status cutover.
  5. Klik Rollback Dry-run dulu memakai approval ID untuk memastikan metadata rollback valid.
  6. Cutover aktual hanya lewat tombol Cutover Production dengan approval ID, fingerprint valid, dan frasa CUTOVER TENANT DB PRODUCTION.

8. Rollback

  1. Jalankan Rollback Dry-run dari Platform Admin dengan approval ID cutover.
  2. Jika valid dan rollback disetujui, jalankan Rollback Production dengan frasa ROLLBACK TENANT DB PRODUCTION.
  3. Revoke token pilot jika ada dan rollback dual-write/copy pilot sesuai job sumber bila masih aktif.
  4. Pastikan tenant kembali membaca shared DB dan status production menunjukkan rollback selesai.