본문 바로가기

프로젝트/나만의명언집

ec2 재부팅 시 사이트 접속 불가 (PostgreSQL, Nginx)

반응형

들어가는 말

인스턴스에 구동 중인 서버의 네트워크 속도가 너무 느려졌습니다. 이럴 때는 실제 컴퓨터를 재부팅하듯이 인스턴스 또한 주기적으로 재부팅을 하면 좋다는 말이 있어서 시도했습니다. 그런데, 잘 되던 서버가 실행되지 않고  사이트 접속이 불통이었는데요. 어찌 보면 당연한 이유로 발생한 해당 문제를 해결하는 시간을 가져볼까 합니다.
 

문제상황

EC2 에 배포한 사이트가 날이 갈수록 느려지는게 보여서, 컴퓨터를 재부팅하기로 하였습니다. 그런데, 재부팅 이후 사이트에 접속을 하려고 하니, 사이트에 연결할  수 없음 에러가 발생 하였습니다.

 

개선과정

PM2 재실행

일단 저의 경우에는 PM2 가 자동으로 서버를 모니터링하도록 해두었는데, 재부팅을 하면서 PM2 가 중지 됨에 따라 발생한 것이라 생각하여 pm2 start ecosystem.config.js 를 통해 재실행 해주었습니다.

 
 
하지만 여전히 사이트는 접속 불가 입니다. 일단 무엇 때문에 안 되는 것인지 짐작가는 원인 중 하나인 Nginx 부터 살펴보도록 하겠습니다.

Nginx 실행 상태 확인과 실행

HTTP 를 HTTPS 로 포트포워딩 및 리버스 프록시 해주는 Nginx 의 역할은 정말 중요합니다. 이 친구가 안 되면 그 이후 모든 것이 안 될 가능성이 확정적이기에 sudo systemctl status nginx 명령어를 입력하여 현재 Nginx 서버가 실행 중인지 확인 하였습니다. 그 결과 Active: inactive 로 비활성화되어 있는 것을 볼 수 있었습니다.
 

 
따라서 sudo systemctl start nginx 로 서버를 실행시키고, sudo systemctl enable nginx 를 통해 부팅 시 서버가 자동 재실행 되도록 설정해주었습니다.

 
 

아까와 달리 접속은 되었지만,

결과적으로 접속은 되었지만, 서버 컴포넌트를 렌더링 하는 중에 문제가 발생 하였다는 에러 로그를 확인하였습니다.

 
 
일단 클라이언트 측에서는 서버 사이드의 민감한 로그 문제를 알 수 없으므로, 이를 확인하기 위해 백엔드 환경을 모니터링하는 pm2 의 log를 살펴봐야될 것 같습니다.

무엇이 문제냐, pm2 log 를 통한 로그 추적

따라서 ec2 인스턴스에 접속하여 pm2 로 모니터링 중인 인스턴스의 실행 로그를 확인하기 위해 pm2 log 1 or 0 을 입력하였습니다

여기서 1과 0은 pm2 가 모니터링하는 프로세스의 식별자 입니다. 즉, pm2 log 1 혹은 pm2 log 0 을 입력하며 현재 실행중인 프로세스 로그를 확인하였다는 의미입니다)

 
port 5432 연결이 실패하였다는 로그를 보니 PostgreSQL 과 서버 간의 연결이 되지 않고 있다는 사실을 확인하였습니다.

 
이 문제를 보고, 데이터베이스 서버가 닫혀 있구나 짐작하였습니다. 부팅 하면서 모든 것이 자동 종료된 것으로 보입니다. 
 

알고보니 DB 문제, 데이터베이스 실행 유무 확인과 재실행(+ /pgsql/data 접근 불가 문제)

데이터베이스가 정상실행 중인지 확인하기 위해 sudo systemctl status postgresql 을 입력하였습니다. 그 결과 dead 로서 비활성화되어 있음을 확인하였습니다.

 
따라서 데이터베이스 서버를 재실행하기 위해 sudo service postgresql start 해야 합니다. 이 때, 아마도 아래와 같은 에러가 발생할 수도 있습니다.

 
추가로 보이는 로그를 살펴보면 /var/lib/pgsql/data 에 접근 권한이 없다고 나와 있습니다. 

 
이 경우에는 해당 폴더와 내부 파일에 대한 접근 권한을 재귀적으로 부여하기 위해 sudo chmod -R 750 /var/lib/pgsql/data 를 입력해줍니다.

여기서 -R 은 재귀를 의미합니다. 예를 들어, data 내 에 여러 파일과 폴더가 있으면 재귀적으로 모든 폴더와 파일에 권한을 부여합니다.

750 은 순서대로 오너, 사용자 그룹, 기타 사용자 순으로 권한을 부여하는데 4: 읽기권한, 2: 쓰기권한, 1: 실행권한 을 의미하는 각 번호가 있고, 이를 더한 값의 결과에 따라서 각 대상의 권한을 설정할  수 있습니다.

 
그 후 다시 실행해보면, 정상적으로 실행이 되는 것을 확인할 수 있습니다.

https://wise-sayings.com/

나가는 말

이번에 인스턴스를 재부팅(컴퓨터 재부팅)을 하면서 발생한 사이트 접속 불가 문제를 해결해보는 시간을 가졌습니다.  이전에도 다른 상황이지만 비슷한 문제를 경험하여 해결했던 경험이 있어서인지 생각보다 수월하게 문제 로그를 추적하고 해결할 수 있었습니다. 
 
제가 작성한 글이 비슷한 문제를 경험하시는 분들에게 조금이나마 도움이 되었길 바라며 글을 줄여봅니다. 
 

번외) 사이트 속도가 빨라짐

재부팅을 했던 이유는 네트워크 속도가 너무 느려져서 였는데, 이번에 재부팅을 하면서 네트워크 지연 시간이 최소 2s 가량 잡히던 문제가 개선되어 거의 0.5s 수준으로 매우 빠르게 화면 전환이 되는 것을 체감할 수 있었습니다. 물론 여기서 수치는 제가 임의로 정한 것이라 명확한 기준은 아니지만, 그 만큼 많은 개선이 되었다는 점을 확인할 수 있었습니다.
 
우리 물리적 컴퓨터나 휴대폰의 경우도 너무 오래 켜두면, 알게모르고 쓰레기가 쌓이게 되는데, 이러한 문제는 가상의 컴퓨터에서도 마찬가지인가 싶습니다. 해당 문제의 원인은 다양하겠지만, t2. 마이크로 정도의 작은 용량의 컴퓨터를 장시간 실행하기 때문에 불가피하게 제거되지 못한 쓰레기가 쌓이게 되고, 결국 성능저하 문제의 발생으로 이어지는게 아닌가 싶습니다.

반응형