Skip to Content

Teknik Melakukan Deployment Pada Lingkungan Server Multi Nodes

Bagaimana melakuan deployment ke semua node server tanpa mengorbankan ketersediaan aplikasi kita

Load balancing memang menjadi salah satu solusi yang sangat efektif dalam menjawab kebutuhan kecepatan, keandaalan, dan ketersediaan sistem kita. Namun kita menghadapi tantangan menjaga integritas source code kita setiap melakukan update source code yang terdistribusi ke beberapa titik (node) server.

Cara ideal untuk mendistribusikan source code ke semua server dalam load balancer saat deployment tergantung pada kebutuhan proyek, infrastruktur, serta skala aplikasi. Namun, berikut adalah beberapa pendekatan terbaik yang bisa Anda terapkan:

1. Continuous Integration / Continuous Deployment (CI/CD) Pipeline

Menggunakan CI/CD pipeline adalah salah satu cara paling populer dan efisien untuk mengotomatisasi distribusi kode ke semua server dalam cluster. Tools seperti GitHub Actions, Jenkins, GitLab CI, atau CircleCI dapat diintegrasikan untuk melakukan otomatisasi deployment. Dengan menggunakan CI/CD, setelah source code di-commit, sistem otomatis mengemas dan mendistribusikan kode ke semua server yang terhubung.

Langkah-langkah:

  • Build code secara otomatis setelah commit.
  • Konfigurasi deployment otomatis ke setiap server.
  • Gunakan parallel jobs untuk mendistribusikan deployment ke beberapa server sekaligus.
  • Pastikan load balancer menandai server yang sedang dalam proses deployment sebagai "unavailable" agar tidak menerima traffic selama update.

2. Rolling Deployment

Metode rolling deployment digunakan untuk memperbarui cluster server secara bertahap. Dalam teknik ini, server di-update satu per satu, dan setelah server berhasil diperbarui dan diuji, load balancer akan mulai mengarahkan traffic ke server yang sudah di-update. Hal ini memungkinkan sistem tetap berjalan tanpa downtime.

Langkah-langkah:

  • Nonaktifkan server pertama dari load balancer.
  • Deploy kode baru ke server tersebut.
  • Lakukan uji coba dan verifikasi.
  • Aktifkan kembali server di load balancer dan lanjutkan ke server berikutnya.
  • Ulangi proses ini hingga semua server di cluster diperbarui.

3. Blue-Green Deployment

Blue-green deployment adalah teknik untuk mengurangi risiko downtime selama deployment. Anda menjalankan dua lingkungan identik, yaitu "blue" (versi saat ini yang aktif) dan "green" (versi yang akan dideploy). Setelah green environment dideploy dan diuji, load balancer dialihkan ke green environment, dan blue environment menjadi cadangan untuk rollback jika diperlukan.

Langkah-langkah:

  • Siapkan dua set server cluster (blue dan green).
  • Deploy kode ke green cluster yang tidak menerima traffic.
  • Uji kode di green cluster.
  • Alihkan traffic dari blue ke green menggunakan load balancer.
  • Blue cluster tetap tersedia untuk rollback jika terjadi masalah.

4. Using Containerization (Docker & Kubernetes)

Menggunakan Docker dan Kubernetes memungkinkan deployment menjadi lebih sederhana, efisien, dan terkelola. Kubernetes memiliki fitur bawaan untuk rolling updates, yang mempermudah distribusi container baru ke semua node dalam cluster.

Langkah-langkah:

  • Bangun image Docker dengan versi kode terbaru.
  • Push image ke Docker registry.
  • Update deployment di Kubernetes cluster dengan image baru.
  • Kubernetes akan secara otomatis melakukan rolling update ke setiap node dalam cluster.
  • Load balancer yang terintegrasi dengan Kubernetes (misalnya Nginx atau ingress controllers) akan mendistribusikan traffic ke pod yang sudah diperbarui.

5. Configuration Management Tools (Ansible, Chef, Puppet)

Alat manajemen konfigurasi seperti Ansible, Chef, dan Puppet memungkinkan deployment otomatis ke beberapa server dalam satu perintah. Dengan mendefinisikan playbook atau recipes, Anda dapat menyinkronkan distribusi kode ke semua server dalam cluster secara konsisten dan otomatis.

Langkah-langkah:

  • Tulis skrip deployment (Ansible playbook, Chef recipes, atau Puppet manifests).
  • Jalankan skrip yang akan mengirimkan source code ke setiap server dalam cluster.
  • Lakukan restart/reload server setelah deployment.

6. File Synchronization Tools (rsync, scp, or S3 Buckets)

Untuk aplikasi skala lebih kecil, Anda dapat menggunakan alat-alat seperti rsync atau scp untuk menyinkronkan source code ke setiap server. Anda juga bisa menggunakan solusi cloud seperti AWS S3 untuk menyimpan artefak deployment, lalu mengunduhnya dari setiap server saat deployment.

Langkah-langkah:

  • Gunakan rsync/scp untuk menyalin file ke setiap server secara paralel.
  • Pastikan server yang sedang diupdate tidak menerima traffic dari load balancer.
  • Reload server setelah deployment selesai.

Kesimpulan

Pendekatan paling ideal adalah menggunakan CI/CD pipeline yang terintegrasi dengan rolling deployment atau Kubernetes untuk skala besar. Jika Anda ingin meminimalkan risiko downtime dan menjaga stabilitas, blue-green deployment atau rolling deployment adalah pilihan yang baik. Jika skala proyek lebih kecil, rsync atau Ansible bisa menjadi opsi cepat dan mudah.


Photo by luis gomes

Bagus Fibrianto October 3, 2024
Share this post
Tags
Archive
Sign in to leave a comment
Tutorial Menggunakan Nginx Sebagai Load Balancing
Manfaatkan Web Server Open Source Nginx Sebagai Load Balancer