Saya sudah menyiapkan haproxy dengan keepalived untuk load balancing dan ip failover dari sebuah cluster percona, dan karena berfungsi dengan baik saya ingin menggunakan lb / failover yang sama untuk layanan / daemon lain.
Saya telah mengkonfigurasi haproxy dengan cara ini:
listen my_service 0.0.0.0:4567
mode tcp
balance leastconn
option tcpka
contimeout 500000
clitimeout 500000
srvtimeout 500000
server host1 xxx.xxx.xxx.xx1:4567 check port 4567 inter 5000 rise 3 fall 3
server host2 xxx.xxx.xxx.xx2:4567 check port 4567 inter 5000 rise 3 fall 3
Penyeimbangan beban berfungsi dengan baik, tetapi layanan melihat IP penyeimbang beban alih-alih IP sebenarnya dari klien. Dalam mode http, cukup mudah memiliki haproxy meneruskan IP jarak jauh, tetapi bagaimana caranya dalam mode tcp? Ini penting karena sifat layanan yang saya perlukan untuk memuat keseimbangan.
Terima kasih! Vito
load-balancing
haproxy
Vito Botta
sumber
sumber
Jawaban:
Hanya untuk referensi di masa mendatang, keepalived adalah solusi untuk failover tidak memuat penyeimbangan (mungkin maksud Anda LVS?). mode proxy transparan untuk HAProxy tidak ada hubungannya dengan cara khusus untuk mengirim IP asli, yang akan menjadi mode HTTP non-transparan normal di mana Anda dapat menggunakan header HTTP standar untuk ini.
Menurut pendapat saya, jawaban yang benar atas pertanyaan awal adalah: Anda dapat mengkompilasi dukungan proxy transparan di HAProxy pada kernel linux yang diaktifkan TPROXY. Ini bersama dengan TPROXY yang mendukung versi + konfigurasi iptables pada mesin yang sama memungkinkan dukungan proxy tcp sepenuhnya transparan. Ini berarti bahwa server backend TIDAK memerlukan konfigurasi khusus.
Perhatikan bahwa ini sebenarnya bukan pengaturan yang disarankan untuk HAProxy dan hanya boleh digunakan jika Anda benar-benar membutuhkannya.
sumber
Tampaknya ada semacam mode "transparan" untuk haproxy yang belum pernah saya lihat atau ingin saya lakukan, yang dapat Anda coba. Kalau tidak, Anda harus mengajarkan apa pun layanan backend tentang cara khusus haproxy untuk mengirim IP asli ("BUKTI bla") dan minta layanan menarik IP asli dari situ.
Mengapa Anda repot-repot dengan haproxy? Anda sudah tetap hidup di tempatnya, dan itu juga melakukan penyeimbangan beban transparan yang tepat.
sumber
Menggunakan
send-proxy
dalam konfigurasi Anda (per-server) akan memberi Anda sumber-ip asli di sisi server penerima, bahkan dalam mode TCP. Ini membutuhkan HAProxy 1.5+.Anda dapat menemukan informasi lebih lanjut tentang Protokol Proxy dalam Dokumentasi HAProxy .
sumber
Anda bisa mengatur HAProxy sebagai Mode NAT, yang masih menggunakan mode TCP di Layer 4 tetapi membuat IP transparan.
Di sisi lain, HAPorxy Transparent Mode menggunakan mode HTTP di Layer 7, yang tidak mencapai titik Anda karena sudah ada
forwardfor
opsi dalam mode HTTP.sumber
Konfigurasi ini bekerja untuk saya. Sumber IP dapat diambil dalam $ _SERVER ['HTTP_X_FORWARDED_FOR']:
sumber