Amazon Redshift 클러스터에서 일시적 연결 문제가 발생하는 이유는 무엇입니까?

최종 업데이트 날짜: 2020년 9월 21일

Amazon Redshift 클러스터에 연결하려고 할 때 일시적 연결 문제가 발생합니다. 이런 문제가 발생하는 이유는 무엇이며, 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

Amazon Redshift 클러스터에서 일시적 연결 문제는 다음과 같은 이유로 발생합니다.

  • 특정 IP 주소 또는 CIDR 블록에 대한 액세스 제한
  • 유지 관리 기간 업데이트
  • 노드 실패 또는 예약된 관리 작업
  • 암호화 키 교체
  • 활성 네트워크 연결이 너무 많음
  • 리더 노드의 높은 CPU 사용률
  • 클라이언트 측 연결 문제

해결 방법

특정 IP 주소 또는 CIDR 블록에 대한 액세스 제한

보안 그룹의 특정 IP 주소 또는 CIDR 블록에 대한 액세스가 제한되어 있는지 확인합니다. DHCP 구성 때문에 클라이언트 IP 주소가 변경되어 연결 문제가 발생할 수 있습니다. 또한 Amazon Redshift 클러스터에 탄력적 IP 주소를 사용하지 않는 경우 클러스터 노드의 AWS 관리형 IP가 변경될 수 있습니다. 예를 들어 클러스터를 삭제한 다음 스냅샷에서 다시 생성하거나 일시 중지된 클러스터를 재개할 때 IP 주소가 변경될 수 있습니다.

참고: 퍼블릭 IP 주소는 Amazon Redshift 클러스터가 삭제되고 다시 생성될 때 교체됩니다. 프라이빗 IP 주소는 노드가 교체될 때마다 변경됩니다.

네트워크 제한을 해결하려면 다음 방법을 고려하십시오.

  • 애플리케이션이 클러스터 엔드포인트 뒤에 퍼블릭 IP 주소를 캐싱하는 경우 Amazon Redshift 연결에 이 엔드포인트를 사용해야 합니다. 네트워크 연결의 안정성과 보안을 보장하려면 연결에 DNS 캐시를 사용하지 마십시오.
  • Amazon Redshift 클러스터에 탄력적 IP 주소를 사용하는 것이 가장 좋습니다. 탄력적 IP 주소를 사용하면 클라이언트가 클러스터에 연결하는 데 사용하는 IP 주소에 영향을 주지 않고 기본 구성을 변경할 수 있습니다. 이 방법은 실패 후 복구와 같은 상황에 도움이 될 수 있습니다. 이 방법은 실패 후 클러스터를 복구하는 경우에 유용합니다. 자세한 내용은 VPC에서 클러스터 관리를 참조하십시오.
  • 프라이빗 IP 주소를 사용하여 리더 노드 또는 컴퓨팅 노드에 연결하는 경우 새 IP 주소를 사용해야 합니다. 예를 들어 SSH 수집을 수행했거나 컴퓨팅 노드를 사용하는 EMR 구성이 있는 경우 새 IP 주소로 설정을 업데이트합니다. 노드 교체 후 새 노드에 새 프라이빗 IP 주소가 부여됩니다.

유지 관리 기간 업데이트

Amazon Redshift 클러스터의 유지 관리 기간을 확인합니다. 유지 관리 기간 중에는 Amazon Redshift 클러스터가 읽기 또는 쓰기 작업을 처리할 수 없습니다. 유지 관리 이벤트가 지정된 주에 예약된 경우 지정된 30분 유지 관리 기간 동안 시작됩니다. Amazon Redshift가 유지 관리를 수행하는 동안 진행 중인 쿼리 또는 기타 작업은 모두 종료됩니다. Amazon Redshift 콘솔에서 예약된 유지 관리 기간을 변경할 수 있습니다.

노드 실패 또는 예약된 관리 작업

Amazon Redshift 콘솔에서 실패 또는 예약된 관리 작업(예: 클러스터 크기 조정 또는 재부팅)의 이벤트(Events) 탭을 확인합니다.

하드웨어 장애가 있는 경우 짧은 기간 동안 Amazon Redshift를 사용할 수 없으므로 쿼리가 실패할 수 있습니다. 쿼리가 실패하면 다음과 같은 이벤트(Events) 설명이 표시됩니다.

"A hardware issue was detected on Amazon Redshift cluster [cluster name]. A replacement request was initiated at [time]." 

또는 계정 관리자가 Amazon Redshift 클러스터에서 재시작 또는 크기 조정 작업을 예약한 경우 일시적 연결 문제가 발생할 수 있습니다. 그러면 이벤트(Events) 설명에 다음이 표시됩니다.

"Cluster [cluster name] began restart at [time]."
"Cluster [cluster name] completed restart at [time]."
자세한 내용은 Amazon Redshift 이벤트 카테고리 및 이벤트 메시지를 참조하십시오.

암호화 키 교체

Amazon Redshift 클러스터에 대한 키 관리 설정을 확인하십시오. AWS Key Management Service(AWS KMS) 키 암호화 및 키 암호화 교체를 사용하고 있는지 확인합니다.

암호화 키가 활성화되고 해당 키가 교체되는 경우 이 기간 동안 Amazon Redshift 클러스터를 사용할 수 없습니다. 결과적으로 다음과 같은 오류 메시지가 나타납니다.

"pg_query(): Query failed: SSL SYSCALL error: EOF detected"

키 교체 빈도는 데이터 보안 및 표준에 대한 환경의 정책에 따라 다릅니다. 필요에 따라 또는 암호화된 키가 손상될 수 있는 경우 언제든지 키를 교체합니다. 또한 보안 및 클러스터 가용성 요구 사항을 모두 지원하는 키 관리 계획이 있어야 합니다.

활성 연결이 너무 많음

Amazon Redshift에서는 클러스터에 대한 모든 연결이 리더 노드로 전송되며 활성 연결에 대한 최대 한도가 있습니다. Amazon Redshift 클러스터에서 지원할 수 있는 최대 한도는 노드 수 대신 노드 유형에 따라 결정됩니다.

Amazon Redshift 클러스터에 활성 연결이 너무 많으면 다음과 같은 오류가 나타납니다.

"[Amazon](500310) Invalid operation: connection limit "500" exceeded for non-bootstrap users"
Amazon Redshift 클러스터에 연결하는 동안 유효하지 않은 작업 오류가 발생하면 연결 한도에 도달했음을 나타냅니다. Amazon CloudWatch의 데이터베이스 연결 지표를 보면 클러스터의 활성 연결 수를 확인할 수 있습니다.

데이터베이스 연결이 급증하는 경우 Amazon Redshift 클러스터에 유휴 연결이 여러 개 있을 수 있습니다. 유휴 연결 수를 확인 하려면 다음 SQL 쿼리를 실행하십시오.

trim(a.user_name) as user_name, a.usesysid, a.starttime, 
 datediff(s,a.starttime,sysdate) as session_dur, b.last_end, 
datediff(s,case when b.last_end is not null then b.last_end else 
a.starttime end,sysdate) idle_dur
 	FROM
	(select starttime,process,u.usesysid,user_name 
	from stv_sessions s, pg_user u 
	where 
	s.user_name = u.usename 
 	and u.usesysid>1
and process NOT IN (select pid from stv_inflight where userid>1 
union select pid from stv_recents where status != 'Done' and 
 userid>1)
	) a 
	LEFT OUTER JOIN (select 
userid,pid,max(endtime) as last_end from svl_statementtext where 
 userid>1 and sequence=0 group by 1,2) b ON a.usesysid = b.userid AND 
a.process = b.pid
	WHERE (b.last_end > a.starttime OR b.last_end is null)
	ORDER BY idle_dur;

출력은 다음 예와 같습니다.

 process | user_name  | usesysid |      starttime      | session_dur | last_end | idle_dur 
---------+------------+----------+---------------------+-------------+----------+----------
   14684 | myuser     |      100 | 2020-06-04 07:02:36 |           6 |          |        6
(1 row)

유휴 연결이 식별되면 다음 명령 구문을 사용하여 연결을 종료할 수 있습니다.

select pg_terminate_backend(process);

출력은 다음 예와 같습니다.

pg_terminate_backend 
----------------------
                    1
(1 row)

리더 노드의 높은 CPU 사용률

모든 클라이언트는 리더 노드를 사용하여 Amazon Redshift 클러스터에 연결합니다. 리더 노드의 CPU 사용률이 높으면 일시적 연결 문제가 발생할 수 있습니다.

Amazon Redshift 클러스터에 연결하려고 할 때 리더 노드의 CPU 사용률이 높으면 다음과 같은 오류 메시지가 나타납니다.

"Error setting/closing connection"

리더 노드의 CPU 사용률이 높은지 확인하려면 Amazon CloudWatch에서 CPU 사용률 지표를 확인하십시오. 자세한 내용은 Amazon Redshift 지표를 참조하십시오.

클라이언트 측 연결 문제

클라이언트(예: Workbench/J 또는 PostgreSQL)와 서버(Amazon Redshift 클러스터) 간의 연결 문제가 있는지 확인합니다. 클라이언트가 릴리스된 포트에서 요청을 보내려는 경우 클라이언트 쪽 연결 재설정이 일어날 수 있습니다. 따라서 연결 재설정으로 인한 일시적 연결 문제가 발생할 수 있습니다.

이러한 클라이언트 측 연결 문제를 방지하려면 다음 방법을 고려하십시오.

  • Amazon Redshift의 keepalive 기능을 사용하여 클라이언트와 서버 간의 연결이 올바르게 작동하는지 확인합니다. keepalive 기능을 사용하면 연결 링크가 끊어지는 것을 방지할 수 있습니다. keepalive 값을 확인하거나 구성하려면 TCP/IP 시간 초과 설정 변경DSN 시간 초과 설정 변경을 참조하십시오.
  • 쿼리가 실행 중인 것처럼 보이지만 SQL 클라이언트 도구에서 응답하지 않으면 최대 전환 단위(MTU)를 확인하십시오. 패킷 삭제로 인해 쿼리가 Amazon Redshift에 표시되지 않는 경우가 있습니다. 패킷 삭제는 두 IP 호스트 간의 네트워크 경로에 다른 MTU 크기가 있을 때 발생합니다. 패킷 삭제 문제를 관리하는 방법에 대한 자세한 내용은 쿼리가 중단된 것처럼 보이고 때때로 클러스터에 도달하지 못함을 참조하십시오.

이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?