ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Error 2003: Can't connect to MySQL server on '127.0.0.1' (99 "Cannot assign requested address"
    HOWTO 2016. 6. 16. 12:40

    오픈스택의 ceilometer 에서 미터링 데이터를 불러와서 mariadb 에 저장하는 역할을 하는 python 프로그램이 있는데 

    어느날인가부터 데이터 누락이 생기는 거 같아 확인하다보니 데이터 호출 시 아래와 같은 메세지가 뜨면서 TCP 세션이 증가하는 현상이 있었다. (프로그램이 수행되는 환경은  Centos 6.6 에 10.1.13-MariaDB 를 사용중이다)


    Error 2003: Can't connect to MySQL server on '127.0.0.1' (99 "Cannot assign requested address")


    또한 프로그램이 수행될 때 netstat -nt 명령어를 통해 세션상태를 확인한 결과 

    TIME_WAIT 상태의 세션이 12000 여개 정도로 증가하고 있었다. 


    TIME_WAIT 상태 해제되지 않은 대량의 연결시도가 로컬 포트​​를 잡아 버려, 유효한 범위의 포트 번호를 잠식했던 것 같고

    포트 중 하나가 해제될 때 까지 새로운 연결을 설정할 수 없게 하는 상황인 것으로 추측하여 

    이런 저런 검색을 통해 sysctl.conf 에 아래 파라미터들을 추가해 주었더니

    12000 여개 TIME_WAIT 을 발생시키던 세션수가 200개  정도로 감소하였다. 


    추가한 파라미터 및 역할을 아래와 같다. 


     . ip_local_port_range :: 로컬 포트로 사용할 수 있는 주소의 범위 


     . tcp_tw_recycle : TIME_WAIT 상태에 있는 연결을 빠르게 재활용 할 수 있도록 하기 위한 값

                          기본적으로 비활성화 되어 있으므로 값을 추가하여 넣어줘야 함 


     . tcp_fin_timeout FIN_WAIT2 상태에 있는 보유 시간 설정 (기본 60초 -> 10초)



    # vi /etc/sysctl.conf

    net.ipv4.ip_local_port_range = 1024 65000

    net.ipv4.tcp_tw_recycle = 1

    net.ipv4.tcp_fin_timeout = 10


    내용 추가 후 sysctl -p 명령어를 통해 바로 적용할 수 있다. 



    조치 후 이런 저런 검색을 더 해보다 보니 


    net. ipv4 .tcp_tw_recycle을 사용하면 조건에 따라 TCP 세션 이 부풀어 없게되는 문제가 발생할 수도있다고 하니 

    관리하는 시스템 성격에 따라 유의하여 적용해야 할 것 같다. 

    반응형

    댓글

Designed by Tistory.