Amazon EC2 스팟 인스턴스 작업 - FSx for Lustre

Amazon EC2 스팟 인스턴스 작업

FSx for Lustre를 EC2 스팟 인스턴스와 함께 사용하면 Amazon EC2 비용을 크게 낮출 수 있습니다. 스팟 인스턴스는 온디맨드 가격보다 저렴한 비용으로 제공되는 미사용 EC2 인스턴스입니다. Amazon EC2는 스팟 인스턴스에 대한 수요가 증가하거나 스팟 인스턴스의 공급이 감소하거나 스팟 가격이 최고가를 초과하는 경우 스팟 인스턴스를 중단할 수 있습니다.

Amazon EC2는 스팟 인스턴스를 중단할 때 스팟 인스턴스 중단 공지를 보내 중단 2분 전에 이를 인스턴스에 경고합니다. 자세한 내용은 Amazon EC2 사용 설명서스팟 인스턴스를 참조하세요.

Amazon FSx 파일 시스템이 EC2 스팟 인스턴스 중단의 영향을 받지 않도록 EC2 스팟 인스턴스를 종료하거나 최대 절전 모드로 전환하기 전에 Amazon FSx 파일 시스템을 마운트 해제하는 것이 좋습니다. 자세한 내용은 파일 시스템 탑재 해제 섹션을 참조하세요.

Amazon EC2 스팟 인스턴스 중단 처리

FSx for Lustre는 서버와 클라이언트 인스턴스가 협력하여 성능이 뛰어나고 안정적인 파일 시스템을 제공하는 분산 파일 시스템입니다. 클라이언트와 서버 인스턴스 모두에서 분산되고 일관된 상태를 유지합니다. FSx for Lustre 서버는 클라이언트가 I/O를 활발히 수행하고 파일 시스템 데이터를 캐싱하는 동안 임시 액세스 권한을 클라이언트에 위임합니다. 서버가 임시 액세스 권한을 취소하도록 요청하면 클라이언트는 짧은 시간 내에 응답할 것으로 예상됩니다. 오작동하는 클라이언트로부터 파일 시스템을 보호하기 위해 서버는 몇 분 후에도 응답하지 않는 Lustre 클라이언트를 제거할 수 있습니다. 응답하지 않는 클라이언트가 서버 요청에 응답할 때까지 몇 분 동안 기다릴 필요가 없도록 하려면 EC2 스팟 인스턴스를 종료하기 전에 Lustre 클라이언트를 완전히 마운트 해제하는 것이 중요합니다.

EC2 스팟은 인스턴스를 종료하기 2분 전에 종료 알림을 보냅니다. EC2 스팟 인스턴스를 종료하기 전에 Lustre 클라이언트를 완전히 마운트 해제하는 프로세스를 자동화하는 것이 좋습니다.

예 - 종료된 EC2 스팟 인스턴스를 완전히 마운트 해제하기 위한 스크립트

이 예제 스크립트는 다음을 수행하여 종료된 EC2 스팟 인스턴스를 완전히 마운트 해제합니다.

  • 스팟 종료 알림에 유의하세요.

  • 종료 통지를 받는 경우

    • 파일 시스템에 액세스하는 애플리케이션을 중지합니다.

    • 인스턴스가 종료되기 전에 파일 시스템을 마운트 해제합니다.

특히 애플리케이션을 정상적으로 종료하는 경우 필요에 따라 스크립트를 조정할 수 있습니다. 스팟 인스턴스 중단 처리 모범 사례에 대한 자세한 내용은 EC2 스팟 인스턴스 중단 처리 모범 사례를 참조하세요.

#!/bin/bash # TODO: Specify below the FSx mount point you are using *FSXPATH=/fsx* cd / TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") if [ "$?" -ne 0 ]; then echo "Error running 'curl' command" >&2 exit 1 fi # Periodically check for termination while sleep 5 do HTTP_CODE=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -s -w %{http_code} -o /dev/null http://169.254.169.254/latest/meta-data/spot/instance-action) if [[ "$HTTP_CODE" -eq 401 ]] ; then # Refreshing Authentication Token TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") continue elif [[ "$HTTP_CODE" -ne 200 ]] ; then # If the return code is not 200, the instance is not going to be interrupted continue fi echo "Instance is getting terminated. Clean and unmount '$FSXPATH' ..." curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/spot/instance-action echo # Gracefully stop applications accessing the filesystem # # TODO*: Replace with the proper command to stop your application if possible* # Kill every process still accessing Lustre filesystem echo "Kill every process still accessing Lustre filesystem..." fuser -kMm -TERM "${FSXPATH}"; sleep 2 fuser -kMm -KILL "${FSXPATH}"; sleep 2 # Unmount FSx For Lustre filesystem if ! umount -c "${FSXPATH}"; then echo "Error unmounting '$FSXPATH'. Processes accessing it:" >&2 lsof "${FSXPATH}" echo "Retrying..." continue fi # Start a graceful shutdown of the host shutdown now done