이상적인 목표 시나리오
예,로드 밸런서를 사용하고 한 번에 하나의 인스턴스를 업데이트해야합니다. 컨테이너 간 통신이 어디서 오는지 잘 모르겠습니다.
예를 들어, 사이트 A에 서비스를 제공하는로드 밸런서가 있다고 가정하십시오. 사용자는 사이트에 연결하고 "A"로만 알고 있습니다. 로드 밸런서는 두 개 이상의 백엔드 (B, C 등)가 있으며 VM인지 컨테이너인지는 중요하지 않습니다.
그런 다음 백엔드 (이 경우 Apache 인스턴스)를 업그레이드하려고합니다.
- 로드 밸런서의 적격 백엔드에서 B를 제거하여 더 이상 트래픽을 허용하지 않습니다.
- 현재 활성 요청이 처리되고 기존 연결이 닫힐 때까지 기다립니다.
- B를 제공하는 컨테이너 또는 기본 VM을 업데이트합니다.
- B를 다시 시작하고로드 될 때까지 기다렸다가 작업을 시작하십시오.
- B를 테스트하여 새 요청이 올바르게 제공되는지 확인하십시오.
- 트래픽을 다시 활성화하기 위해로드 밸런서 백엔드 풀에 B를 다시 추가
그런 다음 C, D 등에서 동일한 프로세스를 수행하십시오.
거기에 있다고 주 도커 컨테이너의 현재 위치에서 업그레이드 열기 요청 년 11 월 2013 년,하지만 위의 솔루션은 그 동안 무엇을해야하므로 훨씬 진전이 나타나지 않습니다.
기존 라이브 사이트를 위해해야 할 일
아마도이 모델에서 라이브 사이트를 이미 실행 중이고 다운 타임없이 업그레이드하기 때문에이 질문을하고있는 것 같습니다. 따라서 위의 이상적인 목표 상태에 도달해야하지만 점진적으로 증가해야합니다.
다음과 같이 가정 해 봅시다 :
- 컨테이너를 가리키는 DNS 이름이 있습니다.
- 컨테이너가 일부 IP 주소에서 실행됩니다
- 사용자는 컨테이너의 IP 주소를 모르며 어디에서나 하드 코딩되지 않았습니다.
이러한 가정이 틀린 경우 먼저 이것이 올바른지 수정해야합니다.
그런 다음 다음 단계를 수행하십시오.
- 새 IP에서로드 밸런서를 생성하고 기존 컨테이너에서 유일한 백엔드로 지정
- 컨테이너 IP가 아닌로드 밸런서를 가리 키도록 DNS 변경
- 동일한 VM + 컨테이너 설정으로 동일한 Apache 백엔드 추가
- 이제 두 개의 백엔드 B와 C가있는로드 밸런서가 있으므로 "이상적인 대상 시나리오"섹션의 지침에 따라 한 번에 하나씩 업그레이드하십시오.
로드 밸런서를 업데이트하는 방법
쉬운 (호스팅 된) 방법
가장 쉬운 옵션은 자신의 밸런서를 실행하지 않는 것입니다. 예를 들어로드 밸런싱을 서비스로 제공하는 클라우드 플랫폼을 사용하는 경우이를 사용하는 것을 고려하면로드 밸런서의 유지 관리 및 업데이트는 문제가되지 않습니다.
수동 방법
자체로드 밸런서를 실행중인 경우 다른 간접 계층 (예 : DNS)을 추가하면 도움이됩니다. 다음을 가정 해 봅시다.
- 로드 밸런서 A의 IP로 확인되는 호스트 이름이 있습니다.
- 로드 밸런서에는 P1, P2 등의 백엔드 풀이 있습니다.
다음과 같이 진행합니다.
그리고 당신은 끝났습니다.
세부 사항, 다이어그램 및 툴링
프로세스를 자동화하는 데 도움이되는 다음과 같은 문서와 도구를 참조하십시오. 그러나 일반적인 아이디어는 동일합니다.
도덕
"컴퓨터 과학의 모든 문제는 너무 많은 간접 문제를 제외하고는 다른 수준의 간접 지시로 해결할 수 있습니다." — 데이비드 휠러