Tải lại HAProxy - các quy trình cũ không bao giờ kết thúc


15

Tôi có thiết lập HAProxy ở chế độ TCP, với thời gian chờ máy khách / máy chủ / kết nối là 120 giây.

Khi tôi tải lại cấu hình quá nhanh, đôi khi tôi kết thúc với nhiều quy trình. Theo thiết kế, điều này được mong đợi, vì vậy tất cả các kết nối được thiết lập đều bị rút cạn.

Vấn đề của tôi là họ không bao giờ chấm dứt, mặc dù tất cả các kết nối đã bị đóng.

ps phụ | 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 | grep 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

Tôi đã đợi lâu hơn thời gian chờ là 120 giây. Tôi không hiểu những gì đang giữ chúng.

Các lsof sau đây cho một trong những quy trình cũ đó cho thấy rằng vẫn còn một số FD cho 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)

Hmm, vậy quy trình cũ vẫn sở hữu người nghe nó như thế nào? Có gì populating -sftrong cấu hình của bạn? Quá trình mới hơn được chỉ ra -sf 12488(và 12488không chạy), nhưng có vẻ như đó 12483là quy trình mà nó cần chỉ ra để đưa người nghe thành công.
Shane Madden

A strace -p 13483có thể giúp hiển thị quá trình đó đang làm gì (hoặc bị chặn, v.v.).
wurtel

ShaneMadden , tất cả các quy trình đều sở hữu người nghe, nhưng chỉ có quá trình cuối cùng thực sự lắng nghe TCP (dựa trên netstat). Quá trình 12488 không còn tồn tại nữa, nó đã bị chấm dứt. wurtel , strace cho thấy sự lặp lại của:gettimeofday({1417009573, 706535}, NULL) = 0 gettimeofday({1417009573, 706629}, NULL) = 0 epoll_wait(0, {}, 200, 1000)
Bastien974

@ Bastien974 Bạn có thể tìm ra giải pháp cho vấn đề này không. Tôi đang thấy vấn đề tương tự.
pradeepchhetri

Câu trả lời:


1

Điều này cũng xảy ra với tôi chỉ vài ngày trước ... Không có câu trả lời hợp lý, có lẽ, quá trình không bao giờ kết thúc vì các kết nối vẫn sử dụng nó mọi lúc. Tôi có 2 HaProxy và, tình huống này chưa bao giờ xảy ra ở trường thứ cấp vì nó không có kết nối trong khi hoạt động bình thường.

Tôi đã ban hành lệnh SIGTERM , hoặc bạn chỉ có thể KIẾM PID cũ và bạn vẫn ổn.

Bạn chỉ có thể lấy PID cũ từ trang trạng thái HaProxy . Làm mới nhiều lần tôi đã thấy quá trình cũ và mới một cách ngẫu nhiên.

Sau khi giết cái cũ, quy trình mới là người duy nhất đáp ứng các yêu cầu.

:)


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.