Konfigurasi deployment

Dokumen ini menjelaskan konfigurasi deployment untuk Spanner Omni di virtual machine (VM) atau server bare metal. Dokumen ini menjelaskan struktur dan opsi konfigurasi untuk file konfigurasi deployment YAML (deployment.yaml) yang digunakan untuk menentukan topologi deployment VM dan parameter runtime saat menggunakan Spanner Omni CLI.

Untuk mempelajari cara membuat deployment, lihat salah satu artikel berikut:

Ringkasan konfigurasi deployment

Saat membuat deployment di VM atau server bare metal, Anda meneruskan file konfigurasi ini ke perintah spanner deployment create di Spanner Omni CLI:

spanner deployment create --config-file=deployment.yaml

Konfigurasi deployment menentukan elemen utama berikut:

  • Mode server tunggal: Mode pengoptimalan yang membatasi seluruh deployment ke satu server untuk pengembangan dan pengujian.
  • Lokasi: Situs fisik atau region cloud tempat server Anda berada.
  • Jarak lokasi: Latensi jaringan antara pasangan lokasi.
  • Zona: Pengelompokan server logis yang merepresentasikan replika Paxos.
  • Server root: Server khusus yang bertanggung jawab atas kuorum keanggotaan dan metadata zona.
  • Jenis replika: Peran untuk setiap zona (baca-tulis, saksi, atau hanya baca).
  • SLA Clock: Parameter sinkronisasi TrueTime, termasuk error jitter clock dan tingkat penyimpangan.
  • Setelan deployment: Setelan global seperti lokasi pemimpin pilihan dan setelan keamanan autentikasi.

Struktur file konfigurasi

Contoh berikut menunjukkan struktur tingkat teratas file konfigurasi deployment:

# Deployment name
name: regional-deployment

# Restrict the entire deployment to a single server (optional, default: false)
single_server: false

# Physical or logical locations (regions)
location:
  - name: us-central1

# Network distances between locations (optional)
location_distance:
  - src: us-central1
    dest: us-east1
    latency_ms: 30

# Zones and root servers in the deployment
zone:
  - name: us-central1-a
    location: us-central1
    single_server: false
    replica_type: READ_WRITE
    root_server:
      - host: rootserver1.example.internal
        port_base: 15000

# Clock synchronization SLA parameters (optional)
clock_sla:
  jitter_in_s: 0.005
  rate_error_in_ppm: 200

# Deployment settings (optional)
deployment_settings:
  preferred_leader_location: us-central1
  security_settings:
    insecure_mode: true

Kolom tingkat teratas

Konfigurasi deployment mendukung kolom tingkat teratas berikut:

Kolom Jenis Deskripsi
name String Nama deployment, seperti prod, staging, atau regional-deployment.
single_server Boolean Opsional. Jika disetel ke true, menentukan bahwa seluruh deployment adalah deployment server tunggal, yang membatasinya ke satu zona dan satu server. Deployment yang dibuat dengan single_server: true tidak dapat menambahkan zona atau server setelah dibuat. Jika Anda ingin menjalankan Spanner Omni dalam mode server tunggal, Anda tidak perlu membuat konfigurasi ini secara manual karena Spanner Omni akan membuatnya secara otomatis saat Anda menjalankan perintah spanner start-single-server. Default-nya adalah false.
location Daftar objek Lokasi fisik atau logis (region) dalam deployment.
location_distance Daftar objek Opsional. Latensi jaringan antara pasangan lokasi.
zone Daftar objek Wajib. Zona yang membentuk deployment. Anda harus menentukan setidaknya satu zona.
clock_sla Objek Opsional. Parameter perjanjian tingkat layanan (SLA) sinkronisasi jam untuk software TrueTime.
deployment_settings Objek Opsional. Setelan runtime untuk penempatan pemimpin pilihan dan autentikasi keamanan.

Nama Deployment

Kolom name menentukan nama yang dipilih pengguna untuk deployment. Anda dapat menggunakan string apa pun yang mengidentifikasi deployment, seperti prod, staging, atau regional-deployment.

Mode server tunggal

Kolom single_server tingkat teratas menentukan bahwa seluruh deployment adalah deployment server tunggal. Jika disetel ke true, setelan ini membatasi deployment ke satu zona dan satu server, yang mengurangi overhead resource untuk lingkungan pengembangan dan pengujian lokal. Deployment yang dibuat dengan single_server:true tidak dapat menambahkan zona atau server setelah dibuat.

Jika Anda ingin menjalankan Spanner Omni dalam mode server tunggal, Anda tidak perlu membuat konfigurasi ini secara manual. Saat Anda menjalankan perintah spanner start-single-server, Spanner Omni akan otomatis membuat konfigurasi ini untuk Anda. Untuk mengetahui informasi selengkapnya, lihat Opsi A: Deployment server tunggal.

Kolom single_server tingkat teratas berbeda dengan kolom single_server tingkat zona:

  • Kolom top-level single_server berlaku untuk seluruh deployment.
  • Kolom tingkat zona single_server hanya berlaku untuk setiap zona dalam deployment. Untuk mengetahui informasi selengkapnya, lihat Zona server tunggal.

Lokasi

Lokasi mewakili pusat data fisik atau region cloud tempat mesin berada (setara dengan region di Google Cloud).

Anda menentukan lokasi dalam daftar location:

location:
  - name: us-central1
  - name: europe-west2

Nama lokasi harus memenuhi persyaratan berikut:

  • Harus dimulai dengan huruf dan diakhiri dengan huruf atau digit.
  • Hanya boleh berisi huruf, digit, garis bawah (_), dan tanda hubung (-).
  • Dapat secara opsional menyertakan awalan domain yang diikuti dengan titik dua (misalnya, cloud.google.com:us-east1 atau onprem:datacenter1).
  • Tidak dapat menggunakan nama yang dicadangkan default.
  • Harus unik di seluruh deployment.

Jarak lokasi

Daftar location_distance menentukan latensi jaringan antara pasangan lokasi. Spanner Omni menggunakan informasi ini untuk mengoptimalkan replikasi dan perutean kueri.

location_distance:
  - src: us-central1
    dest: europe-west2
    latency_ms: 105
  - src: europe-west2
    dest: us-central1
    latency_ms: 110

Setiap objek jarak lokasi berisi kolom berikut:

  • src: Wajib diisi. Nama lokasi sumber. Harus cocok dengan lokasi yang ditentukan dalam daftar location.
  • dest: Wajib diisi. Nama lokasi tujuan. Harus cocok dengan lokasi yang ditentukan dan tidak boleh sama dengan src.
  • latency_ms: Latensi jaringan dalam milidetik. Harus berupa bilangan bulat non-negatif. Jika tidak ada, Spanner Omni mengasumsikan bahwa latensi dapat diabaikan (di bawah milidetik).

Latensi jaringan di jaringan fisik tidak selalu simetris. Jika Anda memberikan (src, dest) dan (dest, src), Spanner Omni akan mematuhi kedua pengukuran tersebut. Jika Anda hanya memberikan satu arah, Spanner Omni mengasumsikan arah sebaliknya memiliki latensi yang sama.

Zona

Zona adalah pengelompokan logis dari satu atau beberapa server dalam suatu lokasi. Untuk replikasi data, setiap zona merepresentasikan replika Paxos. Deployment harus memiliki setidaknya satu zona.

zone:
  - name: us-central1-a
    location: us-central1
    single_server: false
    replica_type: READ_WRITE
    root_server:
      - host: rootserver1.example.internal
        port_base: 15000
      - host: rootserver2.example.internal
        port_base: 15000
      - host: rootserver3.example.internal
        port_base: 15000

Setiap objek zona mendukung kolom berikut:

Kolom Jenis Deskripsi
name String Wajib. Nama zona. Mengikuti aturan penamaan yang sama dengan nama lokasi. Harus unik di seluruh deployment.
location String Nama lokasi tempat zona berada. Harus cocok dengan lokasi yang ditentukan dalam daftar location. Jika tidak ada, Spanner Omni akan menetapkan zona ke lokasi default.
single_server Boolean Opsional. Jika disetel ke true, menunjukkan bahwa zona ini hanya memiliki satu server (hanya dapat memiliki satu server root dan tidak ada server lain). Menghilangkan overhead replikasi metadata zona dalam zona. Dalam deployment multi-zona, Anda dapat menyetelnya ke true untuk zona tertentu, seperti zona replika WITNESS yang tidak menyimpan data pengguna, sementara zona lain memiliki beberapa server. Default-nya adalah false.
replica_type String enum Peran replika zona dalam kuorum Paxos. Nilai yang didukung adalah READ_WRITE, WITNESS, dan READ_ONLY. Default-nya adalah READ_WRITE.
root_server Daftar objek Wajib. Daftar server root di zona.

Jenis replika

Spanner Omni mendukung tiga jenis replika untuk zona:

  • READ_WRITE: Menyimpan salinan lengkap data pengguna, melayani permintaan baca, dan memberikan suara dalam kuorum Paxos. Replika baca-tulis memenuhi syarat untuk menjadi pemimpin Paxos untuk mengusulkan penulisan.
  • WITNESS: Memberikan suara dalam kuorum Paxos untuk membantu mencapai konsensus, tetapi tidak dapat menjadi pemimpin. Replika saksi tidak menyimpan data pengguna dan tidak dapat melayani permintaan baca. Konfigurasi ini membantu mencapai kuorum tanpa overhead penyimpanan atau latensi penulisan replika penuh di berbagai lokasi yang berjauhan.
  • READ_ONLY: Menyimpan salinan lengkap data pengguna yang direplikasi secara asinkron dari pemimpin. Replika hanya baca tidak dapat menjadi pemimpin dan tidak memberikan suara dalam kuorum Paxos. Replika ini memindahkan traffic baca dari replika baca-tulis.

Saat mengonfigurasi jenis replika, pastikan deployment Anda memenuhi aturan berikut:

  • Deployment harus berisi setidaknya satu zona READ_WRITE.
  • Jumlah zona READ_WRITE harus lebih besar daripada jumlah zona WITNESS.

Server root

Server root memiliki tanggung jawab khusus di Spanner Omni. Server ini menyimpan metadata zona dan mengelola keanggotaan untuk server lain di zona. Jika kuorum server root tidak tersedia, seluruh zona akan menjadi tidak tersedia.

Saat mengonfigurasi server root di deployment.yaml, perhatikan panduan berikut:

  • Jumlah server root per zona harus berupa bilangan ganjil antara satu dan sembilan, inklusif, untuk memastikan kuorum demi konsistensi. Jika jumlah server adalah bilangan genap, deployment mungkin gagal. Saat mengonfigurasi zona, tetapkan server sebagai server root. Sebaiknya gunakan satu untuk pengembangan atau pengujian dan tiga untuk zona produksi dengan ketersediaan tinggi.
  • Hanya tentukan server root dalam file deployment.yaml selama pembuatan deployment awal. Server non-root dapat ditambahkan nanti untuk menskalakan kapasitas komputasi dan penyimpanan.

Setiap objek server root mendukung kolom berikut:

  • host: Wajib diisi. Nama host atau alamat IP mesin yang menjalankan server.
  • port_base: Opsional. Nomor port awal untuk server. Defaultnya adalah 15000. Port ini menjadi port gRPC publik untuk koneksi klien. Anda harus mencadangkan port dalam rentang [port_base + 1, port_base + 31] (misalnya, 15001 hingga 15031) untuk proses Spanner Omni internal.

Zona server tunggal

Kolom single_server tingkat zona menentukan bahwa setiap zona hanya berisi satu server. Zona server tunggal hanya dapat memiliki satu server root dan tidak dapat menambahkan server lain nanti. Setelan ini menghilangkan overhead replikasi metadata zona dalam zona tersebut.

Tidak seperti kolom single_server tingkat teratas, yang menunjukkan bahwa seluruh deployment terdiri dari satu server, kolom single_server tingkat zona hanya berlaku untuk zona tertentu tersebut.

Dalam deployment multi-zona, Anda dapat mengonfigurasi zona individual sebagai zona server tunggal, sementara zona lainnya berisi beberapa server. Misalnya, pertimbangkan deployment dengan dua zona replika READ_WRITE dan satu zona replika WITNESS:

  • Dua zona READ_WRITE berisi beberapa server (single_server: false) untuk memberikan ketersediaan tinggi dan menskalakan kapasitas komputasi dan penyimpanan untuk data pengguna.
  • Anda dapat mengonfigurasi zona WITNESS sebagai zona server tunggal atau zona multi-server, bergantung pada volume voting Paxos Anda:
    • Workload kecil hingga sedang: Jika satu VM atau server memiliki kapasitas yang memadai untuk memproses semua traffic voting Paxos untuk deployment, tetapkan single_server: true. Karena replika saksi hanya memberikan suara dan tidak menyimpan data pengguna, penggunaan satu server akan menghilangkan overhead replikasi metadata dalam zona.
    • Deployment skala besar: Jika Anda memiliki throughput penulisan yang tinggi atau banyak server di setiap zona READ_WRITE (misalnya, puluhan atau ratusan node), satu server dapat mengalami kelebihan beban dan menyebabkan kegagalan konsensus Paxos. Konfigurasi zona WITNESS dengan beberapa server (single_server: false) untuk mendistribusikan beban kerja pemungutan suara.

Untuk contoh konfigurasi, lihat Deployment multi-lokasi dengan replika saksi.

SLA Jam

Spanner Omni mengandalkan software TrueTime untuk memberikan konsistensi eksternal tanpa memerlukan hardware GPS khusus atau jam atom. Objek clock_sla menentukan batas sinkronisasi yang diharapkan untuk clock server di seluruh deployment:

clock_sla:
  jitter_in_s: 0.005
  rate_error_in_ppm: 200

Konfigurasi clock_sla mencakup kolom berikut:

  • jitter_in_s: Jitter clock maksimum yang diharapkan dalam detik. Harus berupa bilangan floating point non-negatif (>= 0).
  • rate_error_in_ppm: Error laju penyimpangan clock maksimum dalam bagian per juta (ppm). Harus berupa nilai antara 0 dan 10000.

Untuk mengetahui informasi selengkapnya tentang sinkronisasi waktu, lihat TrueTime dan konsistensi eksternal.

Setelan deployment

Objek deployment_settings mengonfigurasi perilaku deployment global, termasuk preferensi lokasi pemimpin dan keamanan jaringan:

deployment_settings:
  preferred_leader_location: us-central1
  security_settings:
    insecure_mode: false
    authentication_methods:
      - AUTHENTICATION_METHOD_PASSWORD
      - AUTHENTICATION_METHOD_CLIENT_CERTIFICATE
    password_authentication_protocol: PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE

Lokasi pemimpin pilihan

Kolom preferred_leader_location menentukan lokasi tempat pemimpin Paxos ditempatkan secara preferensial. Memilih pemimpin di dekat workload aplikasi utama Anda akan mengurangi latensi operasi tulis dengan menghindari perjalanan pulang pergi jaringan tambahan.

Saat mengonfigurasi preferred_leader_location, pastikan hal berikut:

  • Lokasi yang ditentukan harus cocok dengan lokasi yang ditentukan dalam daftar location (atau default).
  • Lokasi yang ditentukan harus berisi setidaknya satu zona READ_WRITE.

Setelan keamanan

Objek security_settings mengonfigurasi mode autentikasi dan enkripsi:

  • insecure_mode: Boolean. Jika disetel ke true, autentikasi dan otorisasi untuk koneksi masuk akan dinonaktifkan. Mode ini hanya ditujukan untuk pembuatan prototipe dan evaluasi. Default-nya adalah false.
  • authentication_methods: Daftar metode autentikasi yang diaktifkan. Wajib jika insecure_mode adalah false. Nilai yang didukung:
    • AUTHENTICATION_METHOD_PASSWORD: Mengaktifkan autentikasi nama pengguna dan sandi.
    • AUTHENTICATION_METHOD_CLIENT_CERTIFICATE: Mengaktifkan autentikasi sertifikat klien mutual TLS (mTLS).
  • password_authentication_protocol: Protokol yang digunakan untuk verifikasi sandi. Wajib jika AUTHENTICATION_METHOD_PASSWORD disertakan dalam authentication_methods. Nilai yang didukung:
    • PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE: Menggunakan protokol pertukaran kunci yang diautentikasi dengan sandi asimetris OPAQUE.

Untuk mengetahui informasi selengkapnya tentang cara menyiapkan enkripsi dan kredensial, lihat Membuat deployment dengan enkripsi TLS di VM.

Contoh konfigurasi deployment

Contoh berikut menunjukkan pola deployment umum.

Deployment multi-zona regional

Konfigurasi berikut membuat deployment regional dengan ketersediaan tinggi di tiga zona dalam satu lokasi:

name: regional-prod
location:
  - name: us-central1
zone:
  - name: us-central1-a
    location: us-central1
    replica_type: READ_WRITE
    root_server:
      - host: root-a1.example.internal
      - host: root-a2.example.internal
      - host: root-a3.example.internal
  - name: us-central1-b
    location: us-central1
    replica_type: READ_WRITE
    root_server:
      - host: root-b1.example.internal
      - host: root-b2.example.internal
      - host: root-b3.example.internal
  - name: us-central1-c
    location: us-central1
    replica_type: READ_WRITE
    root_server:
      - host: root-c1.example.internal
      - host: root-c2.example.internal
      - host: root-c3.example.internal

Deployment multi-lokasi dengan replika saksi

Konfigurasi berikut membuat deployment multi-lokasi yang mencakup dua pusat data dan situs saksi, dengan penempatan pemimpin pilihan. Daftar location_distance menentukan latensi jaringan asimetris yang realistis di antara setiap pasangan lokasi. Setiap zona READ_WRITE menggunakan tiga server root untuk ketersediaan tinggi, sedangkan zona WITNESS menggunakan single_server: true dengan satu server root karena replika saksi tidak menyimpan data pengguna:

name: multi-site-deployment
location:
  - name: datacenter-east
  - name: datacenter-west
  - name: datacenter-central
location_distance:
  - src: datacenter-east
    dest: datacenter-central
    latency_ms: 25
  - src: datacenter-central
    dest: datacenter-east
    latency_ms: 27
  - src: datacenter-central
    dest: datacenter-west
    latency_ms: 30
  - src: datacenter-west
    dest: datacenter-central
    latency_ms: 32
  - src: datacenter-east
    dest: datacenter-west
    latency_ms: 55
  - src: datacenter-west
    dest: datacenter-east
    latency_ms: 58
zone:
  - name: east-zone-1
    location: datacenter-east
    replica_type: READ_WRITE
    root_server:
      - host: east-root-1.example.internal
      - host: east-root-2.example.internal
      - host: east-root-3.example.internal
  - name: west-zone-1
    location: datacenter-west
    replica_type: READ_WRITE
    root_server:
      - host: west-root-1.example.internal
      - host: west-root-2.example.internal
      - host: west-root-3.example.internal
  - name: central-witness-zone
    location: datacenter-central
    single_server: true
    replica_type: WITNESS
    root_server:
      - host: witness-root-1.example.internal
deployment_settings:
  preferred_leader_location: datacenter-east

Deployment yang aman dengan TLS dan autentikasi

Konfigurasi berikut menentukan deployment dengan autentikasi sandi dan mTLS diaktifkan:

name: secure-deployment
location:
  - name: us-central1
zone:
  - name: us-central1-a
    location: us-central1
    replica_type: READ_WRITE
    root_server:
      - host: server-1.example.internal
        port_base: 15000
      - host: server-2.example.internal
        port_base: 15000
      - host: server-3.example.internal
        port_base: 15000
deployment_settings:
  security_settings:
    insecure_mode: false
    authentication_methods:
      - AUTHENTICATION_METHOD_PASSWORD
      - AUTHENTICATION_METHOD_CLIENT_CERTIFICATE
    password_authentication_protocol: PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE

Langkah berikutnya