Apakah ada cara untuk menambahkan lebih banyak server backend ke haproxy tanpa memulai ulang haproxy?

17

Kami ingin dapat menambahkan lebih banyak server backend sesuai permintaan. Saat ini saya tidak melihat cara untuk menambahkan lebih banyak server backend ke file konfigurasi tanpa me-restart haproxy.

Jan Deinhard
sumber

Jawaban:

15

Saya belum menguji use case khusus ini tetapi haproxy mendukung "hot reload":

2.4.1) Hot reconfiguration
--------------------------
The '-st' and '-sf' command line options are used to inform previously running
processes that a configuration is being reloaded. They will receive the SIGTTOU
signal to ask them to temporarily stop listening to the ports so that the new
process can grab them. If anything wrong happens, the new process will send
them a SIGTTIN to tell them to re-listen to the ports and continue their normal
work. Otherwise, it will either ask them to finish (-sf) their work then softly
exit, or immediately terminate (-st), breaking existing sessions. A typical use
of this allows a configuration reload without service interruption :

 # haproxy -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)

Jika Anda memiliki skrip init untuk memulai dan menghentikan haproxy, kemungkinan mendukung reloadargumen dengan fungsi seperti:

haproxy_reload()
{
    $HAPROXY -f "$CONFIG" -p $PIDFILE -D $EXTRAOPTS -sf $(cat $PIDFILE) \
        || return 2
    return 0
}
Kyle Brandt
sumber
1
Saya sudah mencoba ini tetapi saya menemukan bahwa itu membersihkan counter saya. Mungkin saya melakukan sesuatu dengan cara yang salah, atau apakah itu perilaku yang diharapkan?
Leandro López
6

Dari manual:

> 1.6) Membantu manajemen proses

Haproxy sekarang mendukung gagasan pidfile. Jika argumen baris perintah '-p', atau opsi global 'pidfile' diikuti dengan nama file, file ini akan dihapus, kemudian diisi dengan semua anak-anak pids, satu per baris (hanya dalam mode daemon). File ini BUKAN dalam chroot, yang memungkinkan untuk bekerja dengan chroot hanya baca. Ini akan dimiliki oleh pengguna yang memulai proses, dan akan memiliki izin 0644.

Contoh:

global
    daemon
    quiet
    nbproc  2
    pidfile /var/run/haproxy-private.pid

# to stop only those processes among others :
# kill $(</var/run/haproxy-private.pid)

# to reload a new configuration with minimal service impact and without
# breaking existing sessions :
# haproxy -f haproxy.cfg -p /var/run/haproxy-private.pid -sf $(</var/run/haproxy-private.pid)
Janne Pikkarainen
sumber
1

Juga tergantung pada versi HA-proxy Anda, Anda mungkin ingin mempertimbangkan HA-Proxy Dynamic API seperti yang dijelaskan oleh haproxy.com di halaman ini: https://www.haproxy.com/blog/dynamic-scaling-for-microservices-with -runtime-api /

API HA-Proxy Dynamic hadir dengan versi Enterprise.

Anda harus mempertimbangkan HA-Proxy Dynamic API jika Anda ingin menambah / menghapus server dengan cepat sebagai praktik biasa atau jika proyek Anda menyiratkan use case seperti itu.

Mike Mountrakis
sumber