쿼리가 중단되거나, 간혹 클러스터까지 전송되지 않습니다 - Amazon Redshift

쿼리가 중단되거나, 간혹 클러스터까지 전송되지 않습니다

문제 예

쿼리가 실행 중인 것으로 보이지만 SQL 클라이언트 도구에서는 중단되는 증 쿼리 완료에 대한 문제가 발생합니다. 간혹 시스템 테이블이나 Amazon Redshift 콘솔과 같은 클러스터에 쿼리가 표시되지 않기도 합니다.

가능한 해결책

이 문제는 패킷이 소실되어 발생할 수 있습니다. 이 경우 두 IP(Internet Protocol) 호스트 간 네트워크 경로에서 최대 전송 단위(MTU)의 크기 차이가 있습니다. 단일 이더넷 프레임으로 네트워크 연결을 통해 전송할 수 있는 패킷의 최대 크기(바이트)는 MTU의 크기에 따라 결정됩니다. AWS에서는 일부 Amazon EC2 인스턴스 유형이 1500MTU(이더넷 v2 프레임)를 지원하고, 그 밖에 9001MTU(TCP/IP 점보 프레임)를 지원하는 인스턴스 유형도 있습니다.

MTU 크기 차이에서 발생할 수 있는 문제에 대한 해결책으로서 다음 중 한 가지를 권장합니다.

  • 클러스터가 EC2-VPC 플랫폼을 사용하는 경우에는 Destination Unreachable을 반환하는 사용자 정의 ICMP(Internet Control Message Protocol) 인바운드 규칙으로 Amazon VPC 보안 그룹을 구성합니다. 이 규칙은 전송 호스트에게 네트워크 경로를 따라 최저 MTU 크기를 사용하도록 지시합니다. 이러한 접근법에 대한 자세한 내용은 ICMP "destination unreachable"을 허용하도록 보안 그룹 구성하기 섹션을 참조하세요.

  • 클러스터가 EC2-Classic 플랫폼을 사용하거나 ICMP 인바운드 규칙을 허용할 수 없는 경우 TCP/IP 점보 프레임을 비활성화하여 이더넷 v2 프레임을 사용하세요. 이러한 접근법에 대한 자세한 내용은 인스턴스의 MTU 구성 섹션을 참조하세요.

ICMP "destination unreachable"을 허용하도록 보안 그룹 구성하기

두 호스트 사이의 네트워크에서 MTU 크기에 차이가 있다면 먼저 네트워크 설정이 PMTUD(path MTU discovery)를 차단하지 않는지 확인해야 합니다. 수신 호스트가 ICMP 메시지 Destination Unreachable: fragmentation needed and DF set (ICMP Type 3, Code 4)과 함께 전송 호스트에 응답하기 위해서는 PMTUD가 차단되어서는 안 됩니다. 이 메시지는 전송 호스트에게 네트워크 경로를 따라 요청을 재전송하려면 최저 MTU 크기를 사용하라는 의미입니다. 이러한 협상이 없으면 수신 호스트가 허용할 수 없을 만큼 요청이 너무 많아져서 패킷 손실이 발생할 수 있습니다. 이 ICMP 메시지에 대한 자세한 내용은 IETF(Internet Engineering Task Force) 웹 사이트의 RFC792 섹션을 참조하세요.

Amazon VPC 보안 그룹에 이 ICMP 인바운드 규칙을 명시적으로 구성하지 않으면 PMTUD가 차단됩니다. AWS에서는 보안 그룹이 인바운드 및 아웃바운드 트래픽에 대한 규칙을 인스턴스로 지정하는 가상 방화벽입니다. Amazon Redshift 클러스터 보안 그룹에 대한 자세한 내용은 Amazon Redshift 보안 그룹 섹션을 참조하세요. EC2-VPC 플랫폼을 사용하는 클러스터의 경우에는 Amazon Redshift가 VPC 보안 그룹을 사용하여 클러스터로 전송되는 트래픽을 허용하거나 거부합니다. 기본적으로 보안 그룹은 잠겨있기 때문에 인바운드 트래픽을 모두 거부합니다. EC2-Classic 또는 EC2-VPC 인스턴스에 대한 인바운드 및 아웃바운드 규칙을 설정하는 방법에 대한 자세한 내용은 Amazon EC2 사용 설명서의 EC2-Classic과 VPC의 인스턴스 간 차이점을 참조하세요.

VPC 보안 그룹에 규칙을 추가하는 방법에 대한 자세한 내용은 VPC 보안 그룹 섹션을 참조하세요. 이 규칙에 필요한 특정 PMTUD 설정에 대한 자세한 내용은 Amazon EC2 사용 설명서의 경로 MTU 검색을 참조하세요.

인스턴스의 MTU 구성

클러스터가 EC2-Classic 플랫폼을 사용하거나 인바운드 트래픽에 대한 사용자 지정 ICMP 규칙을 허용할 수 없는 경우가 있습니다. 이러한 경우 Amazon Redshift 클러스터에 연결하는 EC2 인스턴스의 네트워크 인터페이스(NIC)에서 MTU를 1500으로 조정하는 것이 좋습니다. 이렇게 조정하면 TCP/IP 점포 프레임을 비활성화하여 동일한 패킷 크기를 계속해서 사용할 수 있습니다. 하지만 Amazon Redshift 연결에 그치지 않고 인스턴스 전체의 최대 네트워크 처리 속도까지 떨어뜨리는 단점도 있습니다. 자세한 내용은 다음 절차를 참조하십시오.

Microsoft Windows 운영 체제에서 MTU를 설정하려면

클라이언트가 Microsoft Windows 운영 체제 기반인 경우에는 netsh 명령을 사용하여 이더넷 어댑터의 MTU 값을 살펴보거나 설정할 수 있습니다.

  1. 다음 명령을 실행하여 현재 MTU 값을 결정합니다.

    netsh interface ipv4 show subinterfaces
  2. 출력 화면에서 MTU 어댑터의 Ethernet 값을 살펴봅니다.

  3. 이 값이 1500이 아닌 경우에는 다음 명령을 실행하여 설정합니다.

    netsh interface ipv4 set subinterface "Ethernet" mtu=1500 store=persistent

    이 값을 설정한 후에는 컴퓨터를 다시 시작해야 변경 사항이 적용됩니다.

Linux 운영 체제에서 MTU를 설정하려면

클라이언트가 Linux 운영 체제에서 작동하는 경우 ip 명령을 사용하여 MTU 값을 검토하고 설정할 수 있습니다.

  1. 다음 명령을 실행하여 현재 MTU 값을 결정합니다.

    $ ip link show eth0
  2. 출력 결과에서 mtu 다음의 값을 검토합니다.

  3. 이 값이 1500이 아닌 경우에는 다음 명령을 실행하여 설정합니다.

    $ sudo ip link set dev eth0 mtu 1500
Mac 운영 체제에서 MTU를 설정하려면
  • How to change the MTU for troubleshooting purposes에 대한 MacOS 지원 사이트의 지침을 따릅니다. 자세한 내용은 지원 사이트를 참조하세요.