Nodeflux Central
Ces

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:

PeranDeskripsi
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

FieldKeterangan
Nama InstanceNama unik untuk instance ini (contoh: ces-master). Digunakan untuk identifikasi di halaman Monitoring.

Konfigurasi Mode Slave

FieldKeterangan
Nama InstanceNama unik untuk instance Slave ini (contoh: ces-slave-jakarta).
URL Server MasterURL lengkap dari instance Master (contoh: https://master.example.com).
API Key MasterToken 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).

FieldKeterangan
HostAlamat host database Fremis lokal
PortPort PostgreSQL (default: 5432)
Nama DatabaseNama database (contoh: fremis)
UserUser PostgreSQL dengan hak replikasi
PasswordPassword 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).

FieldKeterangan
HostAlamat host database
PortPort PostgreSQL (default: 5432)
Nama DatabaseNama database
UserUser PostgreSQL dengan hak replikasi
PasswordPassword 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:

FieldTipeWajibKeterangan
hoststringYaHostname atau IP address server PostgreSQL
portnumberYaPort PostgreSQL. Default: 5432
dbnamestringYaNama database target
userstringYaUser PostgreSQL. Harus memiliki privilege REPLICATION
passwordstringYaPassword autentikasi database

Konfigurasi PostgreSQL yang Dibutuhkan

Untuk mendukung replikasi logis, PostgreSQL di server Master harus memenuhi konfigurasi berikut:

ParameterNilai yang DibutuhkanKeterangan
wal_levellogicalMengaktifkan replikasi logis di WAL
max_replication_slotsMinimal 2Jumlah 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 KeyTipeKeterangan
ces_enabledbooleanStatus aktif/nonaktif CES
ces_modestringMode operasi: master atau slave
ces_instance_namestringNama unik instance
ces_master_urlstringURL server Master (hanya untuk Slave)
ces_master_api_keystringAPI 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

FieldKeterangan
oktrue jika operasi berhasil
result.modeMode instance: master atau slave
result.is_configuredtrue jika replikasi sudah pernah dikonfigurasi
restart_requiredtrue jika PostgreSQL perlu di-restart agar perubahan berlaku
wal_level.oktrue jika nilai WAL level sudah sesuai kebutuhan
publications[].createdtrue jika publication baru dibuat; false jika sudah ada sebelumnya
subscriptions[].createdtrue jika subscription baru dibuat; false jika sudah ada sebelumnya
worker_status.replication_lag_bytesUkuran lag replikasi dalam bytes. Nilai 0 berarti Slave sudah sinkron.

Tips & Troubleshooting


Selanjutnya

On this page