Azure VM의 주의사항 및 트러블슛팅 케이스

Azure VM의 주의사항 및 트러블 슛팅 케이스

Azure VM을 사용할 경우 옵션 하나하나의 동작 방식과 이러한 액션이 VM에 미치는 영향, 발생할 수 있는 다운타임 등 다양한 주의점들을 다뤄봤습니다. 또, Azure VM을 사용할 때 발생할 수 있는 에러케이스를 어떻게 트러블 슛 했는지에 대한 내용을 다뤄봤습니다.

가용성 집합에 묶인 가상머신들의 사이즈 재조정

VM을 사용하다보면 Scale Up/Down을 할 경우가 많습니다, 특정 이벤트가 있는 날은 가상머신의 스펙을 올리거나, 스케일 아웃에 대한 대비를 하게 마련입니다. Azure는 가상머신을 생성한 이후에도 가상머신의 사이즈를 자유롭게 선택 가능하지만, 발생할 수 있는 예외케이스가 존재합니다.

가용성 집합은 가상머신의 고가용성을 위해 UD/FD의 2개의 논리적 도메인에 가상머신을 배치하고 하나의 그룹으로 묶는 옵션입니다. 이러한 옵션을 사용중인 가상머신의 사이즈를 재조정 할 경우, 대부분 큰 이슈없이 재조정이 가능하지만, 만약, 해당 가상머신이 호스팅되고 있는 Azure 호스트서버에 재조정에 사용된 사이즈 할당량이 부족하다면, 호스트서버의 이동이 필요하게 됩니다. 이때, 가용성집합은 서로다른 호스트서버에 존재하면 안되기 때문에, 사이즈 조정을 한 가상머신이 사이즈를 할당받지 못하고 Pending될 수 있습니다. 이러한 만약의 상태를 대비해 가용성집합의 모든 가상머신을 종료한뒤 사이즈 재조정을 하는것이 안전하다고 볼 수 있습니다. (다만, 이러한 케이스는 매우 드물게 발생합니다.)

리눅스 가상머신 커널 패닉

Azure VM의 리눅스 머신 사용시 커널 패닉 상황이 발생할 수 있습니다. 이 경우 당황하지 말고, 포털의 serial console 기능을 활성화 하여 싱글모드 진입을 할 수 있습니다.
(serial console 기능을 활성화 하기 위해선 사용자가 생성한 storage account가 필요합니다)
커널 패닉이 발생하는 이유는 다음과 같은 예시가 있습니다

  1. 잘못된 fstab 기입
    fstab에 기입되어 있는 UUID 값이 실제 데이터 디스크와 다르거나, 가상머신 OS디스크 스냅샷으로 가상머신 복제시 데이터디스크가 같이 오지 않는 상황에서 fstab의 오류로 인해 종종 발생할 수 있습니다.
  2. 자동적인 커널 교체
    사용자 임의의 커널을 설치해두었을 경우 재부팅시 자동으로 해당 커널이 선택되어 부팅될 수 있습니다. 이때, 해당 커널이 비정상적일 경우 커널 패닉에 빠지게 됩니다.

DHCP Client IP 할당실패

Ubuntu OS를 사용중인 VM이 Azure Maintenance에 의해 재배포 및 재부팅이 될 경우, DHCP Client IP 할당에 실패하여 NIC가 사설 IP를 할당받지 못하고 부팅이 되는 상황이 발생할 수 있습니다.
NIC에 사설 IP가 없기 때문에, 내부 웹서버라든지, 서비스는 구동중이지만, 외부와 통신할 방법이 없어 서비스 장애상황이 발생하게 됩니다.

증상

  • 내부 서비스나 다른 기타 여러가지 요소는 정상이지만, 외부와의 통신이 불가능함
  • DNS Resolving 실패
  • ifconfig 확인시 NIC 정보 없음

원인

이 이슈는 Ubuntu의 Well-Known Issue라고 합니다. 주요 원인으로는 Ubuntu를 데스크톱 모드로 사용하면서 x-RDP를 통해 접속하여 사용하였다면, 재부팅 과정에서 DHCP Client IP 할당 실패와 같은 버그가 종종 일어난다고 합니다.
즉, Ubuntu 사용 시 Ubuntu Desktop Package 구축하여 사용 시 발생할 수 있는 버그이며, 이전 구축 이력이 있다면 재부팅 시 발생할 수 있는 버그입니다.

해결

  1. 직렬콘솔로 ifconfig 확인, NIC 정보가 없음을 확인
  2. NIC 리셋(포털) 후 인식 불가할 경우 NIC 추가 및 교체
  3. OS에서 NIC 인식 후 아래 dhcp 명령을 통해 수동으로 IP 재할당
# dhcpclient 프로그램 존재 시
ifconfig
dhclient -v
ifconfig

# dhcpclient 프로그램 미 존재 시
sudo su -
dpkg -l | grep -i dhcp*
apt-get install --reinstall isc-dhcp-client* -y
dhclient -v
ip a

Scheduled Event

Azure VM의 호스트 서버 이벤트로 인해 가상머신에 발생하는 이벤트 혹은 사용자가 트리거한 이벤트에 대한 내용을 미리 알 수 있습니다.

이렇게 VM에 영향이 가는 이벤트를 사전에 알기 위해선 Azure의 IMDS(Azure Instance Metadata Service) 서비스를 사용해야 합니다.

이벤트의 종류로는 호스트 서버의 유지관리 이벤트로 인한 가상머신 freeze, 호스트 서버 이슈로 인한 가상머신 중지 및 재배포, 사용자명령으로 인한 종료, 재시작 등등이 있습니다만 보통 freeze 현상을 사전에 알기 위해 모니터링 하게 됩니다.
(Freeze: 몇 초 동안 Virtual Machine을 일시 중지하도록 예약됩니다. CPU와 네트워크 연결이 일시 중단될 수 있지만 메모리나 열려 있는 파일에는 영향을 미치지 않습니다.)

freeze 이벤트는 아주 미세한 순간 머신이 잠시 멈추는 현상으로서 웹서비스와 같은 일반적인 서비스에는 큰 영향이 없지만, 게임서버 처럼 실시간으로 여려 유저가 게임을 하는 서버에선 영향을 느낄 수 있으므로 주의가 필요합니다. 보통 이때문에 게임서버는 dedicated host 서버(호스터서버를 지정해서 사용함으로써 호스트서버의 유지관리 이벤트 주기를 사용자가 조정)를 사용하게 됩니다.

원리는 간단하게 VM에서 호스트서버(169.254.169.254)로 폴링 방식의 이벤트 체크를 합니다. 이때 에빈트가 예정되어 있다면, reponse로 정보를 받아 볼 수 있습니다. 보통 15분 정도의 사전 알림을 받을 수 있지만, 짧은경우 1분 미만이 될 수도 있습니다.
예시)

curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
{
    "DocumentIncarnation": {IncarnationID},
    "Events": [
        {
            "EventId": {eventID},
            "EventType": "Reboot" | "Redeploy" | "Freeze" | "Preempt" | "Terminate",
            "ResourceType": "VirtualMachine",
            "Resources": [{resourceName}],
            "EventStatus": "Scheduled" | "Started",
            "NotBefore": {timeInUTC},       
            "Description": {eventDescription},
            "EventSource" : "Platform" | "User",
            "DurationInSeconds" : {timeInSeconds},
        }
    ]
}

이런 이벤트 정보를 모니터링 하기 위해서 VM내 Cronjob을 생성하거나, Telegraf를 사용하여 스케쥴 이벤트를 모니터링 할 수 있습니다.

마치며

이 외에도 다양한 기능적 주의사항과 에러케이스가 발생할 수 있습니다. 클라우드에서 워크로드를 펼칠 때 각 리소스의 옵션에 대한 동작을 예상하고, 예상을 통해 예기치 않은 오류, 다운타임을 사전에 방지할 수 있도록 더욱 주의를 기울여야 하겠습니다.

좋은 웹페이지 즐겨찾기