haproxy 서버 포트가 다 쓴 문제를 어떻게 해결합니까

1969 단어 haproxy포트 소진
Haproxy 부하는 부하 균형 서버로서 클라이언트와 많은 연결을 맺을 것이고 이것들은 모두 포트 자원을 소모해야 한다.포트 자원이 거의 소모되었을 때 서버에 이상이 발생할 수 있습니다.그렇다면 이 문제를 어떻게 해결해야 합니까?인터넷에서 많은 네티즌의 글을 보고 다음과 같은 다섯 가지 방법으로 정리했다.

1. 가능한 한 많은 포트를 사용


Linux 시스템은 기본적으로 65536개의 포트를 제공하는데 Haproxy가 연결될 때마다 하나의 포트를 소모한다.Haproxy가 연결을 끊으면 포트가 즉시 해제되지 않고 TIME_WAIT 상태(2MSL, 보통 2분)로 새 포트에 사용할 수 있습니다.
하면, 만약, 만약...fin_wait를 15초로 설정하면haproxy가 탑재할 수 있는 최대 병렬 연결 수는:
64K/(15*2)=2.1K

그러나 실제로는 이 오프라인에 도달할 수 없다. 원인은 다음과 같다.
net.ipv4.ip_local_port_range = 15000 65000

사용 가능한 포트가 64K 개가 아닙니다.Linux는 일부 포트를 보존합니다. 실제 할당에 참여할 수 있는 포트 수는 50K에 불과합니다. 가능한 한 많은 할당 포트를 위해 다음과 같이 조정합니다.
net.ipv4.ip_local_port_range = 1024 65000

2. 포트 재사용


포트 재사용 조정 매개변수 두 개:
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

그 중에서 첫 번째 파라미터는 매우 안전하고, 두 번째 파라미터는 어떤 상황에서 데이터 패키지를 버릴 수 있다.예를 들어 클라이언트는 NAT를 통해haproxy를 연결하고haproxy단에서 넷을 열었습니다.ipv4.tcp_tw_recycle, 동시에saw_tstamp도 닫히지 않았습니다. 첫 번째 연결이 설정되고 닫히면 이 포트는 TIME_WAIT 상태, 2MSL 시간 내에 또 하나의client (같은 IP, xfrm을 열면 같은 포트) 에서 SYN 패키지를 보냅니다. 이때 linux 호스트는 이 패키지가 이상하다고 판단하여 이 패키지를 잃어버리고 RST 패키지를 보냅니다.

3. 단축 TIME_WAIT 시간


Linux 시스템의 기본 MSL은 60초입니다. 즉, 정상적인 경우 120초 후에 TIME_WAIT 상태의 포트가 해제되어야 MSL 시간을 줄이고 포트 해제 주기를 단축할 수 있습니다.
cat /proc/sys/net/ipv4/tcp_fin_timeout
60
echo 15 > /proc/sys/net/ipv4/tcp_fin_timeout

이 값도 너무 작게 설정하지 마세요. 그렇지 않으면 다른 문제가 발생할 수 있으니 비교적 절충된 값이 필요합니다.

4. 다중 IP 사용


포트의 수는 사실 IP에 비해 많으며, 만약 여러 개의 IP가 있다면 더 많은 포트를 사용할 수 있다.Haproxy는 다음과 같이 구성할 수 있는 내장 포트 관리 방법을 제공합니다.
server mysql01 10.0.0.1:3306 check source 10.0.0.100:1025-65000
server mysql02 10.0.0.1:3306 check source 10.0.0.101:1025-65000

5. 긴 연결 사용


서비스는 긴 연결을 사용하는 것이 가장 좋다. 첫째, 빈번한 포트 신청으로 인해 포트가 소모되는 것을 피하는 것이다.둘째, 연결을 만드는 데 걸리는 시간을 피한다.
공유는 여기서 마치겠습니다. 감사합니다.

좋은 웹페이지 즐겨찾기