-
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 세션 이 부풀어 없게되는 문제가 발생할 수도있다고 하니
관리하는 시스템 성격에 따라 유의하여 적용해야 할 것 같다.
반응형'HOWTO' 카테고리의 다른 글
kubernetes 에 weavescope 설치하기 (0) 2018.11.22 mac 에서 원격 kubernetes cluster 제어하기 (0) 2018.11.22 일반 계정으로 tomcat 을 80 포트로 연결하고 443 포트로 SSL 리다이렉션 설정 (0) 2016.06.20 mkfs.ext4: command not found (RHEL 5.11) (0) 2016.06.15 The State of Containers and the Docker Ecosystem 2015 (0) 2016.06.11