Assalamu'alaikum wr.wb
Pada kali ini ane ingin share cara membuat cluster loadbalance pada webserver dengan nginx. Untuk metode Loadbalancing disini masih menggunakan nginx tanpa tambahan aplikasi lain dan menggunakan module upstream pada nginx dengan toplogi sebagai berikut.
Pada topologi diatas, saya memiliki 4 server, yaitu 3 server sebagai node, dan satu sebagai controller yang mengatur node tersebut dengan domain dan ip yang telah saya tentukan pada gambar diatas. Loadbalancing adalah sebuah metode yang bertujuan untuk menyeimbangkan beban pada server. Nah jadi setiap ada request dari klien, si controller akan mengatur porsi yang ditangani pada setiap node. Dengan begitu, beban yang ditangani node akan tidak terlalu banyak. Oke langsung saja kita konfigurasi.
A. Konfigurasi Controller
1. Buat konfigurasi untuk loadbalancing didalam /etc/nginx/conf.d/ untuk namanya bebas, tapi harus berakhiran .conf. Disini saya membuatnya dengan nama lb.conf
2. Masukkan konfigurasi seperti dibawah ini
upstream diatas berguna untuk membuat block untuk membuat cluster untuk proxy. Dan cluster disana, saya menamainya dengan backend-ali. Namanya bisa anda tentukan sesuka hati
server merupakan anggota (node) dari cluster yang telah dibuat. Disana saya mendaftarkan 3 anggota atau 3 server, yaitu node1.alhudsf.com node2.alhudsf.com, dan node3.alhudsf.com dengan port :80 ini artinya dalam cluster backend-ali dengan anggotanya akan menangani request melalui port 80.
Secara default, jika tidak menambahkan apa apa, hanya server serveranda:port maka controller akan mengatur agar server tersebut hanya menangani 1 kali request dari klien. Dan jika ditambahkan keterangan seperti misalnya weight=2 merupakan beban yang ditanggung sebuah anggota atau node. Misalnya diatas, saya mengatur node1 dengan weightnya 2. Ini artinya node1 akan menangani 2 kali request klien secara berurutan. Kalau backup merupakan option yang akan menangani request jika anggota atau node yang lain mati. Ibaratnya seperti failover, tapi dalam lingkup metode loadbalancing. Jadi node3 yang saya atur sebagai server backup dia akan mengambil alih request dari klien kalau node yang lain mati. Sedangkan kalau node1 dan node2 hidup, node3 tidak akan menangani request dari klien.
proxy_redirect off berguna agar controller tidak melakukan redirect pada suatu konten website.
proxy_set_header berguna untuk mengizinkan mendefinisikan ulang atau menambahkan bidang ke header permintaan yang dikirimkan ke server proxy.
proxy_set_header X-Real-IP $remote_addr berguna untuk mengatur alamat IP dari klien sehingga proxy dengan benar dapat membuat keputusan atau masuk berdasarkan informasi ini. Variabel $remote_addr merupakan IP client yang mengakses server.
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for maksudnya adalah Header X-Forwarded-For adalah daftar yang berisi alamat IP dari setiap server yang telah diprogramkan klien sampai saat ini. Pada contoh di atas, kami menetapkan variabel $ proxy_add_x_forwarded_for ini. Variabel ini mengambil nilai dari header X-Forwarded-For asli yang diambil dari klien dan menambahkan alamat IP server Nginx sampai akhir.
proxy_set_header Host $http_host Permintaan di atas menetapkan header "Host" ke variabel $http_host, yang berisi informasi tentang host asli yang diminta
proxy_pass_header node1,node2 berguna untuk mengizinkan lewat header yang dinonaktifkan dari server proxy ke client.
location / diatas menandakan konten website berada. Pada konfigurasi diatas, saya mengaturnya pada proxy_pass http://backend-ali/ .ini artinya saya mengaturnya kalau klien mengakses server controller, maka controller akan meneruskan request tersebut ke cluster backend-ali yang telah dibuat dengan beban yang telah ditentukan sebelumnya
3. Restart service nginx agar konfigurasi yang baru dibuat berjalan
B. Konfigurasi Node1
Sebenarnya pada node tidak diberikan konfigurasi apa apa. Hanya menginstall nginx dan menjalankan servicenya, kemudian membuat konten pada direktori defaultnya, dan mengatur firewall saja. Dan pastikan pada setiap node sudah terinstall nginx.
Oke langsung saja.
1. Buat file index untuk pengujian pada direktori defaultnya.
2. Isikan filenya sesuai hati anda. Disini saya memasukkannya sebagai berikut
3. Aktifkan dan jalankan service nginx
4. Konfigurasi firewall agar mengizinkan service http pada node
C. Konfigurasi Node2
1. Buat file index untuk pengujian pada direktori defaultnya.
2. Isikan filenya sesuai hati anda. Disini saya memasukkannya sebagai berikut
3. Aktifkan dan jalankan service nginx kemudian konfigurasi firewall agar mengizinkan service http pada node
D. Konfigurasi Node3
1. Buat file index untuk pengujian pada direktori defaultnya.
2. Isikan filenya sesuai hati anda. Disini saya memasukkannya sebagai berikut
3. Aktifkan dan jalankan service nginx kemudian konfigurasi firewall agar mengizinkan service http pada node
E. Pengujian
1. Buka website anda dengan mengetikkan domain atau IP controller, kemudian lakukan refresh beberapa kali, kemudian akan terlihat node1 akan dua kali menangani request, sedangkan node2 hanya sekali menangani request.
2. Hentikan service nginx pada node1 dan node2 untuk melihat apakah node3 berhasil menjalankan tugasnya sebagai server backup.
Pada node1
Pada node2
3. Kemudian buka lagi website anda, mungkin akan melakukan loading yang agak lama sekitar 2 - 4 detik. Kemudian akan terlihat kalau node3 yang menangani request
Sekian, Kurang Lebihnya Mohon Maaf
Semoga Bermanfaat
loading...
Comments
Post a Comment