내 RDS 인스턴스가 EC2 인스턴스로 인해 플러딩되고 있지만 EC2 인스턴스는 원활하게 실행되고 있습니다.

내 RDS 인스턴스가 EC2 인스턴스로 인해 플러딩되고 있지만 EC2 인스턴스는 원활하게 실행되고 있습니다.

AWS 콘솔에 다소 복잡한 설정이 있습니다.

  1. 저는 CRM이라고 부르는 LAMP가 설치된 지역 A에 EC2 인스턴스를 가지고 있습니다.
  2. 내 CRM에 대해 동일한 지역 A에 내가 보유한 주문/클라이언트의 정보가 포함된 RDS가 있습니다.
  3. LAMP가 설치된 지역 B에 EC2 인스턴스가 있는데 이를 "장바구니"라고 부르겠습니다.
  4. 내 장바구니에 대한 데이터베이스가 있는 동일한 지역 B에 RDS가 있습니다.
  5. 다소 사소한 세부 사항(제 생각에는): C와 D 지역에 보조 "장바구니"인 LAMP가 설치된 두 개의 다른 EC2 인스턴스가 있습니다. 또한 자체 RDS 인스턴스도 있습니다.

두 개의 기본 EC2 서버는 CURL을 통한 호출을 통해 서로 연결됩니다. 따라서 EC2 서버 B에 주문이 들어오면 주문 삽입, 클라이언트 정보 추가 등을 위해 EC2 서버 A에 컬 호출이 이루어집니다. 또한 서버 A는 가격을 업데이트하기 위해 서버 B에 CURL 호출을 할 수 있습니다. 등. 서버 B는 서버 A에 대한 CURL 호출을 수행하여 도시의 현재 배송 가격을 얻을 수 있습니다.

이제 제가 겪고 있는 문제는 어제 오전 4시경에 RDS B 인스턴스에 연결이 넘쳐나기 시작했고 동시 연결 한도인 50개에 도달했다는 것입니다. 그래서 t2.small에서 t2.medium으로 업그레이드했고 이제 90개의 동시 연결이 가능해졌지만 문제는 지속되어 몇 분에서 30분마다 어디에서나 90개의 연결 제한에 지속적으로 도달합니다.

EC2 A 인스턴스도 업그레이드했지만 이번에도 아무런 변화가 없습니다. RDS B 인스턴스에서 다음을 실행하면 일반적으로 6~10개의 스레드를 얻지만 때때로 급증하기 시작하고 그렇게 되면 일반적으로 1~2분 내에 90개의 연결에 도달합니다.

'Threads_connected'와 같은 상태 표시;

+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 6     |
+-------------------+-------+
1 row in set (0.01 sec)

RDS B 인스턴스에서 다음 명령을 실행하면 동시 연결 제한 90개에 도달하면 연결이 끊어지는 것으로 표시됩니다.

'Conn%'와 같은 상태를 표시합니다.

+-----------------------------------+--------+
| Variable_name                     | Value  |
+-----------------------------------+--------+
| Connection_errors_accept          | 0      |
| Connection_errors_internal        | 0      |
| Connection_errors_max_connections | 6856   |
| Connection_errors_peer_address    | 0      |
| Connection_errors_select          | 0      |
| Connection_errors_tcpwrap         | 0      |
| Connections                       | 123258 |
+-----------------------------------+--------+
7 rows in set (0.03 sec)

RDS B에서 90개의 연결에 도달할 때마다 EC2 A 인스턴스가 크롤링 속도를 늦추고 RDS A 인스턴스에서 연결이 급증합니다. 그리고 너무 많은 연결로 인해 mysqli 연결이 실패했기 때문에 EC2 B 인스턴스가 HTTP 500 오류를 보냅니다.

마지막으로 RDS A 또는 RDS B 인스턴스에서 다음을 실행하면 다음이 표시됩니다.많이잠자는 명령은 있지만 쿼리하는 경우는 거의 없습니다.

전체 프로세스 목록 표시;

제가 생각해낸 임시 "솔루션"은 EC2 A 인스턴스에서 Apache 서비스를 다시 시작하는 것입니다. 그렇게 하면 RDS A와 B의 모든 프로세스가 몇 초 내에 정리됩니다.

어떻게 이런 일이 갑자기 일어나기 시작할 수 있는지, 그리고 인스턴스의 성능을 높인 후에도 어떻게 이런 일이 계속 발생할 수 있는지 이해가 되지 않습니다. 다음에 어디를 봐야할지 아이디어가 없습니다. 내가 알 수 있는 유일한 "문제"는 RDS 연결 제한에 도달했다는 것입니다. EC2 로드 평균은 매우 좋습니다(현재 0.02). 지난 주에 제가 생각할 수 있는 어떤 코드도 변경하지 않았습니다.

답변1

약 8시간의 검색 끝에 마침내 이 문제를 발견했습니다. 프리랜서가 내 웹사이트 중 하나에 악성 코드를 도입하여 mysql 연결을 닫지 못했습니다.

이것이 다른 누군가에게 도움이 되기를 바랍니다. 비슷한 상황이 발생하는 경우 다음을 사용하여 최근에 수정된 파일이 있는지 서버를 확인하세요.

find . -type f -mtime -$n

$n문제가 발생하기 시작한 일수를 나타내는 정수는 어디에 있습니까? 변경이 발생할 것으로 예상되는 디렉토리에서 해당 명령을 실행하십시오.

관련 정보