Cara Setting Load Balancing dengan Nginx
Load Balancing adalah sebuah mekanisme untuk membagi atau mendistribusikan trafik ke beberapa server. Nginx selain berfungsi sebagai web server bisa juga berfungsi sebagai load balancer.
Metode Load Balancing
- Round Robin: mendistribusikan trafik ke setiap server secara bergantian.
- Least Connections: mendistribusikan trafik ke server yang paling sedikit koneksi aktifnya.
- IP Hash: mendistribusikan trafik ke server yang sama ketika visitor pertama kali melakukan request.
0.Perangkat yang digunakan
Perangkat yang digunakan di tutorial ini:
- OS Ubuntu 18.04 LTS
- Nginx web server
- PHP-FPM 7.2
- Node1: 10.130.127.167
- Node2: 10.130.128.35
- LoadBalancer: 128.199.187.215
- Domain: defnex.com
1.Install Nginx dan PHP-FPM di Node
Install Nginx di Node1 dan Node2.
1 2 3 | sudo apt install nginx php php-fpm -y sudo systemctl status nginx sudo systemctl status php7.2-fpm |
Membuat file index.php di Node1.
1 2 | sudp mkdir /var/www/defnex.com sudo echo "<h1>node1</h1>" > /var/www/defnex.com/index.php |
Membuat file index.php di Node2.
1 2 | sudo mkdir /var/www/defnex.com sudo echo "<h1>node2</h1>" > /var/www/defnex.com/index.php |
Membuat server block di Node1 dan Node2.
1 | sudo nano /etc/nginx/conf.d/defnex.com.conf |
File konfigurasi server block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | server { listen 80; server_name defnex.com www.defnex.com; root /var/www/defnex.com/; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $fastcgi_script_name =404; include fastcgi_params; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT $realpath_root; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; } access_log /var/log/nginx/defnex.com.access.log; error_log /var/log/nginx/defnex.com.error.log warn; } |
Uji dan restart Nginx.
1 2 3 | sudo nginx -t sudo systemctl restart nginx sudo systemctl status nginx |
2.Install dan Konfigurasi Nginx di Load Balancer
Install Nginx.
1 2 | sudo apt install nginx -y sudo systemctl status nginx |
Membuat server block untuk load balancing domain defnex.com.
1 | sudo nano /etc/nginx/conf.d/lb-defnex.com.conf |
File konfigurasi server block load balancing domain defnex.com.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | upstream backend { server 10.130.127.167; #node1 server 10.130.128.35; #node2 } server { listen 80; server_name defnex.com www.defnex.com; 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; } } |
Pada konfigurasi upstream backend dituliskan IP address dari backend server. Secara default metode load balancing yang digunakan adalah Round Robin.
Konfigurasi load balancing jika menggunakan metode Least Connections.
1 2 3 4 5 | upstream backend { least_conn; server 10.130.127.167; #node1 server 10.130.128.35; #node2 } |
Konfigurasi load balancing jika menggunakan metode IP Hash.
1 2 3 4 5 | upstream backend { ip_hash; server 10.130.127.167; #node1 server 10.130.128.35; #node2 } |
Uji dan restart Nginx.
1 2 3 | sudo nginx -t sudo systemctl restart nginx sudo systemctl status nginx |
3.Pengujian
Browse domain berulang kali, akan menampilkan halaman dari Node1 dan Node2 secara bergantian.
selamat mencoba 🙂
bang mohon di update pada gambar
pada backend mana yang,
server 10.130.127.167; #node1
server 10.130.128.35; #node2
oh iya, gambar topologi itu gambaran umum load balancing, bisa backend1 = node1, backend2 = node2
jika kita install misal wordpress apakah kita harus mneginstalkan wordpress di masing-masing node nya pak, apa di salah satu nodenya saja, misal di server loadbalancing nya saja. terima kasih
di masing-masing node harus ada wordpress, cari cara bagaimana kedua node memiliki wordpress yang sama (sinkronisasi)
apakah beberapa wordpress tersebut nantinya 1 database za pak ?
ya, bisa 1 database yang sama. database server harus bisa remote access.
Mau tanya pak, berarti kita harus menyediakan 2 server yg berbeda pak? Saya lihatnya backend #1 dan backend #2 itu di server yg berbeda.
yes, 1 server sebagai load balancer, 2 server sebagai backend server
This page isn’t working xxxxxxxx.sch.id redirected you too many times.
Try clearing your cookies.
ERR_TOO_MANY_REDIRECTS
pak saya punya kendala di haproxy moodle saya, ketika buka alamat webnya normal, tapi ketika akses login untuk buka dasboard muncul kendala This page isn’t working xxxxxxxx.sch.id redirected you too many times.
Try clearing your cookies.
ERR_TOO_MANY_REDIRECTS
sedangkan disaya cek server haproxy nya juga statusnya Up padahal.
belum pernah config seperti ini. ERR_TOO_MANY_REDIRECTSbiasanya ada hubungan dengan SSL.
hallo pak, klo utk ip LoadBalancer: 128.199.187.215, itu di pasang dimana yaa?
Load Balancer berada di depan, kalau pakai domain, IP Load Balancer dipasang di DNS
halo pak saya mau bertanya itu untuk membuat node 1 node 2 dan load balancer nya apakah dalam satu pc yang sama? dan apabila dalam satu pc yang sama bagaimana cara membuat nya? dan apakah penggunaan nya sama saja bila menggunakan virtual box?
3 server berbeda. bisa simulasi di virtualbox, buat 3 virtual machine.
saya sudah membuat 3 virtual machine di virtual box tetapi saya menggunakan setting bridge adapter supaya mendapat ip local yang berbeda pada hasil dari ifconfig tetapi masih tidak dapat tersambung ketika mencoba membuka domain dari defnex.com kalau seperti itu apakah harus ganti menggunakan nat dengan walaupun ip local nya sama ?
tutorial ini langsung menggunakan domain di internet. coba simulasi domain dengan menggunakan file /etc/hosts.
mau bertanya lagi ni mas misalkan saya membuat virtual machine nya di 3 pc berbeda dalam satu jaringan LAN yang sama apakah bisa? karena satu pc tidak cukup untuk digunakan menjalakan 3 virtual machine
bisa, yang penting ketiga virtual machine tersebut dapat saling berkomunikasi
kalau menggunakan /etc/host berarti menggunakan jaringan localhost ya mas? seperti menggunakan localhost pada xamp? maaf mas baru belajar jadi banyak nanya
di /etc/hosts kita mendefinisikan sebuah host berada di IP berapa. tidak hanya localhost, bisa juga memasukkan host yang ada di internet dengan public IP.
saya sudah mengatur ip local dari kedua node pada /etc/hosts pada kedua node dan juga pada load balancer tetapi yang berjalan ketika di search web nya hanya satu node yang selalu tampil kira kira salah konfgurasi di bagian mana ya mas?
maksudnya search web, pakai google? cara ujinya refresh terus halaman webnya, sampai menampilkan halaman dari node-node secara bergantian.
bukan dari google mas maksudnya ya yang sudah seperti mas nya jabarkan tetapi yang muncul hanya dari satu node saja
bang load balance nginx juga hampir sama kaya haproxy juga gak bang
silakan dibandingkan di tutorial Load Balancing dengan HAProxy
Permisi, saya kepikiran untuk membuat streaming server. Sudah sedia 2 server dedicated utama untuk nyimpen filenya. Pertanyaannya, untuk server load balance-nya apa perlu spek besar seperti 2 server sebelumnya? Trims
sesuaikan dengan trafiknya, mulai saja dulu dengan spesifikasi rendah, pantau pemakaian sumber dayanya, apakah cukup atau harus upgrade sumber daya
permisi bagaimana cara untuk melakukan test dengan melakukan pada load balancer tersebut sedangkan web tersebut hanya berjalan pada local dan bisa diakses dengan menggunakan ip local dari server load balancer tersebut tanpa perlu membutuhkan partisipan yang banyak dan bisa melihat hasil trafik nya?
coba cek aplikasi untuk load testing seperti ApacheBench, LoadTest, Siege, dan Locust
maaf pak load balancing ini kan lebih mengarah ke webservernya pak, bagaimana jika ingin implementasi dari sisi si dns nya ya, jadi domain A ini memiliki 2 ip public, dengan destination 1 web server, bagaimana jika ingin melakukan load balancing untuk si domain A yang menggunakan 2 ip public ini untuk akses ke dalam 1 server, mohon pencerahannya
coba cek artikel dns load balancing dari digitalocean
Pak mau tanya. Kalau yg di load balancing nya lebih dari 1 domain atau sub domain server block nya dibuat di 1 file conf apa di buat masing2 per domain per 1 file conf ?
lebih baik dibuatkan masing-masing file konfigurasinya
selamat malam pak Musamin, saya mau tanya, semisalnya dibagian upstream itu, untuk servernya dikasih port bisa gak ya ?
jadi seperti server 192.168.1.2:8080
apakah bisa ?
ya, bisa pakai custom port
Pak saya mau tanya, ini kan saya punya website dg ratusan ribu pengunjung, apakah wajib menggunakan 3 server, 1 server untuk haproxy, 2 server untuk wordpress, sedangkan saya hanya punya 2 server saja, satu server sudah ke isi dengan konten sedangnkan server lain masih baru, apakah bisa hanya 2 server ?
ya bisa saja sih jalan dengan 2 server. server#1 sebagai load balancer dan web server utama, dan server#2 sebagai web server pembantu.
Selamat sore Pak Musa, bagaiman spesifikasi komputer minimum untuk load balancer jika digunakan untuk web dengan ratusan ribu pengunjung ?
dari referensi ini coba mulai dgn 4GB RAM 4CPU.
pak saya mau bertanya, apakah caranya bisa dilakukan dengan menggunakan vps yang berbeda, misal vps A sebagai load balancer, vps B sebagai node1, dan vps C sebagai node2
ya, memang seperti itu, masing-masing menggunakan server yang berbeda
maaf pak izin bertanya, semisal saya menginstall 3 server dan 1 load balancer, apakah harus membuat dns lokal lagi, jika iya buat nya di server atau load balancer nya ?
tidak, cukup pakai DNS yang sudah ada, misal dari Cloudflare
hi pak,
mau tanya. jika saya ingin menggunakan local domain sendiri. apakah bikin local domainnya harus di server loadbalancernya? agar dns yg digunakan, menggunakan ip server loadbalancer?
makasih
bisa bikin dns service di server lain
pak saya sudah nyobak ngikutin di tutorial youtube nya tapi kok gak berhasilya untuk nameservernya
apa pesan errornya?
pak misal server A load balance install scrip nginx seperti di atas , SEVER Node1 dan SEVER Node2 saya install cyberpanel . bisa berjalan tidak pak
saya belum pernah coba seperti itu, biasanya load balance seperti ini tanpa control panel
ketika memakai load balance bagaimana metode menyamakan file2 di node yang berbeda pak? agar selalau sama
ada yang pakai metode sinkronisasi file antar server, ada juga yang menyimpan filenya di object storage.
Baik, terimakasih pak