Joonas' Note

Joonas' Note

도커 스웜 모드의 서비스 장애 복구 본문

개발/Docker

도커 스웜 모드의 서비스 장애 복구

2018. 11. 8. 23:30 joonas

    다시는 이런 일로 삽질하기 않기 위해 글로 남긴다.

    서비스의 장애 복구라기보다, 서비스의 장애를 확인하지 못한 실수를 기록으로 남기는 목적의 글이다. (하지만 docker node ls 에서 노드의 상태가 Down 으로 나오지 않아서 장애가 발생했다고 의심하지 못했었다. 억울하다.)


    도커 스웜 모드(Docker Swarm Mode)를 이용하여 클러스터를 간단하게 구축했다. 매니저 노드 1개와 워커 노드 2개를 VM으로 띄웠고, nginx를 서비스로 만들었다.

    그런데 무슨 이유인지 모든 노드들(매니저 노드, 워커 노드)의 ip로 접속하여도 Welcome to nginx! 화면이 보이지 않았다. 그래서 각 VM마다 들어가서 태스크(Task)들을 확인해보았지만 잘 떠있는 것 처럼 보였다.

    ubuntu@swarm-manager:~$ docker ps
    CONTAINER ID  IMAGE      COMMAND         CREATED         STATUS         PORTS   NAMES
    5794...       nginx@...  "nginx -g ..."  24 minutes ago  Up 24 minutes  80/tcp  webserver.1.y1ug...

    스웜 클러스터에 잘 추가되어있는지 매니저 노드에서 docker node ls로 확인해도 멀쩡해보였다.

    의심되는 부분은 중간에 hostname을 자주 바꾼거였는데, 이게 서비스와 태스크들에 어떤 영향을 주었는 지 전혀 짐작이 안 가는 상태였고 오히여 방화벽과 iptables를 의심하고 있었다.


    그러다 워커 노드 중 하나를 매니저 노드에서 삭제(docker swarm leave)했다가 다시 추가(docker swarm join ...)해야 할 일이 있었는데, 태스크가 뭔가 꼬여있는 것 같아서 서비스를 삭제하고 다시 생성하려고 했다.

    중간에 docker service ps myservice를 보면 각 태스크들의 상태가 나온다. 이거부터 확인했으면 되는 데 50분동안 삽질한 것이다.
    \_ myservice.2 처럼 장애가 발생한 서비스들이 보인다. 중요한 작업은 아니라서 자세하게 확인은 안 해보고 넘어갔는데, 지금 글을 적으면서 저 태스크들의 로그는 확인해볼걸 하는 생각이 든다.

    서비스를 삭제하고 새로운 이름으로 생성했더니 오류 없이 우선 등록되었고, 시간이 조금 지나고 아무 노드나 들어가서 확인해보았다.

    드디어 nginx 페이지를 보았다!!

    Comments