Langkau ke kandungan utama

Load Balancing dengan Nginx dan Puma

Load Balancing dengan Nginx dan Puma


Tutorial ini adalah sangat ringkas hanya untuk menunjukkan kebolehan nginx sebagai load balancer yang dapat menjadi 'orang tengah' antara banyak server di belakangnya

Keperluan

1. Paling kurang 2 server aplikasi
2. Satu server diinstall nginx


Contoh Persekitaran yang sekarang


1. server1:
os: debian
application: ruby on rails
web server : puma
dns : myaplication1.yusdirman.com

2. server2: myaplication2.yusdirman.com
os:debian
application: ruby on rails
web server : puma
dns : myaplication1.yusdirman.com

3. nginx diinstall di server1


/ets/nginx/nginx.conf setup (default):

worker_processes  2;
worker_processes  auto;
worker_rlimit_nofile 65536;

error_log  logs/error.log  notice;
error_log  logs/error.log  info;

events {
  worker_connections  65536;
}

http {
  include       mime.types;
  default_type  application/octet-stream;
  sendfile        on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout  65;

  gzip on;
  gzip_min_length 1000;
  gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

  include /etc/nginx/sites-enabled/*;
}



/etx/nginx/sites-available/myapplication.yusdirman.com.conf


upstream myapplication {
  server myapplication1.yusdirman.com fail_timeout=0; #localhost
  server myapplication2.yusdirman.com fail_timeout=0; #remote1
#server myapplication3.yusdirman.com fail_timeout=0; #remote2
#server myapplication4.yusdirman.com fail_timeout=0; #remote3

}

server {
  listen myapplication.yusdirman.com:80;
  server_name myapplication.yusdirman.com;

  location /{
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://myapplication;

    # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
    proxy_http_version 1.1;

    proxy_set_header Connection "";
  }

  access_log /var/log/nginx/myapplication.access.log;
  error_log /var/log/nginx/myapplication.error.log debug;

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}


bina 'soft-link' antara /etc/nginx/sites-available ke /etc/nginx/sites-enabled/


ln -s /etc/nginx/sites-avaliable/myapplication.yusdirman.com.conf /etc/nginx/sites-enabled/


Larikan aplikasi di setiap server


server myapplication1.yusdirman.com


cd /home/diman/myapplication
#puma telah disetkan sebagai default webserver
rails server -e production -b myapplication1.yusdirman.com -d 


server myapplication2.yusdirman.com


cd /home/diman/myapplication
#puma telah disetkan sebagai default webserver
rails server -e production -b myapplication2.yusdirman.com -d 


Mulakan nginx di server1 (tempat diinstall)


sudo service nginx start 

atau

sudo service nginx restart 



Nginx Load Balancing

Teknik-teknik Load Balancing dengan nginx

default: round robin
keterangan: bergilir-gilir. Capaian pertama akan ke server pertama. Capaian kedua akan ke server seterusnya

1. least_conn
keterangan: capaian akan ke server yang paling kurang akses

upstream backend {
    least_conn;

    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down; 
}

nota: tandakan 'down' untuk server yang tidak digunakan/dibaiki.

2. ip_hash
keterangan: ditentukan oleh alamat ip klien. Akses dari IP yang sama akan ke server dengan IP yang berdekatan.

upstream backend {
    ip_hash;

    server backend1.example.com;
    server backend2.example.com;
}

3. hash
keterangan: bergantung kepada kod kunci daripada klien

upstream backend {
    hash $request_uri consistent;

    server backend1.example.com;
    server backend2.example.com;
}

4. Pemberat
keterangan: tetapkan pemberat untuk server. Jika ada 7 akses, 5 akses akan ke server backend1 dan  1 ke backend2 dan 1 ke backend3.

upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com;
    server backend3.example.com;
}


Sekian dahulu.



Ulasan

Catatan popular daripada blog ini

Apa Maksud RON dalam pengkelasan Petrol?

RON dan Petrol Oleh yusdirman, Oktober 2014 RON adalah singkatan daripada Research Octane Number Ianya kaedah penarafan bahan api. Lebih tinggi nilai RON, lebih mahal harga PETROL. Adakah minyak RON 97 lebih berkuasa berbanding RON 95? RON merujuk kepada tahap bahan api menahan rintangan "ketukan" semasa proses pembakaran oleh palam pencucuh dalam enjin. Ianya merujuk kepada tahap ketahanan bahan api untuk tidak terbakar sebelum dinyalakan oleh palam pencucuh dalam enjin. "ketukan" dalam konteks RON ini adalah apabila campuran bahan api dan udara dalam enjin terbakar lebih awal sebelum api dari palam pencucuh menbakarnya. Pembakaran awal ini mungkin disebabkan enjin terlalu panas. Haba dari silinder enjin itu sendiri mungkin telah menyalakan bahan api sebelum palam pencucuh menyala. Ini boleh menurunkan prestasi dan mungkin boleh memudaratkan enjin! Jadi, RON bukannya bermaksud LEBIH KUASA! Ianya bermaksud bahan api itu dapat menahan tekanan dari...

Rokok Elektronik : Bahaya Untuk Kesihatan atau Membantu Perokok Berhenti Merokok?

Rokok Elektronik, e-rokok -- oleh Ahmad Yusdirman Rokok elektronik adalah nama panggilan kepada alat yang membekalkan dos nikotin dalam bentuk wap dengan memanaskan cecair campuran propylene glycol, glycerol, perasa makanan dan nikotin menjadikannya berbentuk wap dan disedut oleh pengguna. Alat ini memberikan perokok yang ingin berhenti merokok masih mendapatkan dos nikotin dan masih lagi dapat menikmati aktiviti merokok kerana wap yang dikeluarkan adalah kelihatan seumpama asap rokok. Terdapat beberapa nama panggilan untuk rokok elektronik ini termasuklah eRokok, vapor dan ecig. Namun, oleh kerana panggilan rokok elektronik masih menggunakan perkataan 'rokok', ianya masih lagi memberikan stigma kepada masyarakat yang tidak tahu mengenainya. Panggilan 'vapor' yang bermaksud 'wap' adalah lebih ringan diterima masyarakat. Sejarah Rokok elektronik pertama sekali diperkenalkan oleh Herbert A. Gilbert pada tahun 1963[1] namun tidak dikomersilkan dan k...

Server Redundancy - Pertindanan Komputer Pelayan

alkisahnya tercari-cari untuk buat server redundancy ( pertindihan komputer pelayan ) atas sebab perlunya server yang sentiasa on-line tanpa ada downtime yang lama. Dan, cabarannya adalah memang kami tak pernah jalani apa-apa latihan, pengalaman dan apa jua pengetahuan berkenaan teknologi ini. Yang pastinya, perlu banyak mengoogle. Setakat ini, ada banyak kaedah untuk memastikan aplikasi masih terus boleh berfungsi walaupun server mati/rosak. 1. guna 2 server yang sama. Bila satu mati, satu lagi yang masih hidup dapat terus melayan pengguna. 2. guna 2 talian rangkaian yang berbeza. Bila satu talian rosak/putus, masih ada satu lagi talian rangkaian yang berfungsi. 3. storan di server guna raid ( redundant array of independent disk ) atau dalam bahasa melayu : barisan disk berlainan yang bertindan. Raid dapat menjadikan sebilangan hd menjadi 1 dengan semua data pada 1 hd adalah sama dengan data pada hd 2. (mirroring) 4. satu IP maya untuk sebilangan server. 2 server yang mena...