ySQL 데이터베이스에서 Syn Flooding이 발생하면
Syn 공격은 응용 서버에서 흔히 볼 수 있지만 데이터베이스 서버는 내부 네트워크에서 유사한 공격을 만나기 어려울 것이다. 그러나 때때로 응용 프로그램이 데이터베이스와 연결 자세가 정확하지 않으면 데이터베이스 쪽에서도 Syn 공격으로 여겨지고 연결 구축을 거부할 수 있다.
[문제 설명]
데이터베이스 돌발적인 링크 거부, 오류 신고, 문제가 발생한 시간에 데이터베이스 서버의 운영체제 로그, 즉/var/log/messages에서 다음과 같은 오류 정보를 볼 수 있습니다.
kernel: possible SYN flooding on port 3306. Sending cookies.
[문제 분석]
문제가 발생한 점에서 데이터베이스 모니터링 지표를 보면Threads Connected라는 지표가 증가했다.이것도 뚜렷하다. 데이터베이스에 있어 Syn Flooding은 응용 프로그램이 데이터베이스에 돌발적으로 연결을 시작하고 운영체제가 처리하지 못하기 때문에 Syn Flooding에 보고한다. 데이터베이스의 성능 지표를 보면 연결 수는 돌발적인 증가가 있을 것이다.이런 돌발적인 성장이 어떻게 일어났는지 분석해 봉우리를 깎고 골짜기를 메워 연결을 안정시키는 방안이 필요하다.
[솔루션]
데이터베이스 서버에서 다음과 같은 조정을 한다. 이 조정은 TCP 반연결 버퍼를 증가시키고 기본값은 2048이며 우리는 8192로 조정하여 시스템의 돌발 압력을 증가시킨다는 뜻이다.Tcp_syn_retires 및 Tcp_synack_retires 기본값은 5입니다. 즉, 서버 측에서 다섯 번의 패키지를 보내야 재시도를 중지할 수 있습니다. 우리는 이 매개 변수를 2로 조정합니다.캐시 연결 수를 줄이기 위해 오류가 발생한 패키지를 최대한 빨리 오류를 발생시킵니다.
echo 8192 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 2 > /proc/sys/net/ipv4/tcp_syn_retries
echo 2 > /proc/sys/net/ipv4/tcp_synack_retries
이 매개 변수는 즉시 효력이 발생하여 다시 시작할 필요가 없다.물론 서버가 다시 시작되면 이 매개 변수들도 기본값으로 되돌아갑니다.이 조정을 통해 데이터베이스 측의 압력 저항 능력이 강화되었지만 문제를 완전히 해결하지는 못했다.
우리는 클라이언트에서도 상응하는 조정을 한다.
데이터베이스의 연결 수 압력을 줄이기 위해 일반적으로 우리는 연결 탱크를 다음과 같이 구성하는 것을 권장합니다.
testWhileIdle="false"。
minIdle="0"。
maxAge="30000"。 。
initialSize="1"。
timeBetweenEvictionRunsMillis="5000"。 ( )
현재 장면에 대해 우리는 minIdle이라는 매개 변수를 0에서 5로 조정하는 것을 건의합니다.연결 탱크에 평소에 5개의 빈 연결이 존재하도록 하면 데이터베이스에 요청할 때 이 5개의 빈 연결을 먼저 사용합니다.봉우리를 깎아 곡식을 메우는 작용에 이르다.물론 부작용은 데이터베이스의 평소 연결 수가 늘어나는 것이다.구체적으로 얼마나 적절하게 조정해야 하는지는 실제 데이터베이스 연결 부하 상황을 결합시켜야 한다.대하다NET 프로그램, 상응하는 연결 탱크 매개 변수도 조정할 수 있습니다: minPoolSize라는 매개 변수를 적당히 수정할 수도 있고 5로 조정할 수도 있습니다.
이 조정을 통해 기본적으로 대부분의 데이터베이스 Syn Flooding 문제가 해결될 수 있다.
물론 이것들은 모두 조정 수단이기 때문에 시스템을 약간 개선할 수밖에 없다.압력 저항력을 높이다.최종 분석은 연결 압력이 어디에서 오는지 봐야 한다.그리고 왜 데이터베이스에 대량으로 연결되어야 하는지.이런 돌발 장면에 대해 데이터베이스로 적합한지 여부.대안은 앞에서 Redis로 버퍼를 추가하는 것입니다.데이터베이스에 대한 갑작스런 연결 요청을 피하다.이것은 응용의 개조와 관련된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.