Saya memiliki pengaturan HAProxy dalam mode TCP, dengan batas waktu klien / server / koneksi 120an.
Ketika saya memuat ulang konfigurasi terlalu cepat, saya kadang berakhir dengan beberapa proses. Secara desain, ini diharapkan, sehingga semua koneksi yang ada terkuras.
Masalah saya adalah mereka tidak pernah putus, meskipun semua koneksi ditutup.
ps aux | haproxy
haproxy 12483 0.0 0.1 103748 1084 ? Ss 20:45 0:00 /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf 12405
haproxy 12485 0.0 0.1 103748 1088 ? Ss 20:45 0:00 /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf 12405
haproxy 12487 0.0 0.1 103748 1084 ? Ss 20:45 0:00 /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf 12405
haproxy 25115 0.0 0.1 103748 1084 ? Ss 21:26 0:00 /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf 12488
netstat -pant | grap haproxy
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 25115/haproxy
tcp 0 0 0.0.0.0:1936 0.0.0.0:* LISTEN 25115/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 25115/haproxy
Saya menunggu lebih lama dari batas waktu 120-an. Saya tidak mengerti apa yang menahan mereka.
Lsof berikut untuk salah satu dari proses lama menunjukkan bahwa masih ada beberapa FD untuk TCP LISTEN
# lsof -p 12483
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
haproxy 12483 haproxy cwd DIR 202,1 4096 2 /
haproxy 12483 haproxy rtd DIR 202,1 4096 2 /
haproxy 12483 haproxy txt REG 202,1 4381869 412355 /usr/local/sbin/haproxy
haproxy 12483 haproxy mem REG 202,1 62864 396140 /lib64/libnss_files-2.17.so
haproxy 12483 haproxy mem REG 202,1 126288 396526 /usr/lib64/libselinux.so.1
haproxy 12483 haproxy mem REG 202,1 141760 396148 /lib64/libpthread-2.17.so
haproxy 12483 haproxy mem REG 202,1 89312 396076 /lib64/libgcc_s-4.8.2-20140120.so.1
haproxy 12483 haproxy mem REG 202,1 98720 396150 /lib64/libresolv-2.17.so
haproxy 12483 haproxy mem REG 202,1 13224 396957 /lib64/libkeyutils.so.1.5
haproxy 12483 haproxy mem REG 202,1 43768 396966 /lib64/libkrb5support.so.0.1
haproxy 12483 haproxy mem REG 202,1 19512 396128 /lib64/libdl-2.17.so
haproxy 12483 haproxy mem REG 202,1 170784 396962 /lib64/libk5crypto.so.3.1
haproxy 12483 haproxy mem REG 202,1 12744 396594 /usr/lib64/libcom_err.so.2.1
haproxy 12483 haproxy mem REG 202,1 937952 396964 /lib64/libkrb5.so.3.3
haproxy 12483 haproxy mem REG 202,1 273672 396958 /lib64/libgssapi_krb5.so.2.2
haproxy 12483 haproxy mem REG 202,1 486512 396073 /lib64/libfreebl3.so
haproxy 12483 haproxy mem REG 202,1 2000552 396122 /lib64/libc-2.17.so
haproxy 12483 haproxy mem REG 202,1 1967496 400756 /lib64/libcrypto.so.1.0.1j
haproxy 12483 haproxy mem REG 202,1 445424 400761 /usr/lib64/libssl.so.1.0.1j
haproxy 12483 haproxy mem REG 202,1 88568 396529 /lib64/libz.so.1.2.7
haproxy 12483 haproxy mem REG 202,1 36856 396126 /lib64/libcrypt-2.17.so
haproxy 12483 haproxy mem REG 202,1 152376 396115 /lib64/ld-2.17.so
haproxy 12483 haproxy 0u 0000 0,9 0 5420 anon_inode
haproxy 12483 haproxy 4u IPv4 1435667 0t0 TCP *:http (LISTEN)
haproxy 12483 haproxy 5u IPv4 1435668 0t0 TCP *:https (LISTEN)
haproxy 12483 haproxy 6u IPv4 1435673 0t0 TCP *:jetcmeserver (LISTEN)
-sf
dalam konfigurasi Anda? Proses yang lebih baru diarahkan ke-sf 12488
(dan12488
tidak berjalan), tetapi sepertinya12483
adalah yang harus diarahkan untuk mengambil pendengar dengan sukses.strace -p 13483
mungkin membantu dalam menunjukkan apa yang sedang dilakukan proses itu (atau diblokir, dll.).gettimeofday({1417009573, 706535}, NULL) = 0 gettimeofday({1417009573, 706629}, NULL) = 0 epoll_wait(0, {}, 200, 1000)
Jawaban:
Ini terjadi pada saya juga beberapa hari yang lalu ... Tidak ada jawaban yang masuk akal, mungkin, prosesnya tidak pernah selesai karena koneksi masih menggunakannya setiap saat. Saya memiliki 2 HaProxy dan, situasi ini tidak pernah terjadi pada yang sekunder karena tidak memiliki koneksi selama operasi normal.
Saya mengeluarkan perintah SIGTERM , atau Anda bisa MEMBUNUH PID yang lama dan Anda baik-baik saja.
Anda bisa mendapatkan PID lama dari halaman status HaProxy . Menyegarkan beberapa kali saya melihat proses lama dan baru secara acak.
Setelah membunuh yang lama, proses baru adalah satu-satunya yang menanggapi permintaan.
:)
sumber
Baru saja menemukan solusi di sini: https://discourse.haproxy.org/t/tcp-connection-keep-old-process-up-on-soft-reload/2905
Konfigurasikan
hard-stop-after
di
haproxy.cfg
sumber