Konfigurasi CES
Panduan lengkap untuk mengonfigurasi Centralized Enrollment System (CES) di Lenz Dashboard, termasuk setup Coordinator, pendaftaran Agent, dan konfigurasi Replication.
Pengenalan
CES (Centralized Enrollment System) adalah fitur yang memungkinkan beberapa instance Visionaire saling berbagi data enrollment wajah secara otomatis melalui replikasi database PostgreSQL. Dengan CES, setiap penambahan wajah baru di satu instance akan segera tersedia di seluruh instance yang terhubung.
Arsitektur CES menggunakan model Master–Slave:
| Peran | Deskripsi |
|---|---|
| Master (Coordinator) | Server pusat yang menjadi sumber kebenaran data enrollment. Menerima operasi tulis dan menyebarkan perubahan ke seluruh Slave. |
| Slave (Agent) | Instance yang menyinkronkan data dari Master. Operasi tulis akan diarahkan ke Master secara otomatis. |
Pilihan mode (Master atau Slave) bersifat permanen. Setelah Anda menyimpan konfigurasi mode, pilihan tidak dapat diubah. Pastikan Anda telah menentukan peran instance ini sebelum melanjutkan.
Cara Menggunakan
Buka halaman CES → Konfigurasi di Lenz Dashboard (/ces/configuration). Ikuti langkah-langkah berikut secara berurutan.
Aktifkan CES
Di bagian paling atas halaman, aktifkan toggle Aktifkan CES. Sistem akan menyimpan status ini secara otomatis.
Setelah CES diaktifkan, bagian Mode Operasi akan muncul di bawah.
Pilih Mode Operasi
Tentukan peran instance ini dalam topologi CES:
- Master — Instance ini akan menjadi Coordinator. Pilih mode ini untuk server utama yang menyimpan data enrollment terpusat.
- Slave — Instance ini akan menjadi Agent yang menyinkronkan data dari Master. Pilih mode ini untuk instance cabang atau sekunder.
Jika Anda memilih Master, isikan Nama Instance saja. Jika Anda memilih Slave, isikan Nama Instance, URL Server Master, dan API Key Master.
Konfigurasi Mode Master
| Field | Keterangan |
|---|---|
| Nama Instance | Nama unik untuk instance ini (contoh: ces-master). Digunakan untuk identifikasi di halaman Monitoring. |
Konfigurasi Mode Slave
| Field | Keterangan |
|---|---|
| Nama Instance | Nama unik untuk instance Slave ini (contoh: ces-slave-jakarta). |
| URL Server Master | URL lengkap dari instance Master (contoh: https://master.example.com). |
| API Key Master | Token autentikasi untuk terhubung ke server Master. |
Klik tombol Konfirmasi Mode setelah semua field terisi. Mode yang telah dikonfirmasi tidak dapat diubah kembali.
Setup Replication Database
Setelah mode dikonfirmasi, bagian Replikasi Database akan muncul. Bagian ini mengonfigurasi replikasi logis PostgreSQL antara database Lenz dan Fremis.
Pada mode Master, Anda hanya perlu mengisi detail koneksi Database Fremis Lokal (tempat publikasi akan dibuat).
| Field | Keterangan |
|---|---|
| Host | Alamat host database Fremis lokal |
| Port | Port PostgreSQL (default: 5432) |
| Nama Database | Nama database (contoh: fremis) |
| User | User PostgreSQL dengan hak replikasi |
| Password | Password user database |
Klik Setup Replikasi. Sistem akan membuat publication PostgreSQL secara otomatis.
Pada mode Slave, Anda perlu mengisi tiga koneksi database:
1. Koneksi Lenz Master — Database Lenz di server Master.
2. Koneksi Fremis Master — Database Fremis di server Master.
3. Database Fremis Lokal — Database Fremis di instance Slave ini (tempat subscription akan dibuat).
| Field | Keterangan |
|---|---|
| Host | Alamat host database |
| Port | Port PostgreSQL (default: 5432) |
| Nama Database | Nama database |
| User | User PostgreSQL dengan hak replikasi |
| Password | Password user database |
Gunakan tombol Salin dari Lenz Master untuk mengisi otomatis detail koneksi Fremis Master dari koneksi Lenz Master yang sudah diisi.
Klik Setup Replikasi. Sistem akan membuat subscription PostgreSQL ke Master.
Konfigurasi Replication
Bagian ini menjelaskan field-field yang tersedia saat melakukan setup replikasi database.
Field Koneksi Database
Setiap koneksi database (Lenz Master, Fremis Master, Fremis Lokal) menggunakan struktur yang sama:
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
host | string | Ya | Hostname atau IP address server PostgreSQL |
port | number | Ya | Port PostgreSQL. Default: 5432 |
dbname | string | Ya | Nama database target |
user | string | Ya | User PostgreSQL. Harus memiliki privilege REPLICATION |
password | string | Ya | Password autentikasi database |
Konfigurasi PostgreSQL yang Dibutuhkan
Untuk mendukung replikasi logis, PostgreSQL di server Master harus memenuhi konfigurasi berikut:
| Parameter | Nilai yang Dibutuhkan | Keterangan |
|---|---|---|
wal_level | logical | Mengaktifkan replikasi logis di WAL |
max_replication_slots | Minimal 2 | Jumlah slot replikasi yang tersedia |
Perubahan pada wal_level dan max_replication_slots memerlukan restart PostgreSQL agar berlaku. Sistem akan menginformasikan jika restart diperlukan setelah setup selesai.
Preference Keys
CES menggunakan sistem preference untuk menyimpan konfigurasi. Berikut adalah key yang digunakan:
| Preference Key | Tipe | Keterangan |
|---|---|---|
ces_enabled | boolean | Status aktif/nonaktif CES |
ces_mode | string | Mode operasi: master atau slave |
ces_instance_name | string | Nama unik instance |
ces_master_url | string | URL server Master (hanya untuk Slave) |
ces_master_api_key | string | API Key server Master (hanya untuk Slave) |
API Reference
GET /api/ces/config
Mengambil konfigurasi CES yang sedang aktif.
Autentikasi: Bearer Token
Response:
{
"ok": true,
"message": "successfully retrieved CES config",
"result": {
"ces_enabled": true,
"ces_mode": "master",
"ces_master_url": "http://master-gateway.example.com:6015"
}
}GET /api/ces/replication/status
Mengambil status replikasi database saat ini, termasuk informasi apakah replikasi sudah dikonfigurasi dan kondisi WAL.
Autentikasi: Bearer Token
Response (mode Master):
{
"ok": true,
"result": {
"mode": "master",
"is_configured": true,
"wal_level": {
"current": "logical",
"required": "logical",
"ok": true
},
"max_replication_slots": {
"current": 10,
"required": 2,
"ok": true,
"is_set": true
},
"publications": [
{
"name": "lenz_publication",
"tables": ["enrolled_face", "face_image"]
}
]
}
}Response (mode Slave):
{
"ok": true,
"result": {
"mode": "slave",
"is_configured": true,
"subscriptions": [
{
"name": "lenz_subscription",
"exists": true,
"worker_status": {
"pid": 12345,
"state": "streaming",
"received_lsn": "0/5A3F210",
"latest_end_lsn": "0/5A3F210",
"replication_lag_bytes": 0
},
"table_status": [
{
"table_name": "enrolled_face",
"state": "ready",
"state_desc": "Table is in sync"
}
]
}
]
}
}POST /api/ces/replication/setup
Menjalankan setup replikasi database. Pada mode Master, endpoint ini membuat publication PostgreSQL. Pada mode Slave, endpoint ini membuat subscription ke database Master.
Autentikasi: Bearer Token
Request Body (mode Master):
{
"fremis_local": {
"host": "localhost",
"port": 5432,
"dbname": "fremis",
"user": "replication_user",
"password": "your_password"
}
}Request Body (mode Slave):
{
"lenz_master": {
"host": "master-db.example.com",
"port": 5432,
"dbname": "vdash",
"user": "replication_user",
"password": "your_password"
},
"fremis_master": {
"host": "master-db.example.com",
"port": 5432,
"dbname": "fremis",
"user": "replication_user",
"password": "your_password"
},
"fremis_local": {
"host": "localhost",
"port": 5432,
"dbname": "fremis",
"user": "replication_user",
"password": "your_password"
}
}Format Response
Response Setup Replication (Master)
{
"ok": true,
"message": "Replication setup completed",
"result": {
"mode": "master",
"wal_level": {
"current": "logical",
"required": "logical",
"changed": false
},
"max_replication_slots": {
"current": 2,
"required": 2,
"changed": true
},
"publications": [
{
"name": "lenz_publication",
"exists": false,
"created": true
}
],
"restart_required": true
}
}Response Setup Replication (Slave)
{
"ok": true,
"message": "Replication setup completed",
"result": {
"mode": "slave",
"max_replication_slots": {
"current": 2,
"required": 2,
"changed": false
},
"subscriptions": [
{
"name": "lenz_subscription",
"exists": false,
"created": true
}
],
"restart_required": false
}
}Keterangan Field Response
| Field | Keterangan |
|---|---|
ok | true jika operasi berhasil |
result.mode | Mode instance: master atau slave |
result.is_configured | true jika replikasi sudah pernah dikonfigurasi |
restart_required | true jika PostgreSQL perlu di-restart agar perubahan berlaku |
wal_level.ok | true jika nilai WAL level sudah sesuai kebutuhan |
publications[].created | true jika publication baru dibuat; false jika sudah ada sebelumnya |
subscriptions[].created | true jika subscription baru dibuat; false jika sudah ada sebelumnya |
worker_status.replication_lag_bytes | Ukuran lag replikasi dalam bytes. Nilai 0 berarti Slave sudah sinkron. |