다음을 통해 공유


HPC Cache 클라이언트 트래픽 부하 분산

이 문서에서는 클라이언트 트래픽을 Azure HPC Cache의 모든 탑재 지점으로 고르게 분산하는 몇 가지 기본 방법에 대해 설명합니다.

모든 HPC Cache에는 3개 이상의 서로 다른 IP 주소가 있으며, 처리량 값이 더 큰 캐시에는 최대 12개의 IP 주소가 있을 수 있습니다. Azure HPC Cache의 모든 이점을 얻으려면 모든 IP 주소를 사용해야 합니다.

다음과 같이 클라이언트 탑재 부하를 분산하기 위한 다양한 옵션이 있습니다.

  • 각 클라이언트에 대해 다른 탑재 IP를 수동으로 선택
  • 클라이언트 탑재 스크립트에 IP 주소 회전 포함
  • 클라이언트 요청을 사용 가능한 모든 주소 간에 자동으로 라우팅하도록 DNS 시스템 구성(라운드 로빈 DNS)

사용자에게 적합한 부하 분산 시스템은 워크플로의 복잡성, 캐시의 IP 주소 수 및 기타 여러 요인에 따라 달라집니다. 가장 적합한 방법을 결정하는 데 도움이 필요한 경우 Azure 관리자에게 문의하세요.

수동으로 IP 주소 할당

캐시의 탑재 IP 주소는 Azure Portal의 캐시 개요탑재 지침 페이지와 Azure CLI 또는 PowerShell을 사용하여 캐시를 만들 때 출력되는 성공 메시지에 표시됩니다.

탑재 지침 페이지를 사용하여 각 클라이언트에 대한 사용자 지정 탑재 명령을 생성할 수 있습니다. 여러 명령을 만들 때 모든 캐시 탑재 주소 값을 선택합니다.

자세한 내용은 Azure HPC Cache 탑재를 참조하세요.

스크립팅된 부하 분산 사용

클라이언트 탑재를 사용 가능한 IP 주소 간에 프로그래밍 방식으로 회전하는 여러 가지 방법이 있습니다. 다음은 두 가지 예입니다.

cksum 탑재 명령 스크립트 예제

다음 탑재 명령 예제에서는 cksum 해시 함수 및 클라이언트 호스트 이름을 사용하여 HPC Cache에서 클라이언트 연결을 사용 가능한 모든 IP 주소 간에 자동으로 배포합니다. 모든 클라이언트 컴퓨터에 고유한 호스트 이름이 있는 경우 각 클라이언트에서 이 명령을 실행하여 사용 가능한 모든 탑재 지점이 사용되는지 확인할 수 있습니다.

mount -o hard,proto=tcp,mountproto=tcp,retry=30 $(X=(10.0.0.{1..3});echo ${X[$(($(hostname|cksum|cut -f 1 -d ' ')%3))]}):/${NAMESPACE} /mnt

워크플로에서 이 예제를 사용하려면 다음 용어를 사용자 지정합니다.

  • X= 식에서 공백으로 구분된 캐시의 모든 탑재 주소 목록을 정렬된 순서로 사용합니다.

    (X=(10.0.0.{7..9}) 식은 X 변수를 탑재 주소 세트({10.0.0.7, 10.0.0.8, 10.0.0.9})로 설정합니다. 캐시의 기본 IP 주소와 캐시 개요 페이지에 표시된 정확한 주소를 사용합니다. 주소가 연속적이지 않으면 모든 주소를 숫자 순서로 나열합니다.

  • %3 항에서는 캐시에 있는 실제 탑재 IP 주소 수(일반적으로 3, 6, 9 또는 12)를 사용합니다.

    예를 들어 캐시에서 9개의 클라이언트 탑재 IP 주소를 공개하는 경우 %9를 사용합니다.

  • ${NAMESPACE} 식의 경우 클라이언트에서 액세스할 스토리지 대상 네임스페이스 경로를 사용합니다.

    정의한 변수(예: NAMESPACE)를 사용하거나 리터럴 값을 대신 전달할 수 있습니다.

    이 섹션의 끝에 있는 명령 예제에서는 리터럴 값(/blob-target-1)을 네임스페이스 경로에 사용합니다.

  • 클라이언트 컴퓨터에서 사용자 지정 로컬 경로를 사용하려면 /mnt 값을 원하는 경로로 변경합니다.

채워진 클라이언트 탑재 명령의 예제는 다음과 같습니다.

mount -o hard,proto=tcp,mountproto=tcp,retry=30 $(X=(10.7.0.{1..3});echo ${X[$(($(hostname|cksum|cut -f 1 -d ' ')%3))]}):/blob-target-1 /hpc-cache/blob1 

라운드 로빈 함수 예제

다음 코드 예제에서는 클라이언트 IP 주소를 무작위 요소로 사용하여 클라이언트를 HPC Cache의 모든 사용 가능한 IP 주소에 배포합니다.

function mount_round_robin() {

  # to ensure the clients are spread out somewhat evenly the default
  # mount point is based on this client's IP octet4 % number of HPC cache mount IPs.

  declare -a MOUNT_IPS="($(echo ${NFS_IP_CSV} | sed "s/,/ /g"))"
  HASH=$(hostname | cksum | cut -f 1 -d ' ')
  DEFAULT_MOUNT_INDEX=$((${HASH} % ${#MOUNT_IPS[@]}))
  ROUND_ROBIN_IP=${MOUNT_IPS[${DEFAULT_MOUNT_INDEX}]}

  DEFAULT_MOUNT_POINT="${BASE_DIR}/default"

  # no need to write again if it is already there
  if ! grep --quiet "${DEFAULT_MOUNT_POINT}" /etc/fstab; then
      echo "${ROUND_ROBIN_IP}:${NFS_PATH} ${DEFAULT_MOUNT_POINT} nfs hard,proto=tcp,mountproto=tcp,retry=30 0 0" >> /etc/fstab
      mkdir -p "${DEFAULT_MOUNT_POINT}"
      chown nfsnobody:nfsnobody "${DEFAULT_MOUNT_POINT}"
  fi
  if ! grep -qs "${DEFAULT_MOUNT_POINT} " /proc/mounts; then
      retrycmd_if_failure 12 20 mount "${DEFAULT_MOUNT_POINT}" || exit 1
  fi
}

DNS 부하 분산 사용

이 섹션에서는 클라이언트 연결을 Azure HPC Cache의 모든 탑재 지점에 배포하도록 DNS 시스템을 구성하는 기본 사항에 대해 설명합니다. 이 방법은 각 클라이언트에서 생성하는 트래픽 양을 고려하지 않지만, 클라이언트가 한두 개만 사용하는 대신 캐시의 모든 인터페이스에 고르게 분산하도록 합니다.

이 문서에는 Azure 환경에서 클라이언트에 대한 DNS 서버를 설정하고 관리하기 위한 지침이 포함되어 있지 않습니다.

NFS 프로토콜 및 IP 주소를 사용하여 클라이언트를 탑재하기 위해 DNS가 필요하지 않습니다. IP 주소 대신 도메인 이름을 사용하여 하드웨어 NAS 시스템에 연결하려거나 특정 고급 프로토콜 설정이 워크플로에 포함된 경우에는 DNS가 필요합니다.

주소를 클라이언트에 배포하는 데 사용하는 DNS 시스템은 HPC Cache에서 액세스할 필요가 없습니다. 경우에 따라 사용자 지정 DNS 시스템을 캐시 자체에 사용하려고 할 수도 있지만, 해당 시스템을 구성하는 것은 이러한 종류의 클라이언트 라운드 로빈 시스템을 설정하는 것보다 훨씬 더 복잡합니다. HPC Cache의 DNS 서버를 사용자 지정 시스템으로 변경하려는 경우 Azure 지원에 문의해야 합니다.

캐시 탑재 지점에 대한 라운드 로빈 배포 구성

라운드 로빈 DNS(RRDNS) 시스템은 클라이언트 요청을 여러 주소 간에 자동으로 라우팅합니다.

이 시스템을 설정하려면 HPC Cache의 주 도메인 주소에 대한 탑재 요청을 받을 때 트래픽을 HPC Cache 시스템의 모든 탑재 지점 간에 할당하도록 DNS 서버의 구성 파일을 사용자 지정해야 합니다. 클라이언트는 해당 도메인 이름을 서버 인수로 사용하여 HPC Cache를 탑재하고 자동으로 다음 탑재 IP로 라우팅됩니다.

RRDNS를 구성하는 두 가지 주요 단계는 다음과 같습니다.

  1. DNS 서버의 named.conf 파일을 수정하여 HPC Cache에 대한 쿼리의 순환 순서를 설정합니다. 이 옵션을 선택하면 서버에서 사용 가능한 모든 IP 값을 순환합니다. 다음과 같은 명령문을 추가합니다.

    options {
        rrset-order {
            class IN A name "hpccache.contoso.com" order cyclic;
        };
    };
    
  2. 다음 예제와 같이 사용 가능한 각 IP 주소에 대해 A 레코드 및 포인터(PTR) 레코드를 구성합니다.

    이러한 nsupdate 명령에서는 도메인 이름이 hpccache.contoso.com이고 3개의 탑재 주소(10.0.0.10, 10.0.0.11 및 10.0.0.12)가 있는 HPC Cache에 대해 DNS를 올바르게 구성하는 예제를 제공합니다.

    update add hpccache.contoso.com. 86400 A 10.0.0.10
    update add hpccache.contoso.com. 86400 A 10.0.0.11
    update add hpccache.contoso.com. 86400 A 10.0.0.12
    update add client-IP-10.contoso.com. 86400 A 10.0.0.10
    update add client-IP-11.contoso.com. 86400 A 10.0.0.11
    update add client-IP-12.contoso.com. 86400 A 10.0.0.12
    update add 10.0.0.10.in-addr.arpa. 86400 PTR client-IP-10.contoso.com
    update add 11.0.0.10.in-addr.arpa. 86400 PTR client-IP-11.contoso.com
    update add 12.0.0.10.in-addr.arpa. 86400 PTR client-IP-12.contoso.com
    

    이러한 명령은 각 HPC Cache의 탑재 주소에 대한 A 레코드를 만들고, 역방향 DNS 검사를 적절하게 지원하도록 포인터 레코드도 설정합니다.

    아래 다이어그램은 이 구성의 기본 구조를 보여줍니다.

    Diagram showing client mount point DNS configuration.

RRDNS 시스템이 구성되면 탑재 명령에서 이를 사용하여 HPC Cache 주소를 확인하도록 클라이언트 컴퓨터에 지시합니다.

다음 단계