Nginx 504 문제 해결 --- tcptimestamps 로 인 한 연결 문제

이틀 동안 생산 된 위의 업무 가 시간 초과 문제 에 부 딪 혔 는데 nginx 의 로그 현상 은 504 시간 초과 이다.마침내 해결 되 었 다. 이 블 로그 기록 을 쓰 고 처리 하 는 모든 과정 을 정리 했다.
고장 검사
첫 번 째 단 계 는 nginx 의 504 오류 로 그 를 조사 하고 오류 로 그 를 분석 하 며 규칙 적 인 지 여 부 를 보 는 것 입 니 다. 주로 통계 소스 IP, URL 입 니 다.
결론:
조사 결과 에 따 르 면 504 의 URL 이 나 오 면 두 세 개 이 고 소스 IP 가 불규칙 하 다. 이에 따라 개발 자 를 찾 아 요청 한 URL 에 문제 가 있 는 지 확인 하고 개발 자 와 의 포 지 셔 닝 을 통 해 URL 문 제 를 제 외 했 기 때문에 URL 과 IP 는 제외 하고 다음 단 계 를 진행한다.
두 번 째 단계
nginx 로그 에 로그 기록 필드 가 몇 개 추가 되 었 습 니 다. $upstream_status, $upstream_response_time, $upstream_addr 세 필드 가 추가 되 었 습 니 다. 이 세 필드 를 통 해 백 엔 드 클 러 스 터 의 모든 서버 가 504 가 나 타 났 는 지, 아니면 부분 만 나 타 났 는 지, 그리고 각 대의 시간 초과 시간 이 얼마 인지 판단 하려 고 합 니 다.
nginx. conf 설정 파일 의 로그 부분 에 이 세 필드 를 추가 한 후 nginx 를 불 러 오고 nginx 로 그 를 보면 모든 백 엔 드 클 러 스 터 에 504 문제 가 발생 했 습 니 다.
결론:
백 엔 드 클 러 스 터 서버 의 문제 인지 아 닌 지 초보 적 으로 추정 합 니 다.
세 번 째 단계
제 쪽 은 도 메 인 네 임 을 통 해 접근 하 는 백 엔 드 이기 때문에 문 제 를 더 확인 하기 위해 저 는 전단 클 러 스 터 의 한 대 /etc/hosts 에서 도 메 인 네 임 과 백 엔 드 의 실제 서버 를 연결 합 니 다. 전단 클 러 스 터 의 다른 서버 는 도 메 인 네 임 과 LVS 의 VIP 를 통 해 연결 합 니 다.
결론:
조사 후의 결 과 는 백 엔 드 의 실제 서버 를 직접 연결 할 때 504 오류 가 발생 하지 않 고 다른 것 은 VIP 를 통 해 방문 하 는 것 은 504 오류 가 있 습 니 다. 두 번 째 단계 와 세 번 째 절 차 를 종합 하면 문제 가 두 곳 에 발생 해 야 한 다 는 것 을 확인 할 수 있 습 니 다.
  • 프론트 서버 가 LVS 에 방 문 했 을 때
  • LVS 에서 백 엔 드 서버 사이
  • 네 번 째 단계
    이 단 계 는 문 제 를 배제 하기 위해 가방 을 잡 아 해결 할 수 밖 에 없 었 다. 사용 하 는 도 구 는 tcpdumpWireshark 였 다.우선 전단 서버 에서 패 키 지 를 캡 처 하 는데 주로 목적 단 을 LVS VIP 로 캡 처 합 니 다.
    sudo /usr/sbin/tcpdump tcp -vv -i bond0 and  dst host 1.1.1.2 -w ./myi.cap
    

    LVS 서버 에서 가방 을 캡 처 하여 백 엔 드 클 러 스 터 에 있 는 서버 의 가방 을 캡 처 합 니 다.
    sudo /usr/sbin/tcpdump tcp -vv and dst host 1.21.4.11 or dst host 1.21.4.12 or dst host 1.21.4.13 or dst host 1.21.4.14 -w ./user.cap
    

    마지막 으로 잡 은 가방 wireshark 을 살 펴 보고 분석 했다.
    다섯 번 째 단계
    스냅 백 을 통 해 LVS 가 백 엔 드 서버 에 직접 문제 가 있 을 수 있 음 을 확인 하고 다른 동료 에 게 물 어 보 니 3 층 에서 snat 를 한 것 으로 알려 졌 다.LVS 와 관련 된 것 으로 기억 되 는데 NAT 환경 에서 하나의 인자 가 가방 을 잃 어 버 릴 수 있 습 니 다.구 글 에서 마지막 으로 발견 한 것 은 net.ipv4.tcp_timestamps = 1 이 매개 변수 에 의 한 것 일 수 있 습 니 다.그래서 timestamps 를 닫 습 니 다.
    이 때문에 몇 개의 가방 이 거부 되 었 는 지 확인 하 십시오.
     netstat -s |grep  rejects
    
    172 packets rejects in established connections because of timestamp
    
    sudo vim /etc/sysctl.conf  #           
    
    
    net.ipv4.tcp_timestamps = 0
    
    ###  
    sudo /sbin/sysctl -p 
    

    마지막 으로 관찰 일지 504 사라 지고 문제 해결.나 도 마침내 이 문제 에 부 딪 혔 다.그래도 해결 됐어.이 글 은 제 가 분석 하고 조사 하 는 과정 일 뿐 구체 적 인 메시지 같은 것 은 붙 이지 않 습 니 다. 왜냐하면 저 는 키 워드 를 낙서 하 는 것 이 귀 찮 기 때 문 입 니 다.
    이 문 제 를 야기 하 는 상세 한 원 리 는 아래 의 참고 문장 이 이미 명확 하 게 말 했 으 니 나 는 말 하지 않 겠 다.
    참고 문장
  • Linux 의 TCP / IP 커 널 파라미터 최적화
  • tcp 프로 토 콜 timestamp 필드 로 인 한 문제 분석
  • tcp 커 널 매개 변수 가 NAT 사용자 에 게 미 친 영향
  • tcp_tw_recycle 와 tcptimestamps 연결 실패 문제
  • 좋은 웹페이지 즐겨찾기