Cara Menggunakan Nginx sebagai HTTP Load Balancer di Linux


Ketika menyiapkan beberapa server aplikasi untuk redundansi, penyeimbangan beban adalah mekanisme yang umum digunakan untuk mendistribusikan permintaan layanan masuk atau lalu lintas jaringan secara efisien ke sekelompok server back-end.

Penyeimbangan beban memiliki beberapa keuntungan termasuk peningkatan ketersediaan aplikasi melalui redundansi, peningkatan keandalan dan skalabilitas (lebih banyak server dapat ditambahkan ketika lalu lintas meningkat). Ini juga membawa peningkatan kinerja aplikasi dan banyak manfaat lainnya.

Bacaan yang Direkomendasikan: Panduan Utama untuk Mengamankan, Memperkuat, dan Meningkatkan Kinerja Server Web Nginx

Nginx dapat diterapkan sebagai penyeimbang beban HTTP yang efisien untuk mendistribusikan lalu lintas jaringan masuk dan beban kerja di antara sekelompok server aplikasi, yang masing-masing mengembalikan respons dari server yang dipilih ke server yang dipilih. klien yang sesuai.

Metode penyeimbangan beban yang didukung oleh Nginx adalah:

  • round-robin – yang mendistribusikan permintaan ke server aplikasi dengan cara round-robin. Ini digunakan secara default ketika tidak ada metode yang ditentukan,
  • paling tidak terhubung – menetapkan permintaan berikutnya ke server yang tidak terlalu sibuk (server dengan jumlah koneksi aktif paling sedikit),
  • ip-hash – dimana fungsi hash digunakan untuk menentukan server mana yang harus dipilih untuk permintaan berikutnya berdasarkan alamat IP klien. Metode ini memungkinkan persistensi sesi (mengikat klien ke server aplikasi tertentu).

Selain itu, Anda dapat menggunakan bobot server untuk memengaruhi algoritme penyeimbangan beban Nginx pada tingkat lebih lanjut. Nginx juga mendukung pemeriksaan kesehatan untuk menandai server sebagai gagal (untuk jangka waktu yang dapat dikonfigurasi, defaultnya adalah 10 detik) jika responsnya gagal disertai kesalahan, sehingga menghindari kesalahan tersebut server untuk permintaan masuk berikutnya selama beberapa waktu.

Panduan praktis ini menunjukkan cara menggunakan Nginx sebagai penyeimbang beban HTTP untuk mendistribusikan permintaan klien yang masuk antara dua server yang masing-masing memiliki instance aplikasi yang sama.

Untuk tujuan pengujian, setiap instance aplikasi diberi label (di antarmuka pengguna) untuk menunjukkan server yang menjalankannya.

Pengaturan Lingkungan Pengujian

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

Pada setiap server aplikasi, setiap instance aplikasi dikonfigurasikan untuk diakses menggunakan domain tecmintapp.lan. Dengan asumsi ini adalah domain yang terdaftar sepenuhnya, kami akan menambahkan yang berikut ini di pengaturan DNS.

A Record   		@   		192.168.58.7

Catatan ini memberi tahu permintaan klien ke mana domain harus diarahkan, dalam hal ini, penyeimbang beban (192.168.58.7). Catatan A DNS hanya menerima nilai IPv4. Alternatifnya, file /etc/hosts pada mesin klien juga dapat digunakan untuk tujuan pengujian, dengan entri berikut.

192.168.58.7  	tecmintapp.lan

Menyiapkan Penyeimbangan Beban Nginx di Linux

Sebelum menyiapkan penyeimbangan beban Nginx, Anda harus menginstal Nginx di server Anda menggunakan manajer paket default untuk distribusi Anda seperti yang ditunjukkan.

sudo apt install nginx   [On Debian/Ubuntu]
sudo yum install nginx   [On CentOS/RHEL]   

Selanjutnya, buat file blok server bernama /etc/nginx/conf.d/loadbalancer.conf (beri nama pilihan Anda).

sudo vi /etc/nginx/conf.d/loadbalancer.conf

Kemudian salin dan tempel konfigurasi berikut ke dalamnya. Konfigurasi default ini adalah round-robin karena tidak ada metode penyeimbangan beban yang ditentukan.

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        proxy_set_header    X-Real-IP $remote_addr;
	        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header    Host $http_host;
		proxy_pass http://backend;
	}
}

Dalam konfigurasi di atas, direktif proxy_pass (yang harus ditentukan di dalam lokasi, dalam hal ini /) digunakan untuk meneruskan permintaan ke server proksi HTTP yang direferensikan menggunakan kata backend, dalam perintah upstream (digunakan untuk mendefinisikan sekelompok server). Selain itu, permintaan akan didistribusikan antar server menggunakan mekanisme penyeimbangan round-robin tertimbang.

Untuk menggunakan mekanisme koneksi paling sedikit, gunakan konfigurasi berikut

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

Dan untuk mengaktifkan mekanisme persistensi sesi ip_hash, gunakan:

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

Anda juga dapat memengaruhi keputusan penyeimbangan beban menggunakan bobot server. Dengan menggunakan konfigurasi berikut, jika ada enam permintaan dari klien, server aplikasi 192.168.58.5 akan diberikan 4 permintaan dan 2 akan masuk ke 192.168.58.8.

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

Simpan file dan keluar. Kemudian pastikan struktur konfigurasi Nginx sudah benar setelah menambahkan perubahan terkini, dengan menjalankan perintah berikut.

sudo nginx -t

Jika konfigurasinya OK, restart dan aktifkan layanan Nginx untuk menerapkan perubahan.

sudo systemctl restart nginx
sudo systemctl enable nginx

Menguji Penyeimbangan Beban Nginx di Linux

Untuk menguji penyeimbangan beban Nginx, buka browser web dan gunakan alamat berikut untuk bernavigasi.

http://tecmintapp.lan

Setelah antarmuka situs web dimuat, catat contoh aplikasi yang telah dimuat. Kemudian terus segarkan halaman. Pada titik tertentu, aplikasi harus dimuat dari server kedua yang menunjukkan penyeimbangan beban.

Anda baru saja mempelajari cara menyiapkan Nginx sebagai penyeimbang beban HTTP di Linux. Kami ingin mengetahui pendapat Anda tentang panduan ini, dan khususnya tentang penggunaan Nginx sebagai penyeimbang beban, melalui formulir masukan di bawah. Untuk informasi selengkapnya, lihat dokumentasi Nginx tentang penggunaan Nginx sebagai penyeimbang beban HTTP.