문제
다음과 같이 여러 웹 팜(다른 사이트에 대해)을 구성하려고 합니다.NLB+ARR 아키텍처. 6개의 VM이 있다고 가정해 보겠습니다.
- VM 2개의 ARR+NLB 클러스터. 트래픽을 수신하여 콘텐츠 서버로 전달합니다. HTTP 호스트 헤더 조건이 포함된 URL 재작성 규칙은 요청을 올바른 콘텐츠 서버로 라우팅하는 데 사용됩니다.
- 사이트 1 콘텐츠 서버: VM 2개. 호스팅http://www.mysite1.com/
- 사이트 2 콘텐츠 서버: VM 2개. 호스팅http://www.mysite2.com/
모든 것이 잘 작동하며 두 계층 모두에서 고가용성을 테스트했습니다.
이제 사이트 2는 활성/수동 모드에서 작동해야 하므로 VM 1개만 트래픽을 수신하고 다른 VM은 장애 조치용으로 사용됩니다. 어떤 면에서 저는 NLB의 단일 호스트 모드와 유사하지만 ARR을 원합니다.
이것이 어떻게 달성될 수 있습니까?
해결 방법
나는 원하는 동작을 달성하기 위해 여러 가지 간접적인 접근 방식을 시도했습니다.
- 로드 밸런싱 알고리즘.라운드 및 로빈 가중치를 1/0으로 설정해 보았습니다. 문제는 0을 설정할 수 없다는 것입니다. 최소한 1이어야 합니다. 40억 + smth/1을 설정할 수 있지만 이것이 임의 요청이 두 번째 노드로 전달되지 않는다는 것을 보장하는지 확실하지 않습니다.
- 서버 선호도에 대한 호스트 이름입니다.호스트 이름 선호도의 고급 설정에서는 사이트 2에 할당할 서버를 1개만 구성할 수 있습니다. 작동하지만 문제는 2개의 ARR VM 간에 라우팅 테이블이 동기화되지 않는다는 것입니다. 따라서 때때로 ARR1은 한 노드에 대한 트래픽을 선호하는 반면 ARR2는 활성/수동이 아닌 다른 노드에 트래픽을 선호합니다.
- 호스트 이름 선호도 + NLB 단일 호스트.이전 접근 방식을 수정하여 NLB를 단일 호스트 모드로 전환하여 라우팅 테이블 동기화 문제를 해결할 수도 있습니다. 이 경우의 문제는 사이트 1에 대해서도 ARR 로드 밸런싱을 끄고 있다는 것입니다.
- 호스트 이름 선호도 + NLB 단일 호스트 + 2개의 IP 주소.이전 솔루션에 두 번째 IP 주소를 추가하고 서로 다른 모드에서 작동하는 2개의 NLB 클러스터를 생성하면 모든 것이 제대로 작동합니다. 문제는 두 번째 공인 IP 비용을 지불하고 싶지 않다는 것입니다.
어떤 솔루션도 완벽하지 않습니다.
이상적인 솔루션의 이미지
NLB에서 수행할 수 있는 것처럼 ARR을 단일 호스트 모드로 전환하는 방법을 알고 싶습니다. 그리고 노드 간 라우팅을 동기화하도록 합니다.
그 방법을 아는 사람이 있나요? 아니면 대체 접근 방식을 알고 있나요?
답변1
비록 완전히는 아니지만 작동하는 것처럼 보이는 한 가지 방법을 찾았습니다. 설명되어 있어요여기. 'Server Variable Hash' 로드 밸런싱 알고리즘과 'HTTP_HOST'를 변수로 사용한다는 아이디어입니다. 이렇게 하면 ARR의 모든 인스턴스가 지정된 호스트를 동일한 콘텐츠 서버에 매핑합니다. 매핑된 서버가 작동하지 않는 경우 사용 가능한 다른 서버로 대체하는지 테스트했습니다.
그러나 이 솔루션의 문제점은 호스트가 매핑되는 콘텐츠 서버를 제어할 수 없으며 이는 해시 함수에 의해 결정된다는 것입니다. 그러나 어떤 면에서는 맞습니다. 어떤 노드를 활성 노드로 만드는 것이 두려운 경우 어떻게 안정적인 장애 조치를 기대할 수 있습니까? 모든 콘텐츠 서버를 동시에 확인해야 합니다.
또 다른 문제는 각 사이트에 대해 여러 호스트 이름을 사용할 수 없다는 것입니다. 왜냐하면 호스트 이름이 서로 다른 서버에 매핑될 가능성이 있기 때문입니다.