Dokumentasi / Database terkelola

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:

PeranIsiTugas
Server data 1Database lengkapUtama atau replika.
Server data 2Database lengkapReplika atau utama.
SaksiTanpa dataIkut 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 17MariaDB 12.3
TeknologiPatroni + etcdGalera + garbd (saksi)
Cocok untukAplikasi baruWordPress, Laravel, aplikasi PHP (kompatibel MySQL)
PenulisSatu utama, satu replikaNode data pertama yang sehat menjadi penulis, node lain cadangan penulis
Mode replikasiAsinkron atau sinkron (pilihan)Selalu sinkron
Port54323306
Pengguna awalpostgresroot
TLSWajib (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)

MariaDB Galera selalu sinkron: setiap tulisan disetujui kedua lokasi data sebelum selesai.

Membuat klaster

  1. Tambahkan minimal tiga server ke Saka (lihat Mulai). Semuanya harus tersambung.
  2. Buka Database, tekan + Buat klaster database.
  3. Pilih mesin, dua server data, satu server saksi, mode replikasi, dan nama (huruf kecil, angka, tanda minus, 3-31 karakter, diawali huruf).
  4. 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:

.env
DATABASE_URL=postgresql://postgres:[email protected]:5432,198.51.100.20:5432/postgres?sslmode=require&target_session_attrs=read-write&connect_timeout=5

MariaDB: alamat langsung

.env
DATABASE_URL=mysql://root:[email protected]:3306/?ssl=true

Alamat 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:

PostgreSQL lewat proxy
DATABASE_URL=postgresql://postgres:[email protected]:5432/postgres?sslmode=require
MariaDB lewat proxy
DATABASE_URL=mysql://root:[email protected]:3306/?ssl=true

Contoh yang dipakai saat uji (sertifikat MariaDB dibuat otomatis, jadi verifikasi sertifikat dimatikan; koneksinya tetap terenkripsi):

PHP (mysqli)
$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);
Node.js (mysql2)
mysql.createConnection({ host: '127.0.0.1', user: 'root', password: sandi,
  database: 'nama_db', ssl: { rejectUnauthorized: false } })
Contoh Laravel .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nama_database_anda
DB_USERNAME=root
DB_PASSWORD=SANDI

TLS 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:

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 lagiBaris hilang
MariaDB, node penulis dimatikan mendadak, klien PHP dan Node lewat proxy±11 detik0
PostgreSQL uji produk, node penulis dimatikan mendadak, klien lewat proxy33 detik0
PostgreSQL uji konsep, mode asinkron38,6 detik0
PostgreSQL uji konsep, mode sinkron32,0 detik0

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.

Segera

Cadangan dan pulih ke titik waktu tertentu, migrasi database dibantu agent AI Anda, dan pembuatan server otomatis lewat akun cloud Anda.