Database terkelola
PostgreSQL atau MariaDB yang tetap berjalan walau satu server atau satu lokasi mati. Berjalan di server milik Anda, di penyedia mana pun, dan Anda cukup mengurus database-nya.
Konsep: 2 server data + 1 saksi
Satu klaster database terdiri dari tiga server milik Anda yang sudah tersambung ke Saka:
| Peran | Isi | Tugas |
|---|---|---|
| Server data 1 | Database lengkap | Utama atau replika. |
| Server data 2 | Database lengkap | Replika atau utama. |
| Saksi | Tanpa data | Ikut memilih utama, sehingga saat server putus tidak pernah ada dua utama (data tidak terbelah). Boleh server kecil. |
Pilih tiga server berbeda, sebaiknya di tiga lokasi berbeda (misalnya Singapura, Jakarta, dan satu lagi). Antar server tersambung lewat jaringan privat WireGuard terenkripsi yang dibuat agent. Kunci privat WireGuard dibuat di tiap server dan tidak pernah meninggalkannya.
Latensi aplikasi ke database penting. Letakkan aplikasi dekat salah satu lokasi data. Pada uji, sambungan TLS dari Sydney ke Bangalore butuh ±3,8 detik, jadi alamat sambungan Saka memakai connect_timeout=5.
PostgreSQL 17 atau MariaDB 12.3
| PostgreSQL 17 | MariaDB 12.3 | |
|---|---|---|
| Teknologi | Patroni + etcd | Galera + garbd (saksi) |
| Cocok untuk | Aplikasi baru | WordPress, Laravel, aplikasi PHP (kompatibel MySQL) |
| Penulis | Satu utama, satu replika | Node data pertama yang sehat menjadi penulis, node lain cadangan penulis |
| Mode replikasi | Asinkron atau sinkron (pilihan) | Selalu sinkron |
| Port | 5432 | 3306 |
| Pengguna awal | postgres | root |
| TLS | Wajib (hostssl, SCRAM) | Wajib (require_secure_transport) |
Klaster PostgreSQL biasanya siap dalam ±30 detik sampai 5 menit; MariaDB dibangun berurutan (±1,5 menit pada uji). Anda dikabari lewat Telegram saat siap atau gagal.
Mode replikasi (PostgreSQL)
- Cepat (asinkron): tulis secepat satu server. Bila utama mati mendadak, beberapa detik transaksi terakhir bisa hilang.
- Tanpa kehilangan data (sinkron): setiap tulisan menunggu lokasi kedua. Lebih lambat sekitar satu kali jeda jaringan antar lokasi (±38 ms antara Singapura dan Bangalore pada uji). Cocok untuk transaksi uang.
MariaDB Galera selalu sinkron: setiap tulisan disetujui kedua lokasi data sebelum selesai.
Membuat klaster
- Tambahkan minimal tiga server ke Saka (lihat Mulai). Semuanya harus tersambung.
- Buka Database, tekan + Buat klaster database.
- Pilih mesin, dua server data, satu server saksi, mode replikasi, dan nama (huruf kecil, angka, tanda minus, 3-31 karakter, diawali huruf).
- Pantau langkah pembuatan di halaman detail.
Alamat sambungan & sandi
Halaman detail klaster menampilkan alamat sambungan. Sandi tidak ditampilkan otomatis: tekan Tampilkan sandi. Sandi dibaca langsung dari server data Anda saat itu juga; Saka tidak menyimpannya. Sandi dibuat saat klaster dibuat, diteruskan sekali ke server data, lalu dilupakan Saka.
PostgreSQL: alamat banyak-host
Alamat berisi kedua lokasi data. Driver yang mendukung banyak host (libpq, JDBC, Go pgx) otomatis menyambung ke utama:
DATABASE_URL=postgresql://postgres:[email protected]:5432,198.51.100.20:5432/postgres?sslmode=require&target_session_attrs=read-write&connect_timeout=5MariaDB: alamat langsung
DATABASE_URL=mysql://root:[email protected]:3306/?ssl=trueAlamat langsung ini hanya menuju satu node. Agar aplikasi ikut pindah saat server mati, pakai proxy Saka (di bawah).
Proxy di server aplikasi
Driver PHP (mysqlnd) dan Node.js (mysql2, node-postgres) tidak bisa pindah sendiri ke alamat lain. Pada uji, klien PHP terus mencoba alamat pertama sampai timeout, dan klien Node menggantung tanpa galat. Karena itu Saka menyediakan Sambungkan server aplikasi:
- Saka memasang HAProxy kecil di server tempat aplikasi Anda berjalan (server yang terdaftar di Saka dan bukan anggota klaster).
- Proxy mendengarkan di
127.0.0.1dan meneruskan ke node data yang sehat. Node lain menjadi cadangan. - Aplikasi cukup menyambung ke
127.0.0.1. Port sama dengan port database (5432 atau 3306), atau ditambah 10000 (15432 atau 13306) bila port itu sudah dipakai database lokal.
DATABASE_URL=postgresql://postgres:[email protected]:5432/postgres?sslmode=requireDATABASE_URL=mysql://root:[email protected]:3306/?ssl=trueContoh yang dipakai saat uji (sertifikat MariaDB dibuat otomatis, jadi verifikasi sertifikat dimatikan; koneksinya tetap terenkripsi):
$m = mysqli_init();
$m->real_connect('127.0.0.1', 'root', $sandi, 'nama_db', 3306, null,
MYSQLI_CLIENT_SSL | MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);mysql.createConnection({ host: '127.0.0.1', user: 'root', password: sandi,
database: 'nama_db', ssl: { rejectUnauthorized: false } })DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nama_database_anda
DB_USERNAME=root
DB_PASSWORD=SANDITLS wajib di kedua mesin: server menolak koneksi tanpa TLS. Proxy meneruskan koneksi apa adanya, jadi aktifkan TLS di driver Anda (misalnya sslmode=require untuk PostgreSQL). Sertifikat database dibuat di server Anda sendiri, bukan dari CA publik.
Proxy dapat dilepas dari satu server aplikasi kapan saja; aplikasi di server itu lalu perlu alamat sambungan lain.
Pagar
Agent di setiap server data memeriksa kesehatan database tiap 2 detik. Bila node tidak layak menerima tulisan, port database ditutup dari luar dengan TCP RST, sehingga klien atau proxy langsung pindah ke node lain:
- PostgreSQL: hanya pemimpin Patroni yang terbuka, replika tertutup.
- MariaDB: terbuka hanya bila node Primary dan Synced. Node yang sedang bergabung kembali tertutup sampai tersinkron.
Lalu lintas dari jaringan privat klaster dan dari server itu sendiri tidak ikut ditutup.
Failover & pulih sendiri
Bila server utama mati, replika di lokasi lain otomatis mengambil alih. Anda dikabari lewat Telegram saat utama pindah, saat tidak ada replika yang tersalin (klaster sementara tidak tahan satu server mati), dan saat replika tersalin lagi.
| Uji (28 Sep 2026) | Jeda sampai aplikasi menulis lagi | Baris hilang |
|---|---|---|
| MariaDB, node penulis dimatikan mendadak, klien PHP dan Node lewat proxy | ±11 detik | 0 |
| PostgreSQL uji produk, node penulis dimatikan mendadak, klien lewat proxy | 33 detik | 0 |
| PostgreSQL uji konsep, mode asinkron | 38,6 detik | 0 |
| PostgreSQL uji konsep, mode sinkron | 32,0 detik | 0 |
- PostgreSQL: server yang mati kembali sendiri sebagai replika saat dinyalakan (pg_rewind), tanpa campur tangan.
- MariaDB: server yang mati menyalin data dari node lain saat hidup lagi, lalu kembali menjadi penulis.
Pemilihan utama terjadi di antara server Anda sendiri (etcd atau garbd di ketiga server). Saka Panel tidak ikut di jalur itu, jadi failover tetap berjalan walau Saka Panel mati.
Hapus klaster
Hapus dari halaman detail klaster dengan mengetik nama klaster sebagai konfirmasi. Semua data database ini di semua lokasi dihapus dan tidak bisa dibatalkan. Proxy di server aplikasi ikut dilepas. Server yang sedang tidak terjangkau menyimpan sisanya sampai server itu dilepas.
Cadangan dan pulih ke titik waktu tertentu, migrasi database dibantu agent AI Anda, dan pembuatan server otomatis lewat akun cloud Anda.