Men-deploy dan mengelola pekerja

Dokumen ini menjelaskan cara men-deploy, menskalakan, menonaktifkan, dan memantau pekerja Spanner Omni di virtual machine (VM) dan Kubernetes.

Worker adalah node komputasi khusus dan tanpa status yang dirancang untuk memindahkan operasi latar belakang dan operasi yang menggunakan banyak resource dari server Spanner Omni. Worker tidak menghosting data pengguna atau berpartisipasi dalam pemilihan pemimpin, transaksi, atau aktivitas database inti lainnya. Tidak seperti server, pekerja tidak dikaitkan dengan zona tertentu. Sebagai gantinya, pekerja mendaftar dengan lokasi dan dapat menjalankan tugas untuk zona mana pun di lokasi tersebut. Penambahan dan penghapusan pekerja bersifat ringan dan instan karena pekerja tidak memiliki status dan tidak memerlukan pergerakan data atau penyeimbangan ulang.

Pekerja diperlukan untuk membuat indeks vektor pada tabel besar (lebih dari 1 juta baris) untuk kueri penelusuran approximate nearest neighbor (ANN). Untuk mengetahui informasi selengkapnya, lihat Ringkasan penelusuran vektor Spanner Omni.

Worker hanya tersedia di edisi Komersial Spanner Omni; edisi Developer tidak mendukung worker. Komputasi pekerja ditagih dengan tarif yang sama seperti server dalam deployment (per vCPU). Untuk mengetahui informasi selengkapnya, lihat Ringkasan edisi Spanner Omni.

Sebelum memulai

Sebelum menambahkan pekerja ke deployment Spanner Omni yang ada, pastikan lingkungan Anda memenuhi persyaratan berikut:

  • Download dan siapkan biner Spanner Omni.

  • Deployment yang ada: Pastikan Anda memiliki deployment Spanner Omni yang berjalan (bukan deployment server tunggal) dalam status READY, yang dikonfigurasi dengan edisi Komersial. Edisi Developer tidak mendukung pekerja. Komputasi pekerja ditagih dengan tarif yang sama seperti server dalam deployment. Untuk mengetahui informasi selengkapnya, lihat Ringkasan edisi Spanner Omni. Pastikan Anda memiliki informasi berikut:

    • Nama lokasi target (misalnya, us-central1) seperti yang ditentukan dalam konfigurasi deployment Anda.
    • Endpoint deployment (HOST:PORT, seperti my-spanner-deployment:15003) atau daftar alamat server root (ROOT_HOST_1:PORT, ROOT_HOST_2:PORT, seperti root-server-1:15000, root-server-2:15000) untuk penemuan cluster.
  • Resource sistem dan hardware: Pastikan resource komputasi yang Anda alokasikan untuk pekerja sudah cukup untuk melakukan operasi yang diperlukan dalam jangka waktu yang dapat diterima.

  • Konfigurasi vSphere: Jika Anda menjalankan Spanner Omni di platform virtualisasi vSphere, nonaktifkan virtualisasi Time Stamp Counter (TSC). Tambahkan monitor_control.virtual_rdtsc = FALSE ke file konfigurasi .vmx virtual machine.

  • Konfigurasi jaringan dan firewall: Pekerja menggunakan port 15027 selain port komunikasi server standar (15000 hingga 15025). Pastikan konfigurasi jaringan Anda mengizinkan komunikasi di port 15000 hingga 15027.

Men-deploy pekerja di VM

Untuk men-deploy pekerja di virtual machine (VM), mulai proses pekerja menggunakan endpoint deployment atau daftar server root.

Opsi A: Mulai menggunakan endpoint deployment

Untuk memulai pekerja menggunakan endpoint deployment, jalankan perintah spanner workers start:

spanner workers start \
  --location=LOCATION_NAME \
  --address=WORKER_HOSTNAME:WORKER_PORT_BASE \
  --deployment=DEPLOYMENT_ENDPOINT \
  --base-dir=BASE_DIR \
  --license-file-path=LICENSE_FILE_PATH

Ganti kode berikut:

  • LOCATION_NAME: Nama lokasi target—misalnya, us-central1.
  • WORKER_HOSTNAME: Nama host atau alamat IP yang dapat di-resolve dari VM pekerja.
  • WORKER_PORT_BASE: Port dasar tempat pekerja dimulai—misalnya, 15000 atau 20000.
  • DEPLOYMENT_ENDPOINT: Host dan port endpoint deployment—misalnya, my-spanner-deployment:15003.
  • BASE_DIR: Direktori dasar untuk data dan log pekerja—misalnya, /var/spanner.
  • LICENSE_FILE_PATH: Jalur ke file lisensi Spanner Omni Anda.

Opsi B: Mulai menggunakan daftar server root

Untuk memulai pekerja menggunakan daftar server root, jalankan perintah spanner workers start:

spanner workers start \
  --location=LOCATION_NAME \
  --address=WORKER_HOSTNAME:WORKER_PORT_BASE \
  --join-servers=ROOT_SERVER_1_HOST:ROOT_SERVER_PORT_BASE,\
ROOT_SERVER_2_HOST:ROOT_SERVER_PORT_BASE \
  --base-dir=BASE_DIR \
  --license-file-path=LICENSE_FILE_PATH

Ganti kode berikut:

  • LOCATION_NAME: Nama lokasi target—misalnya, us-central1.
  • WORKER_HOSTNAME: Nama host atau alamat IP yang dapat di-resolve dari VM pekerja.
  • WORKER_PORT_BASE: Port dasar tempat pekerja dimulai—misalnya, 15000 atau 20000.
  • ROOT_SERVER_1_HOST, ROOT_SERVER_2_HOST: Nama host atau alamat IP server root dalam deployment Anda.
  • ROOT_SERVER_PORT_BASE: Port dasar server root—misalnya, 15000.
  • BASE_DIR: Direktori dasar untuk data dan log pekerja—misalnya, /var/spanner.
  • LICENSE_FILE_PATH: Jalur ke file lisensi Spanner Omni Anda.

Mengonfigurasi enkripsi

Jika deployment Spanner Omni Anda menggunakan enkripsi TLS atau mTLS, konfigurasi enkripsi untuk setiap pekerja:

  1. Perbarui sertifikat server Anda untuk menyertakan nama host pekerja jika Anda belum mencakupnya.
  2. Salin direktori sertifikat yang berisi ca.crt, server.crt, dan server.key ke VM pekerja.
  3. Tambahkan tanda --certificate-directory saat menjalankan spanner workers start:

    spanner workers start \
      --location=LOCATION_NAME \
      --address=WORKER_HOSTNAME:WORKER_PORT_BASE \
      --deployment=DEPLOYMENT_ENDPOINT \
      --base-dir=BASE_DIR \
      --certificate-directory=CERTIFICATE_DIRECTORY \
      --license-file-path=LICENSE_FILE_PATH
    

    Ganti CERTIFICATE_DIRECTORY dengan direktori yang berisi ca.crt, server.crt, dan server.key.

Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi sertifikat dan deployment yang aman, lihat Membuat deployment yang aman di VM.

Men-deploy pekerja di Kubernetes

Di lingkungan Kubernetes seperti Google Kubernetes Engine (GKE) atau Amazon Elastic Kubernetes Service (Amazon EKS), Anda men-deploy pekerja sebagai bagian dari rilis Spanner Omni Helm yang ada di namespace yang sama dengan cluster Anda. Helm chart men-deploy pekerja sebagai StatefulSet Kubernetes dengan Service tanpa antarmuka, sehingga setiap pod pekerja memiliki identitas jaringan yang stabil dan PersistentVolumeClaims (PVC), yang memungkinkan server root berkomunikasi dengan andal dengan setiap pekerja.

Secara default, Helm chart menjadwalkan pod pekerja hanya pada node yang diberi label spanner-role=workers, mentoleransi taint spanner-role=workers:NoSchedule, dan menjalankan paling banyak satu pod pekerja per node. Sebelum mengaktifkan pekerja, tambahkan node pool dengan label dan taint ini yang memiliki setidaknya workers.replicas node. Setiap node memerlukan CPU dan memori yang dapat dialokasikan yang cukup untuk satu pod pekerja, seperti yang ditetapkan oleh workers.resources.cpu dan workers.resources.memory. Kubernetes mencadangkan sebagian kapasitas setiap node untuk komponen sistem, jadi pilih node yang lebih besar dari nilai ini. Untuk menggunakan label yang berbeda, tetapkan workers.nodeLabelKey dan workers.nodeLabelValue. Untuk menghapus persyaratan label, tetapkan workers.nodeLabelKey="". Untuk mengganti aturan penjadwalan default, tetapkan workers.affinity.

Untuk mengaktifkan pekerja di deployment yang ada, jalankan perintah helm upgrade:

helm upgrade spanner-omni HELM_CHART_PATH \
  --reuse-values \
  --set workers.enabled=true \
  --namespace NAMESPACE

Ganti kode berikut:

  • HELM_CHART_PATH: Jalur ke diagram Helm Spanner Omni Anda.
  • NAMESPACE: Namespace Kubernetes tempat cluster Spanner Omni Anda di-deploy—misalnya, spanner-ns.

Agar pekerja dapat berjalan di node mana pun yang memiliki CPU dan memori yang dapat dialokasikan, tetapkan workers.nodeLabelKey ke string kosong. Tindakan ini menghapus persyaratan label node dan toleransi taint:

helm upgrade spanner-omni HELM_CHART_PATH \
  --reuse-values \
  --set workers.enabled=true \
  --set workers.nodeLabelKey="" \
  --namespace NAMESPACE

Setelan konfigurasi opsional mencakup:

  • --set workers.replicas=WORKER_REPLICAS: Jumlah replika worker yang akan di-deploy. Defaultnya adalah 1.

  • --set workers.resources.cpu=CPU_CORES: Batas dan permintaan CPU untuk setiap pekerja. Defaultnya adalah 6.

  • --set workers.resources.memory=MEMORY_LIMIT: Batas dan permintaan memori untuk setiap pekerja. Defaultnya adalah 24Gi.

  • --set workers.storage.size=STORAGE_SIZE: Kapasitas penyimpanan untuk setiap pekerja. Defaultnya adalah 20Gi.

  • --set workers.storage.storageClassName=STORAGE_CLASS: Class penyimpanan yang akan digunakan untuk penyimpanan pekerja—misalnya, hyperdisk-balanced-rwo di GKE atau aws-gp3 di Amazon EKS. Defaultnya adalah string kosong, yang mewarisi kelas penyimpanan default cluster.

  • --set workers.port=WORKER_PORT: Port jaringan yang digunakan oleh pekerja untuk memproses. Defaultnya adalah deployment.basePort, yaitu 15000.

  • --set workers.joinServers={ROOT_HOST_1:PORT,ROOT_HOST_2:PORT}: Daftar eksplisit alamat server root yang dipisahkan koma untuk bergabung. Defaultnya adalah daftar kosong ([]), yang menemukan semua server root aktif dari topologi deployment.

  • --set workers.nodeLabelKey=NODE_LABEL_KEY: Kunci label node Kubernetes yang digunakan untuk afinitas dan toleransi node guna mengisolasi pekerja ke node pool khusus. Defaultnya adalah spanner-role. Setel ke string kosong "" untuk menonaktifkan afinitas dan toleransi node.

  • --set workers.nodeLabelValue=NODE_LABEL_VALUE: Nilai label node Kubernetes yang digunakan untuk afinitas dan toleransi node. Defaultnya adalah workers.

  • --set workers.pdbMaxUnavailable=MAX_UNAVAILABLE: Jumlah maksimum pod pekerja yang dapat tidak tersedia selama gangguan sukarela di PodDisruptionBudget. Defaultnya adalah 1.

  • workers.affinity: Aturan afinitas Kubernetes kustom untuk pod pekerja. Jika tidak ditentukan, afinitas node default (menggunakan workers.nodeLabelKey dan workers.nodeLabelValue) serta anti-afinitas pod di seluruh nama host (kubernetes.io/hostname) akan diterapkan. Karena ini adalah objek bertingkat, tentukan di file values.yaml menggunakan flag -f.

Memverifikasi deployment pekerja

Untuk memverifikasi bahwa pod pekerja sedang berjalan dan siap, jalankan perintah berikut:

kubectl get pods --namespace NAMESPACE -l app.kubernetes.io/component=spanner-worker

Menskalakan dan menonaktifkan pekerja

Worker tidak menyimpan data pengguna atau berpartisipasi dalam konsensus database. Menskalakan dan menghentikan worker dapat dilakukan secara instan. Anda dapat memulai pekerja sebelum atau setelah memulai pembuatan indeks vektor, dan menonaktifkan pekerja segera setelah pembuatan indeks selesai.

Mengotomatiskan penskalaan pekerja

Untuk mengotomatiskan pembuatan dan penskalaan pekerja, pantau metrik spanner_box_compute_heavy_workers_required. Jika nilai metrik lebih besar dari 0, deployment memerlukan satu atau beberapa pekerja untuk menyelesaikan operasi latar belakang yang tertunda, seperti membuat indeks vektor pada tabel besar. Saat nilai metrik kembali ke 0, semua operasi yang tertunda telah selesai dan Anda dapat menonaktifkan pekerja.

Menonaktifkan pekerja VM

Untuk menghentikan proses pekerja yang berjalan di VM, tekan Control+C di terminal yang menjalankan proses pekerja, atau hentikan proses menggunakan ID proses (PID):

kill -TERM PID

Ganti PID dengan ID proses spanner workers. Atau, matikan VM pekerja.

Menonaktifkan worker Kubernetes

Untuk menonaktifkan pekerja di Kubernetes, nonaktifkan pekerja di rilis Helm atau turunkan skala replika pekerja secara langsung menggunakan kubectl:

  • Menonaktifkan pekerja: Untuk menghapus pekerja StatefulSet dan layanan dari cluster Anda sambil mempertahankan deployment lainnya, jalankan perintah helm upgrade dengan workers.enabled=false:

    helm upgrade spanner-omni HELM_CHART_PATH \
      --reuse-values \
      --set workers.enabled=false \
      --namespace NAMESPACE
    

    Ganti kode berikut:

    • HELM_CHART_PATH: Jalur ke diagram Helm Spanner Omni Anda.
    • NAMESPACE: Namespace Kubernetes tempat cluster Spanner Omni Anda di-deploy—misalnya, spanner-ns.
  • Perkecil skala replika worker: Untuk memperkecil skala pod worker menjadi nol replika sambil menjaga konfigurasi worker tetap aktif di cluster Anda, jalankan perintah kubectl scale:

    kubectl scale statefulset spanner-worker \
      --replicas=0 \
      --namespace NAMESPACE
    

    Ganti NAMESPACE dengan namespace Kubernetes tempat cluster Spanner Omni Anda di-deploy—misalnya, spanner-ns.

Memantau dan memecahkan masalah pekerja

Jika deployment Anda telah mengaktifkan pemantauan, Anda dapat memantau pekerja menggunakan dasbor Prometheus atau Grafana. Pekerja mengekspos metrik yang serupa dengan server Spanner Omni. Dasbor Grafana mencakup dasbor Worker Insights yang memungkinkan Anda memantau penggunaan resource setiap pekerja.

Worker menulis file log ke subdirektori logs dalam direktori dasar yang ditentukan oleh --base-dir:

BASE_DIR/logs

Perintah spanner admin diagnostics create tidak mengumpulkan log atau diagnostik dari pekerja. Untuk memeriksa log pekerja, lihat file di BASE_DIR/logs langsung di mesin atau pod pekerja, atau jalankan kubectl logs untuk pod pekerja Kubernetes.

Untuk mengetahui informasi selengkapnya tentang pemantauan dan konfigurasi dasbor, lihat Ringkasan pemantauan dan Memantau menggunakan dasbor Grafana.

Pembuatan indeks vektor tidak berjalan

Jika Anda membuat indeks vektor pada tabel besar dan pembuatan indeks tetap tertunda tanpa ada progres, pastikan setidaknya ada satu pekerja yang berjalan dan terhubung ke deployment.

Spanner Omni memungkinkan Anda membuat indeks vektor meskipun tidak ada pekerja yang aktif sehingga Anda dapat men-deploy pekerja hanya jika diperlukan. Jika tidak ada pekerja yang aktif, operasi pembuatan indeks akan dijeda tanpa batas waktu hingga pekerja di-deploy. Setelah pekerja dimulai dan didaftarkan ke deployment, pembuatan indeks akan dilanjutkan secara otomatis.