HAProxy load balancing antara server web Nginx

Pada artikel ini kami akan menunjukkan pengaturan penjadwal. HAProxy untuk dua server dengan server web diinstal Nginx (dapat diganti oleh Apache). Dalam semua kasus, CentOS digunakan sebagai OS.

HAProxy - perangkat lunak server untuk menyediakan ketersediaan tinggi dan penyeimbangan beban untuk aplikasi TCP dan HTTP, dengan mendistribusikan permintaan yang masuk ke beberapa server. HAProxy digunakan pada banyak sumber daya populer, termasuk Twitter, Instagram, Github, Avito, Amazon dan lainnya.

HAProxy diinstal pada server terpisah yang menerima permintaan klien dan mengarahkannya ke server web Nginx. Berikut ini adalah arsitektur sistem umum.

Konten:

  • Mengkonfigurasi Nginx di server backend
  • Konfigurasi penyeimbang beban HAProxy
  • Opsi file konfigurasi Haproxy.cfg
  • Pengumpulan statistik HAProxy

Mengkonfigurasi Nginx di server backend

Mari kita mulai dengan menginstal dan mengkonfigurasi Nginx di server web kami, di mana beban akan seimbang. Instal repositori EPEL dan nginx sendiri menggunakan yum:

#yum instal epel-release -y
#yum instal nginx -y

Saya melakukan instalasi pada dua server sekaligus, karena server dikonfigurasikan satu lawan satu (untuk eksekusi perintah paralel pada beberapa server, Anda dapat menggunakan pdsh).

Lebih lanjut dalam file konfigurasi nginx.conf Kami menunjukkan bahwa server seharusnya hanya memproses permintaan dari server HaProxy dan server backend:

Server backend 1:

server dengarkan current_server_IP: 80 default_server; izinkan IP_server_backend_server; izinkan IP_haproxy; tolak semua; nama_server _; root / usr / share / nginx / html; # Muat file konfigurasi untuk blok server default. termasuk /etc/nginx/default.d/*.conf; lokasi /  

Server backend ke-2:

server dengarkan current_server_IP: 80 default_server; izinkan IP_first_backend_server; izinkan IP_haproxy; tolak semua; nama_server _; root / usr / share / nginx / html; # Muat file konfigurasi untuk blok server default. termasuk /etc/nginx/default.d/*.conf; lokasi /  

Konfigurasi nginx adalah standar, kami baru saja menambahkan dengarkan IP server dan akses tertutup ke semua orang kecuali server kami menggunakan arahan ijinkan dan tolak.

Agar server web berfungsi, Anda perlu membuka koneksi di firewall melalui firewalld atau iptables:

# firewall-cmd --permanent -add-service = http
# firewall-cmd -muat ulang

Lakukan pemeriksaan pada salah satu server backend:

[root @ server ~] # curl Second_Server_IP

 di sini Anda harus mendapatkan dokumen html 

Server memberikan file indeks nginx standar, yang berarti server berinteraksi satu sama lain.

Untuk memudahkan verifikasi, saya mengubah isi file indeks pada setiap server backend, sehingga selama pengujian saya dapat melihat dengan jelas di browser server mana yang memproses permintaan tersebut..

File indeks nginx terletak di / usr / share / nginx / html /.

Konfigurasi penyeimbang beban HAProxy

Mari kita mulai menginstal dan mengkonfigurasi HAProxy di server, yang akan digunakan sebagai penyeimbang beban.

Instal HaProxy dan lakukan pengaturan dasar untuk penyeimbang.

#yum instal epel-release -y

#yum instal haproxy -y

Plugin yang dimuat: tercepat dengan kecepatan cermin Memuat dari cache hostfile epel / x86_64 / metalink ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Instalasi transaksi: haproxy-1.5.18-9.el7.x86_64 1/1 Memverifikasi: haproxy-1.5.18-9.el7.x86_64 1/1 Terpasang: haproxy.x86_64 0: 1.5.18-9.el7 Selesai! 

Untuk mengaktifkan HaProxy, Anda perlu menambahkan Diaktifkan = 1 ke file / etc / default / haproxy:

#nano / etc / default / haproxy

Sekarang mari kita beralih ke pengaturan HaProxy itu sendiri. Dalam konfigurasi kami yang paling sederhana, server balancing akan memproses semua permintaan http dan mengirimkannya pada gilirannya ke server backend.

#nano /etc/haproxy/haproxy.cfg

log / dev / log local0 chroot / var / lib / haproxy pidfile /var/run/haproxy.pid maxconn 4000 pengguna haproxy grup haproxy daemon default mode http log opsi global redispatch coba lagi 3 timeout http-request 10s timeout antrian 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-live 10s timeout check 10s maxconn 3000 frontend www bind balancer IP: 80 default_backend nginx_pool backend nginx_pool balance roundrobin mode http server web1 first_backend_server IP: 80 periksa server web2 80 second_backend_server: 

Setelah menyimpan konfigurasi, pastikan untuk memeriksa sintaks dengan perintah:

#haproxy -f /etc/haproxy/haproxy.cfg -c

Jika semuanya beres, Anda akan mendapatkan hasil yang serupa:

File konfigurasi valid

Setelah itu, Anda perlu me-restart HaProxy dan menambahkan startup CentOS-nya. Dan juga buka aturan yang diperlukan pada firewall.

#systemctl restart haproxy

#systemctl mengaktifkan haproxy

# firewall-cmd -permanent -add-service = http

# firewall-cmd -muat ulang

Ini menyelesaikan pengaturan penyeimbang, periksa hasilnya dengan membuka server IP dengan HaProxy di browser:

Seperti yang Anda lihat, kedua server mengirimkan konten secara bergantian, penyeimbang berfungsi.

Opsi file konfigurasi Haproxy.cfg

Pertimbangkan contoh utama dari algoritma operasi HaProxy:

  • roundrobin - Algoritma default mengirimkan permintaan ke server secara bergantian. Dalam contoh kami, kami menggunakan metode seperti itu;
  • lessconn - memilih server dengan paling sedikit koneksi aktif. Dianjurkan untuk menerapkan pada proyek-proyek di mana sesi dapat terlibat untuk waktu yang lama;
  • sumber - memilih server berdasarkan hash yang dibangun berdasarkan pengguna IP. Dalam mode operasi ini, klien yang sama akan selalu mengakses server yang sama jika IP-nya tetap tidak berubah;

Mari kita lihat beberapa parameter dalam file konfigurasi.

Blokir global:

  • log - simpan log in / dev / log saving local0 ke "objek";
  • chroot - pengaturan keamanan yang mengunci HAProxy di direktori yang ditentukan;
  • maxconn - jumlah maksimum koneksi yang bersaing per proses;
  • pengguna - pengguna atas nama siapa program akan diluncurkan;
  • grup - grup pengguna atas nama program akan diluncurkan;
  • daemon - memulai proses sebagai daemon.

Blokir standar. Bagian ini menjelaskan pengaturan default untuk semua bagian lain yang mengikutinya:

  • log - menunjukkan log mana yang akan direkam (global dalam hal ini berarti bahwa parameter yang ditentukan dalam bagian global digunakan);
  • mode - mengatur protokol interaksi, mengambil salah satu nilai: tcp, http atau health;
  • coba lagi - jumlah upaya untuk terhubung ke server jika terjadi kegagalan;
  • opsi httplog - format log, jika menggunakan HAProxy untuk mem-proxy permintaan HTTP;
  • opsi redispatch - Mengizinkan program untuk mengakhiri dan menugaskan kembali sesi jika terjadi kegagalan server;
  • contimeout - waktu maksimum untuk menunggu koneksi yang berhasil ke server.

Ada juga sejumlah besar parameter yang terkait dengan berbagai batas waktu.

Pengumpulan statistik HAProxy

Tambahkan blok statistik ke file konfigurasi:

dengarkan stats bind: 10001 stats mengaktifkan stats uri / haproxy_stats stats auth admin: admin 

Deskripsi:

  • mengikat - port tempat melihat statistik akan bekerja;
  • statistik aktifkan - termasuk laporan dengan statistik;
  • statistik uri - mengatur alamat halaman statistik;
  • statistik auth - login dan kata sandi.
Anda dapat menentukan port yang nyaman bagi Anda jika yang ditentukan dalam artikel sibuk atau tidak cocok untuk Anda.

Juga, agar haproxy_stats kami berfungsi, Anda perlu membuka port yang ditentukan sebelumnya di firewall:

firewall-cmd --permanent -add-port = 10001 / tcp

firewall-cmd -muat ulang

Untuk melihat laporan tentang karya HAProxy, Anda perlu mengklik tautan:

http: // hostname_haproxy: 10001 / haproxy_stats

Buka alamat penyeimbang di browser dan mulai mengirim spam F5. Statistik pada tautan yang ditentukan berubah, utilitas berfungsi.

Ini melengkapi pengaturan kami. Dalam artikel tersebut, kami memeriksa konfigurasi dasar HaProxy. Dalam desain kami, server penyeimbang beban HaProxy menjadi titik kegagalan tunggal. Untuk meningkatkan toleransi kesalahan konfigurasi, Anda dapat menambahkan server HaProxy kedua, dan memeriksa ketersediaan antara server menggunakan Keepalived. Anda mendapatkan sesuatu seperti ini.

Ada banyak lagi opsi untuk menggunakan modul HAProxy dan Anda selalu dapat menemukan aplikasi di dalamnya..