Pengelompokan Looker

Tutorial ini menjelaskan metode yang direkomendasikan untuk membuat konfigurasi Looker yang dikelompokkan untuk instance yang dihosting pelanggan.

Ringkasan

Deployment Looker yang dihosting pelanggan dapat menjalankan node tunggal atau dikelompokkan:

  • Aplikasi Looker node tunggal, yang merupakan konfigurasi default, memiliki semua layanan pembentuk aplikasi Looker yang berjalan di satu server.
  • Konfigurasi Looker yang dikelompokkan adalah konfigurasi yang lebih kompleks, biasanya melibatkan server database, load balancer, dan beberapa server yang menjalankan aplikasi Looker. Setiap node dalam aplikasi Looker yang dikelompokkan adalah server yang menjalankan satu instance Looker.

Ada dua alasan utama organisasi ingin menjalankan Looker sebagai cluster:

  • Load balancing
  • Ketersediaan dan failover yang lebih baik

Bergantung pada masalah penskalaan, Looker yang dikelompokkan mungkin tidak memberikan solusi. Misalnya, jika sejumlah kecil kueri besar menggunakan memori sistem, satu-satunya solusi adalah meningkatkan memori yang tersedia untuk proses Looker.

Alternatif load balancing

Sebelum melakukan load balancing pada Looker, pertimbangkan untuk meningkatkan memori dan mungkin jumlah CPU dari satu server yang menjalankan Looker. Looker merekomendasikan penyiapan pemantauan performa yang mendetail untuk pemanfaatan memori dan CPU guna memastikan server Looker berukuran tepat untuk beban kerjanya.

Kueri besar memerlukan lebih banyak memori untuk performa yang lebih baik. Pengelompokan dapat memberikan peningkatan performa ketika banyak pengguna menjalankan kueri kecil.

Untuk konfigurasi dengan maksimal 50 pengguna yang tidak sering menggunakan Looker, Looker merekomendasikan untuk menjalankan satu server yang setara dengan instance AWS EC2 berukuran besar (M4.large: RAM 8 GB, 2 core CPU). Untuk konfigurasi dengan lebih banyak pengguna atau banyak pengguna aktif, perhatikan apakah CPU mengalami lonjakan atau apakah pengguna mengalami kelambatan dalam aplikasi. Jika demikian, pindahkan Looker ke server yang lebih besar atau jalankan konfigurasi Looker yang dikelompokkan.

Peningkatan ketersediaan/kegagalan

Menjalankan Looker di lingkungan yang ter-cluster dapat mengurangi periode nonaktif jika terjadi pemadaman layanan. Ketersediaan tinggi sangat penting jika Looker API digunakan dalam sistem bisnis inti atau jika Looker disematkan ke produk yang ditujukan untuk pelanggan.

Dalam konfigurasi Looker yang dikelompokkan, server proxy atau load balancer akan mengubah rute traffic saat menentukan bahwa satu node sedang tidak aktif. Looker secara otomatis menangani node yang keluar dan bergabung dengan cluster.

Komponen yang diperlukan

Komponen berikut diperlukan untuk konfigurasi Looker yang dikelompokkan:

  • Database aplikasi MySQL
  • Node Looker (server yang menjalankan proses Java Looker)
  • Load balancer
  • Sistem file bersama
  • Versi file JAR aplikasi Looker yang tepat

Diagram berikut mengilustrasikan cara komponen berinteraksi. Pada level yang tinggi, load balancer mendistribusikan traffic jaringan antar-node Looker yang dikelompokkan. Masing-masing node berkomunikasi ke database aplikasi MySQL bersama, direktori penyimpanan bersama, dan server Git untuk setiap project LookML.

Database aplikasi MySQL

Looker menggunakan database aplikasi (sering disebut database internal) untuk menyimpan data aplikasi. Saat berjalan sebagai aplikasi node tunggal, Looker biasanya menggunakan database HyperSQL dalam memori.

Dalam konfigurasi Looker yang dikelompokkan, instance Looker setiap node harus mengarah ke database transaksional bersama (aplikasi bersama atau database internal). Dukungan untuk database aplikasi untuk Looker yang dikelompokkan adalah sebagai berikut:

  • Hanya MySQL yang didukung untuk database aplikasi bagi instance Looker yang dikelompokkan. Amazon Aurora dan MariaDB tidak didukung.
  • MySQL versi 5.7+ dan 8.0+ didukung.
  • Database yang dikelompokkan seperti Galera tidak didukung.

Looker tidak mengelola pemeliharaan dan pencadangan database tersebut. Namun, karena menghosting hampir semua data konfigurasi aplikasi Looker, database tersebut harus disediakan sebagai database ketersediaan tinggi dan dicadangkan minimal setiap hari.

Node Looker

Setiap node adalah server dengan proses Java Looker yang berjalan di dalamnya. Server di cluster Looker harus dapat menjangkau satu sama lain dan database aplikasi Looker. Port default tercantum di bagian Membuka port bagi node untuk berkomunikasi di halaman ini.

Load balancer

Untuk menyeimbangkan permintaan beban atau pengalihan ke node yang tersedia, load balancer atau server proxy (misalnya, NGINX atau AWS ELB) diperlukan untuk mengarahkan traffic ke setiap node Looker. Load balancer menangani health check. Jika terjadi kegagalan node, load balancer harus dikonfigurasi untuk mengalihkan traffic ke node responsif yang tersisa.

Saat memilih dan mengonfigurasi load balancer, pastikan load balancer dapat dikonfigurasi untuk beroperasi sebagai Lapisan 4 saja. ELB Amazon Klasik adalah salah satu contohnya. Selain itu, load balancer harus memiliki waktu tunggu yang lama (3.600 detik) agar kueri tidak dihentikan.

Sistem file bersama

Anda harus menggunakan sistem file bersama yang mematuhi POSIX (seperti NFS, AWS EFS, Gluster, BeeGFS, Lustre, atau banyak lainnya). Looker menggunakan sistem file bersama sebagai repositori untuk berbagai informasi yang digunakan oleh semua node dalam cluster.

Aplikasi Looker (file JAR yang dapat dieksekusi)

Anda harus menggunakan file JAR aplikasi Looker yang berupa Looker 3.56 atau yang lebih baru.

Looker sangat merekomendasikan agar setiap node dalam cluster menjalankan versi rilis dan patch Looker yang sama, seperti yang dibahas dalam artikel Memulai Looker di node di halaman ini.

Menyiapkan cluster

Tugas berikut diperlukan:

  1. Menginstal Looker
  2. Menyiapkan database aplikasi MySQL
  3. Menyiapkan sistem file bersama
  4. Bagikan repositori kunci SSH (bergantung pada situasi Anda)
  5. Membuka port tempat node akan berkomunikasi
  6. Memulai Looker di node

Menginstal Looker

Pastikan Anda telah menginstal Looker di setiap node, menggunakan file JAR aplikasi Looker dan petunjuk di halaman dokumentasi Langkah penginstalan yang dihosting pelanggan.

Menyiapkan database aplikasi MySQL

Untuk konfigurasi Looker yang dikelompokkan, database aplikasi harus berupa database MySQL. Jika sudah memiliki instance Looker non-cluster yang menggunakan HyperSQL untuk database aplikasi, Anda harus memigrasikan data aplikasi dari data HyperSQL ke database aplikasi MySQL bersama yang baru.

Lihat halaman dokumentasi Bermigrasi ke MySQL untuk mengetahui informasi tentang cara mencadangkan Looker, lalu memigrasikan database aplikasi dari HyperSQL ke MySQL.

Menyiapkan sistem file bersama

Hanya jenis file tertentu — file model, kunci deploy, plugin, dan file manifes aplikasi yang mungkin — yang termasuk dalam sistem file bersama. Untuk menyiapkan sistem file bersama:

  1. Di server yang akan menyimpan sistem file bersama, pastikan Anda memiliki akses ke akun lain yang dapat su ke akun pengguna Looker.
  2. Di server untuk sistem file bersama, login ke akun pengguna Looker.
  3. Jika Looker sedang berjalan, nonaktifkan konfigurasi Looker Anda.
  4. Jika sebelumnya Anda mengelompokkan menggunakan skrip inotify Linux, hentikan skrip tersebut, hapus dari cron, lalu hapus.
  5. Membuat berbagi jaringan dan memasangnya pada setiap node di cluster. Pastikan node dikonfigurasi agar otomatis dipasang pada setiap node, dan pengguna Looker dapat membaca dan menulis ke node tersebut. Pada contoh berikut, pembagian jaringan diberi nama /mnt/looker-share.
  6. Di satu node, salin kunci deployment Anda, lalu pindahkan plugin serta direktori looker/models dan looker/models-user-* yang menyimpan file model Anda, ke jaringan bersama. Contoh:

    mv looker/models /mnt/looker-share/
    mv looker/models-user-* /mnt/looker-share/
    
  7. Untuk setiap node, tambahkan setelan --shared-storage-dir ke LOOKERARGS. Tentukan pembagian jaringan, seperti yang ditunjukkan dalam contoh ini:

    --shared-storage-dir /mnt/looker-share
    

    LOOKERARGS harus ditambahkan ke $HOME/looker/lookerstart.cfg agar setelan tidak terpengaruh oleh pembaruan. Jika LOOKERARGS Anda tidak tercantum dalam file tersebut, seseorang mungkin telah menambahkannya langsung ke skrip shell $HOME/looker/looker.

    Setiap node dalam cluster harus menulis ke direktori /log unik — atau setidaknya satu file log unik.

Membagikan repositori kunci SSH

  • Anda membuat cluster sistem file bersama dari konfigurasi Looker yang ada, dan
  • Anda memiliki project yang dibuat di Looker 4.6 atau versi sebelumnya.

Siapkan repositori kunci SSH yang akan dibagikan:

  1. Di server file bersama, buat direktori dengan nama ssh-share. Contoh: /mnt/looker-share/ssh-share.

    Pastikan direktori ssh-share dimiliki oleh pengguna Looker dan izinnya adalah 700. Selain itu, pastikan direktori di atas direktori ssh-share (seperti /mnt dan /mnt/looker-share) tidak dapat ditulis oleh publik atau tidak dapat ditulis grup.

  2. Di satu node, salin konten $HOME/.ssh ke direktori ssh-share baru. Contoh:

    cp $HOME/.ssh/* /mnt/looker-share/ssh-share

  3. Untuk setiap node, cadangkan file SSH yang ada dan buat symlink ke direktori ssh-share. Contoh:

    cd $HOME
    mv .ssh .ssh_bak
    ln -s /mnt/looker-share/ssh-share .ssh
    

    Pastikan untuk melakukan langkah ini untuk setiap node.

Membuka porta bagi {i>node<i} untuk berkomunikasi

Node Looker yang terklaster berkomunikasi satu sama lain melalui HTTPS dengan sertifikat yang ditandatangani sendiri dan skema autentikasi tambahan berdasarkan rahasia yang dirotasi dalam database aplikasi.

Port default yang harus dibuka di antara node cluster adalah 1551 dan 61616. Port ini bisa dikonfigurasi menggunakan tanda startup yang tercantum di sini. Sebaiknya batasi akses jaringan ke port ini untuk mengizinkan traffic hanya antara host cluster.

Memulai Looker pada node

Mulai ulang server di setiap node dengan tanda startup yang diperlukan.

Tanda startup yang tersedia

Tabel berikut menampilkan flag startup yang tersedia, termasuk flag yang diperlukan untuk memulai atau bergabung dengan cluster:

Tanda Wajib? Nilai Tujuan
--clustered Ya Tambahkan flag untuk menentukan bahwa node ini berjalan dalam mode cluster.
-H atau --hostname Ya 10.10.10.10 Nama host yang digunakan node lain untuk menghubungi node ini, seperti alamat IP node atau nama host sistemnya. Harus berbeda dari nama host semua node lain di cluster.
-n Tidak 1551 Port untuk komunikasi antar-node. Defaultnya adalah 1551. Semua node harus menggunakan nomor port yang sama untuk komunikasi antar-node.
-q Tidak 61616 Port untuk mengantrekan peristiwa di seluruh cluster. Defaultnya adalah 61616.
-d Ya /path/to/looker-db.yml Jalur ke file yang menyimpan kredensial untuk database aplikasi Looker.
--shared-storage-dir Ya /path/to/mounted/shared/storage Opsi tersebut akan mengarah ke penyiapan direktori bersama di awal halaman ini yang menyimpan direktori looker/model dan looker/models-user-*.

Contoh LOOKERARGS dan menentukan kredensial database

Tempatkan tanda startup Looker dalam file lookerstart.cfg, yang terletak di direktori yang sama dengan file Looker JAR.

Misalnya, Anda mungkin ingin memberi tahu Looker:

  • Agar dapat menggunakan file bernama looker-db.yml untuk kredensial database-nya,
  • bahwa itu adalah {i>node<i} yang terkelompok, dan
  • {i>node<i} lain dari cluster harus menghubungi {i>host<i} ini di alamat IP 10.10.10.10.

Sebaiknya Anda menentukan:

LOOKERARGS="-d looker-db.yml --clustered -H 10.10.10.10"

File looker-db.yml akan berisi kredensial database, seperti:

host: your.db.hostname.com
username: db_user
database: looker
dialect: mysql
port: 3306
password: secretPassword

Selain itu, jika database MySQL Anda memerlukan koneksi SSL, file looker-db.yml juga memerlukan hal berikut:

ssl: true

Jika tidak ingin menyimpan konfigurasi di file looker-db.yml pada disk, Anda dapat mengonfigurasi variabel lingkungan LOOKER_DB agar berisi daftar kunci/nilai untuk setiap baris dalam file looker-db.yml. Contoh:

export LOOKER_DB="dialect=mysql&host=localhost&username=root&password=&database=looker&port=3306"

Menemukan kunci deploy Git SSH

Tempat Looker menyimpan kunci deploy Git SSH bergantung pada rilis tempat project dibuat:

  • Untuk project yang dibuat sebelum Looker 4.8, kunci deployment disimpan di direktori SSH native server, ~/.ssh.
  • Untuk project yang dibuat di Looker 4.8 atau yang lebih baru, kunci deployment disimpan dalam direktori yang dikontrol Looker, ~/looker/deploy_keys/PROJECT_NAME.

Mengubah cluster Looker

Setelah membuat cluster Looker, Anda dapat menambahkan atau menghapus node tanpa melakukan perubahan pada node lain yang dikelompokkan.

Mengupdate cluster ke rilis Looker baru

Update mungkin melibatkan perubahan skema pada database internal Looker yang tidak akan kompatibel dengan Looker versi sebelumnya. Untuk memperbarui Looker, ada dua metode.

Metode yang lebih aman

  1. Membuat cadangan database aplikasi.
  2. Menghentikan semua node cluster.
  3. Ganti file JAR di setiap server.
  4. Mulai setiap node satu per satu.

Metode lebih cepat

Untuk mengupdate menggunakan metode yang lebih cepat tetapi kurang lengkap ini:

  1. Membuat replika database aplikasi Looker.
  2. Mulai cluster baru yang mengarah ke replika.
  3. Arahkan server proxy atau load balancer ke node baru, setelah itu Anda dapat menghentikan node lama.