지금 글을 쓰고 있는 이 공간이 어제 고장 났다.
꽤 오래 서버 운영을 해와서 트러블 슈팅에는 어느 정도 익숙하다고 생각했는데, 생전 처음 보는 양상이었다.
우선 상황을 돌이켜보면, GCP를 사용하고 있는데 어떤 모니터링에도 문제가 없었으나, 웹이 접속 안 되는 건 당연하고, SSH도 접속이 안되고 직렬접속도 안되었다. 즉 내가 시스템에 들어가서 볼 수 있는 것이 하나도 없었다.
완전 멘붕이었다. 그래도 불행 중 다행으로 DB 서버와 파일 서버는 따로 분리해 두어서 자료는 날아가지 않았다. 얼마나 다행인지 모른다. 인스턴스를 몇 번 껐다 켜보고, 로그도 뒤져보고 모니터링 그래프도 다 확인해 봤으나 이렇다 할 원인은 찾지 못했다. 아마~ 추측하건대 Rocky 8 이미지를 쓰고 있었는데 OS나 GCP에서 자체적으로 점검?하는 과정에서 문제가 생긴 게 아닐까.. 싶은데, 뭐 알 턱이 없다..
그렇게 원인 파악은 접어두고, 복구를 시작했다. 테마 파일이나 플러그인 커스터마이징 한 것들이 걱정이지만 한 땀 한 땀 복구를 하던 찰나에, 생각해 보니 부팅만 안될 뿐 마운트는 할 수 있을 것 같았다. 그래서 인스턴스를 새로 만들고 디스크를 클론해서 마운트 했다. 클론하지 않고 마운트하려니 부팅 디스크라서 이전 인스턴스를 종료시켜도 종료가 되지 않았다.
GCP에서 주는 기본 리눅스 이미지는 xfs를 사용하고 있었고, 그대로 마운트해서 모든 파일을 쉽게 복구할 수 있었다.
간단히 복구 과정을 적어 보자면 이렇다.
- CentOS 이미지로 새 인스턴스 생성
- 기존 고정 IP를 새 인스턴스로 변경
- 기존 디스크 클론
- 기존 디스크를 새 인스턴스 구성에 추가
- PHP, nginx 등 워드프레스에 필요한 구성 완료
- fstab 에 디스크 마운트 추가
- 파일 복사
- nginx 및 SSL 재구성
- 기존 디스크, 인스턴스 정리
디스크를 클론할 수 있다는 사실을 알기 전까지 머리를 쥐어뜯다가, 방법을 찾고 바로 복구되어 기분이 좋아졌다. 지금 이렇게 글을 쓸 수 있으니 얼마나 좋은가 😀