본문 바로가기
컨테이너/도커

02 스웜 모드의 서비스 장애 복구

by ^..^v 2020. 9. 17.
728x90
반응형

복제 모드로 설정된 서비스의 컨테이너가 정지하거나 특정 노드가 다운되면 스웜 매니저는 새로운 컨테이너를 생성해 자동으로 복구함

#1 특정 노드에서 myweb 서비스에 속한 컨테이너를 삭제하면 자동으로 다시 생성되는 것을 확인

#1-1 swarm-manager 노드에서 실행 중인 컨테이너 목록 확인

 

#1-2 swarm-manager 노드에서 실행 중인 컨테이너 강제로 삭제

 

#1-3 myservice 서비스의 태스크(task) 확인 → 새로운 태스크가 생성된 것을 확인

 

#2 특정 노드가 다운되면 해당 노드의 컨테이너가 종료되고 다른 노드에 컨테이너가 생성되는 것을 확인

#2-1 swarm-worker1 노드의 도커 데몬 프로세스를 종료

 

#2-2 매저저 노드(swarm-manager)에서 노드 상태 확인 → swarm-worker1 노드가 다운 상태

 

#2-3 매니저 노드에서 myservice 서비스의 태스크 상태 확인 → 실행 중인 다른 노드에서 태스크가 생성되었음

 

 

#3 다운되었던 노드를 재시작해도 재균형(rebalance) 작업은 자동으로 일어나지 않음

#3-1 다운되었던 swarm-worker1 노드를 재시작

 

#3-2 매니저 노드에서 노드 상태 확인 → swarm-worker1 노드가 Active 상태

 

#3-3 매니저 노드에서 myservice 서비스의 태스크 상태 확인 → 여전히 myweb.2 태스크가 swarm-manager 노드에서 실행 중

 

#3-4 docker service scale 명령으로 컨테이너 수를 줄이고 다시 늘리는 방식으로 서비스의 컨테이너 할당의 균형을 맞춤

 

#4 서비스 롤링 업데이트 (스웜 모드에서 자체적으로 지원)

#4-1 서비스 생성

 

#4-2 docker service update 명령으로 생성된 서비스의 설정 변경

 

#4-3 서비스를 생성할 롤링 업데이트 설정 가능

롤링 업데이트 주기, 업데이트를 동시에 진행할 컨테이너의 개수, 업데이트에 실패했을 때 어떻게 할 것인지를 설정

 

#4-4 서비스의 롤링 업데이트 설정 확인

root@swarm-manager:~# docker inspect --type service myweb3
[
    {
        "ID": "npadraf3xx27kmy1f36fyoyah",
        "Version": {
            "Index": 201
        },
        "CreatedAt": "2020-09-13T04:20:09.816854398Z",
        "UpdatedAt": "2020-09-13T04:20:09.816854398Z",
        "Spec": {
            "Name": "myweb3",
            "Labels": {},
            "TaskTemplate": {
                "ContainerSpec": {
                    "Image": "nginx:1.10@sha256:6202beb06ea61f44179e02ca965e8e13b961d12640101fca213efbfd145d7575",
                    "Init": false,
                    "StopGracePeriod": 10000000000,
                    "DNSConfig": {},
                    "Isolation": "default"
                },
                "Resources": {
                    "Limits": {},
                    "Reservations": {}
                },
                "RestartPolicy": {
                    "Condition": "any",
                    "Delay": 5000000000,
                    "MaxAttempts": 0
                },
                "Placement": {
                    "Platforms": [
                        {
                            "Architecture": "amd64",
                            "OS": "linux"
                        }
                    ]
                },
                "ForceUpdate": 0,
                "Runtime": "container"
            },
            "Mode": {
                "Replicated": {
                    "Replicas": 4
                }
            },
            "UpdateConfig": {
                "Parallelism": 2,
                "Delay": 10000000000,
                "FailureAction": "pause",
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            },
            "RollbackConfig": {
                "Parallelism": 1,
                "FailureAction": "pause",	⇐ 업데이트 도중 오류가 발생하면 롤링 업데이트를 중지
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            },
            "EndpointSpec": {
                "Mode": "vip"
            }
        },
        "Endpoint": {
            "Spec": {}
        }
    }
]

 

#4-5 롤링 업데이트 중 오류가 발생해도 계속 롤링 업데이트를 진행하도록 설정

 

#4-6 서비스를 롤링 업데이트 이전으로 되돌리는 롤백

 

728x90
반응형

'컨테이너 > 도커' 카테고리의 다른 글

04 도커 스웜 네트워크  (0) 2020.09.17
03 서비스 컨테이너에 설정 정보 전달  (0) 2020.09.17
01 스웜 모드 서비스  (0) 2020.09.17
도커로 MySQL 설치 및 실행  (0) 2020.05.28
09 docker container network  (0) 2019.05.20

댓글