HAProxy 재로드-이전 프로세스가 종료되지 않음


15

클라이언트 / 서버 / 연결 시간 초과가 120 초인 TCP 모드에서 HAProxy를 설정했습니다.

구성을 너무 빨리 다시로드하면 때로는 여러 프로세스로 끝납니다. 설계 상 이는 예상 된 모든 연결이 비워집니다.

내 문제는 모든 연결이 닫혀 있어도 종료되지 않는다는 것입니다.

PS AUX | 하프시

    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-팬트 | 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

120 초의 시간 초과보다 오래 기다렸습니다. 나는 그들을 잡고 무엇을 이해하지 못합니다.

이전 프로세스 중 하나에 대한 다음 lsof는 여전히 TCP LISTEN에 대한 일부 FD가 있음을 보여줍니다.

# 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구성에서 무엇을 채우고 있습니까? 최신 프로세스가 가리키고 -sf 12488있고 12488실행되지 않고 있지만 12483리스너를 성공적으로 가져 오기 위해 가리켜 야 할 프로세스 인 것 같습니다 .
Shane Madden

strace -p 13483힘의 해당 프로세스가 무엇을하고 있는지를 보여주는 도움 (또는 차단 등).
wurtel

ShaneMadden 은 모든 프로세스가 리스너를 소유하고 있지만 마지막 프로세스 만 실제로 netstat를 기반으로 TCP를 수신합니다. 프로세스 (12488)는 더 이상 존재하지 않으며, 어떻게 든 종료되었다. wurtel , strace는 반복을 보여줍니다 :gettimeofday({1417009573, 706535}, NULL) = 0 gettimeofday({1417009573, 706629}, NULL) = 0 epoll_wait(0, {}, 200, 1000)
Bastien974

@ Bastien974 문제의 해결책을 찾을 수있었습니다. 같은 문제가 발생합니다.
pradeepchhetri

답변:


1

며칠 전에 나에게도 이런 일이 일어났다 ... 합당한 대답은 없을 것이다. 아마도 연결이 계속해서 계속 사용되어 프로세스가 끝나지 않았을 것이다. 나는 2 개의 HaProxy를 가지고 있으며,이 상황은 정상적인 작동 중에 연결이 없기 때문에 2 차 상황에서는 결코 발생하지 않았습니다.

나는 발행 SIGTERM의 명령을, 또는 당신은 할 수 KILL 기존의 PID를 당신이 괜찮습니다.

HaProxy 상태 페이지 에서 기존 PID 를 얻을 수 있습니다 . 여러 번 새로 고침 나는 이전과 새로운 프로세스를 무작위로보고있었습니다.

이전 프로세스를 종료 한 후 새로운 프로세스가 요청에 응답 한 유일한 프로세스였습니다.

:)


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.