AWS EC2 시스템 장애과 복구

2월 2일 어제는 나에게 무척이나 힘든 날이었다.

이미지 출처:http://matrix.wikia.com/wiki/Reload
출처:http://matrix.wikia.com/wiki/Reload

회사 PC

회사의 PC가 망가져서 PC 교체와 함께 OS 및 소프트웨어 설치등을 해야 했다. 작업용으로 사용하던 SSD는 괜찮았는데 백업용으로 사용하던 HDD가 인식되지 않는 문제가 발생했다. 2010년부터 백업했던 것들이 들어 있어서 꽤나 큰 충격을 받았다.

AWS EC2

그리고 New Relic으로 부터 AWS에서 사용중인 EC2서버 메모리 사용량이 90%가 초과했다는 알림 메일을 새벽에 받았었는데, 그 이후 알림이 해제되었다는 메일도 왔었다. 퇴근길에 혹시나 해서 AWS 콘솔로 확인해보니 EC2 서버는 문제가 없어 보였지만, AWS 콘솔에는 메모리와 관련된 모니터링이 없는 것이 마음에 걸렸다.

집에 돌아와 EC2 서버에 접속해보려고 했더니 반응이 없다. 국내가 아닌 일본에 있다보니 ISP 업체에서 연결을 제대로 못해주나 싶었으나 그것도 아니었다.

인스턴스 재부팅을 시도했는데 반응이 없어 인스턴스를 중지시키고 콘솔 로그를 확인했는데 아래와 같이 문제가 있었다.

[1982949.054580] Out of memory: Kill process 14993 (foo) score 47 or sacrifice child
[1982949.057875] Killed process 14993 (foo) total-vm:327252kB, anon-rss:47792kB, file-rss:124kB
[2051399.726500] end_request: I/O error, dev xvda, sector 12893328
[2051399.729576] end_request: I/O error, dev xvda, sector 12893392
...
[2051399.766446] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000007

인스턴스를 다시 시작했으나 상태는 초기화중이고 한참 후에야 상태 확인(Status Check)이 1개 실패한 것으로 나타났다. EC2의 상태 확인은 시스템 상태 확인과 인스턴스 상태 확인으로 구성되어 있다. 이 중에 인스턴스 상태 확인이 실패되었다. 관련 도움말을 보니 여러가지 항목에서 오류가 발생할 수 있는데 나의 경우는 메모리와 블럭 디바이스 오류가 의심되었다. 물론 New Relic의 알림을 보면 주 원인은 메모리일 것이다.

메모리 오류

메모리를 많이 사용하는 경우 AWS에서 제시하는 방법은 메모리가 좀 더 있는 인스턴스로 바꾸는 것인데 Free Tier를 사용하는 나에게 해결책은 되지 못했다.

블럭 디바이스 오류

설명서에 따라 볼륨을 떼고 스냅샷을 만들고 다시 붙여보았지만 역시 문제해결이 되지 않았다. 별도의 EC2 인스턴스를 만들고 해당 볼륨을 붙였지만 부팅이 안되었다.

복원

일단 해결 방법이 쉽지 않다고 판단하여 새로운 볼륨에 서버 설정들을 다시 하고 복원을 하였다.

그나마 복원이 쉬웠던 것은 AWS 사용할 때 백업해 놓았던 것이 있었고 DB의 경우 RDS로 분리했기때문이다. 만약 RDS로 분리하지 않았다면 데이터는 손실이 발생했을 것이다.

참고