저는 NAT 모드에서 LVS(ipvsadm)를 사용하여 여러 "실제 서버"에 대한 UDP 트래픽의 로드 밸런싱을 수행하고 있습니다. 클라이언트의 단일 소스 포트에서 발생하는 트래픽이 다른 실제 서버로 분산되도록 단일 패킷 예약을 사용하고 있습니다.
하지만 내가 보는 것은 실제 서버에서 시작되어 클라이언트로 다시 전송되는 UDP 데이터그램의 소스 IP/포트가 실제 서버 중 하나로 설정되어 있다는 것입니다. 이는 클라이언트가 다음과 같은 응답을 받을 것으로 예상하기 때문에 혼란스럽습니다. 소스 IP/포트는 원본 데이터그램을 보낸 것과 일치합니다.
이는 실제로 매우 이상합니다. 왜냐하면 LVS는 가상 IP/포트 뒤에 실제 서버를 "숨겨야" 하기 때문입니다.
단일 패킷 스케줄링을 끄면 나가는 데이터그램의 소스 IP/포트가~이다LVS가 올바르게 다시 작성했습니다.
이런 일이 발생한 사람이 있습니까? 그렇다면 이 문제를 해결하는 방법은 무엇입니까?
답변1
아직도 관심이 있다면:
나는 단일 패킷 예약이 방금 예약한 패킷의 응답을 기대하지 않으므로 연결 정보를 저장하지 않는다고 생각합니다. 그런 다음 응답이 돌아오면 LVS는 이에 대한 연결을 찾지 못하므로 어떤 소스 IP/포트를 사용할지 알 수 없습니다.
이것은 의도적으로 설계된 것 같습니다. 여기에서 "원본 패킷에 대한 응답이 없는 설정에 대해 OPS가 구현되었습니다"를 검색하면 설명이 표시됩니다.
http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.UDP.html
해결 방법은 UDP 연결에 대한 지속 시간 초과를 설정하여(빠른 응답을 기대하는 경우 낮게 설정할 수 있음) 연결 시간을 명시적으로 설정하는 것입니다. 이렇게 하면 OPS가 연결을 기억할 필요가 없습니다.