여러로드 밸런서를 사용하여 트래픽을 애플리케이션 서버로 리디렉션 할 수 있습니까?


9

로드 밸런싱을 처음 사용하고 여러로드 밸런서를 사용하여 트래픽을 내 애플리케이션 서버로 리디렉션 할 수 있는지 궁금합니다. 나는 이것이 어떻게 이루어질 수 있는지 정말로 이해하지 못한다. 도메인 이름이 특정 서버의 IP 주소 (이 경우 하나의로드 밸런서의 IP)와 일대일로 일치하지 않아야합니까? 각로드 밸런싱 서버에 다른 IP가있는 경우 두로드 밸런서 (또는 10 개의로드 밸런서 또는 50 또는 100)가 어떻게 요청을 수신 할 수 있습니까?


당신의 응답을 주셔서 감사합니다. 따라서 기본적으로 트래픽을 처리하기 위해 여러로드 밸런서를 사용하려면 각 트래픽에 대해 서로 다른 CNAME 만 설정하면됩니까? 특히 내 사이트에 대한 트래픽을 처리하기 위해 10 개의로드 밸런서가 필요한 경우 이것이 유일한 방법입니까?
user3790827

1
질문을 닫기 전에 하루 이상 질문을 열어 두는 것이 좋습니다. 그것조차도 보통 성급한 것입니다. 답변을 받았다고해서 반드시 유일한 (또는 최상의) 답변을 의미하는 것은 아니며, Q & A 답변을 표시하는 것이 일반적으로 관심을 덜 받는다는 의미입니다.
앤드류 B

1
@Anatoly 나는 아직 결정을 내리지 않았다. 여기에 제시된 솔루션을 검토 한 후 다른 솔루션을 추천 한 친구들과 대화를 나 talk습니다. 내 유스 케이스의 경우 지금까지 가장 좋은 솔루션은 DO 또는 Vultr와 같은 저렴한 공급자의 VPS 서버를 사용하여 가상 IP를 제공하지 않고 Algolia에서 클라이언트로드 밸런싱과 함께 사용하는 방법을 사용하는 것입니다. API에 대해서만 HA와 확장 성이 필요하므로 각로드 밸런서에 대해 서로 다른 하위 도메인을 만들면 그렇게 큰 문제는 없습니다. 위젯의 이러한 최종 사용자는 어쨌든이를 알 수 없습니다.
user3790827

@ user3790827은 계획처럼 들립니다. HA 및 페일 오버가있는 요구 사항 유형에도 불구하고 주위에 너무 많은 패턴이 있지만 모든 사람이 동일한 문제를 겪지 만 SLA 99.9 (연간 8 시간의 다운 타임) 이상을 가진 사람은 없습니다. HA 솔루션은 일반적으로 비용이 많이 들고 가용성과 비용간에 비즈니스 거래가 발생합니다. 고객은 일반적으로 99.9를 수락하고 잠재적 다운 타임 또는 예정된 기간을 알고 있으며 100 % 가동 시간조차도 개발 / 배포 / 보안 또는 사람의 실수로 인한 버그가 없음을 보증하지 않습니다.
Anatoly

Chrome에서 3 초의 시간 초과가 발생하면 DNS 무효화 및 쿼리가 발생한다는 것을 조사했습니다. 그래도 다른 브라우저 동작은 확실하지 않습니다.
Anatoly

답변:


12

라운드 로빈 DNS를 사용하는 것은 고 가용성에 적합하지 않습니다. 한 서버가 오프라인 상태가 되어도 클라이언트는 계속 연결하여 시간 초과를 기다립니다.

이를 달성하는 다른 방법이 있습니다.
1) 액티브 / 패시브로드 밸런서
기본적으로 하나의로드 밸런서는 하나의 IP 주소에 대한 모든 트래픽을 처리합니다.
해당 밸런서가 중단되면 수동 노드가 뛰어 들어 IP를 인수합니다.
로드 밸런서는 거의 트래픽을 전달하는 것이므로 중소 규모의 사이트에서는 문제가 해결 될 수 있습니다.

2) 액티브 / 액티브로드 밸런서
동일한 트래픽 IP가 두 개 이상의로드 밸런서에 구성됩니다.
들어오는 트래픽은 모든로드 밸런서로 전송되지만 알고리즘은 어떤 밸런서가 응답해야하는지 선택하고 다른 모든 트래픽은 해당 트래픽을 버립니다.
간단히 생각하면 두 가지로드 밸런서가 있습니다.
요청하는 IP가 짝수로 끝나면로드 밸런서 A가 응답하고 그렇지 않으면로드 밸런서 B가 응답합니다.

물론 인프라가이를 지원해야하며 트래픽이 전송되었지만 폐기되어 오버 헤드가 발생합니다.
자세한 내용은 여기를 참조하십시오 : http://community.brocade.com/t5/SteelApp-Docs/Feature-Brief-Deep-dive-on-Multi-Hosted-IP-addresses-in-Stingray/ta-p/73867


"물론 인프라가이를 지원해야한다"고 말하면로드 밸런서에 요청을 보낼 추가 머신이나 VM이 필요하다는 의미입니까?
user3790827

2
@ user3790827 이러한 맥락에서 인프라는 서버가 아닌 네트워크 장비입니다. '
Jenny D

1
클라우드 공급자를 사용할 계획이므로 물리적 인프라를 직접 제어 할 수 없습니다. vps 서비스 제공 업체에 무엇을 요청해야합니까?
user3790827

1
많은 세부 사항에 의존하기 때문에 추상 권장 사항 만 있습니다. 우리는 여기에 멀티 호스트 IP를 사용하는 것이 타당한 지조차 알지 못합니다. 트래픽은 수백 Mbit / s에 불과합니다. 이것이 필요한 경우 적절한 소프트웨어를 평가하고 요구 사항을 확인한 후 해당 소프트웨어를 지원하는 공급자를 찾으십시오. DNS RR이 작동합니까? 확실한. 사용할까요? 내가 일하는 비즈니스 소유자가 어떤 종류의 가용성을 목표로하는지에 따라 다릅니다.
faker

@faker 죄송합니다. 세부 정보를 충분히 제공하지 않아서 내 잘못 인 것 같습니다. 다른 사람들의 웹 사이트에 삽입되어 트래픽 데이터를 수집하고 (Google Analytics라고 생각) 자바 스크립트 스크립트를 작성하고 서버에 액세스하여로드 된 각 페이지에 대한 통계를 표시합니다. 기본적으로 사용되는 각 웹 사이트에 대해로드되는 자바 스크립트 파일이 있습니다.
user3790827

6

로드 밸런서가있는 고 가용성은 일반적으로 여러 호스트 (예 :로드 밸런서)가 여러 가지 방법 중 하나로 하나의 공통 IP 주소에 응답 할 수 있는 가상 IP 주소 (VIP) 프로토콜을 사용하여 구현됩니다 (활성 / 수동, 활성 / 활성의 변형). .

이 프로토콜에는 많은 수가 있으며, 정규로드 밸런서에서 가장 많이 본 프로토콜은 VRRPNLB입니다 (기기의 많은 설명되지 않은 블랙 박스 프로토콜). 라우터 및 방화벽으로 확장하면 CARP , HRSP , GLSP 등이 발생할 수도 있습니다 .

이 전략은 DNS로드 밸런싱에 비해 여러 가지 이점이 있으며, 이는보다 간단한 전략이며 다른 답변에서 처리됩니다.

예를 들어 DNS로드 밸런싱에는 다음과 같은 부담이 있습니다.

  • DNS 캐싱 메커니즘의 느린 전환
  • 제한된로드 밸런싱 알고리즘 (일반적으로 라운드 로빈)
  • 클라이언트에 대한로드 밸런싱 결정 아웃소싱 (dns 레코드의 캐싱을 통해)
  • 서버 (예 :로드 밸런서)가 회전하지 않을 때 서비스 대기열이 느려짐 ( ISP 및 클라이언트가 처리하는 DNS 레코드 TTL 기반 )
  • 로드 밸런서 장애시 느린 장애 조치

HA에 가상 IP 프로토콜을 사용하면 다음과 같은 목표를 달성 할 수 있습니다.

  • 로드 밸런서 중에서로드 밸런싱 알고리즘 선택
  • 서버 중심로드 밸런싱 결정 (예 : 서비스 상태 기반 측정 및 라우팅 용이)
  • 로드 밸런서가 회전하지 않으면 서비스 대기열이 더 빨리 배출됩니다.
  • 로드 밸런서 오류시 즉각적인 페일 오버

자신의 시나리오에 가장 적합한 전략과 프로토콜을 아는 사람 만 있습니다.


1
또한 일부로드 밸런서는 인근 라우터와의 BGP 세션 설정을 지원하므로 Anycast 솔루션 을 설정할 수 있습니다 . 로드 밸런서가 작동 중지되거나 VIP에 대한 광고를 중단하면 (상태 확인 실패) 다음으로 가장 우수한 라우팅 후보가 승리합니다. 이 답변의 마지막 문장은 필수적입니다. 회사의 네트워크 관리자와 대화해야합니다.
앤드류 B


2

요구 사항 : 하드웨어로드 밸런서, BGP 프로토콜 및 그 모든 것에 액세스 할 수없는 클라우드 또는 모든 유형의 환경에서 작동하는 실용적인 솔루션이 있어야합니다.

응용 프로그램의 소득 요청 번호는 알려지지 않았지만 두려움없이 증가 된 부하 기대치를 충족 할 수있을만큼 높아야합니다.

로깅 저장소 및 검색 앱과 같이 유사한로드 특성을 가진 응용 프로그램을 찾아 보겠습니다. 나는 하나를 발견했다 .

그들이 원하는 것:

  1. 수집기 전체의 부하 균형
  2. 수집기 중 하나가 죽거나 문제가 발생하는 경우 데이터를 계속 수집 할 수 있도록 내결함성을 제공합니다.
  3. 로그 볼륨의 증가에 따라 수평으로 확장

그들은 ELB에 대해 무엇을 시도하고 배웠습니까?

  1. 예상대로 작동하지 않습니다
  2. 부하 증가로 인한 대기 시간 문제
  3. 모니터링 시설이 충분하지 않습니다
  4. 너무 많은 제한 (개방 포트 및 프로토콜 번호)

Route53으로 선택한 이유 :

  1. "라운드 로빈은 매우 기본적인로드 밸런싱이지만 효율성 측면에서 우리에게 잘 작동합니다."
  2. "Route 53 장애 조치 상태 점검을 활용합니다."
  3. "콜렉터에 문제가있는 경우 Route 53은 자동으로 서비스에서 제외되며 고객에게는 아무런 영향이 없습니다."
  4. Route 53에 사전 준비가 필요 없음

Route 53은 Loggly가 거대한 로그 볼륨, 예측할 수없는 변형 및 비즈니스의 지속적인 성장을 고려할 때 고성능 수집기를 활용하는 가장 좋은 방법으로 판명되었습니다. 수집기의 핵심 목적과 일치합니다. 손실없이 네트워크 회선 속도로 데이터를 수집하고 Loggly에서 사용하는 모든 AWS 서비스의 탄력성을 활용할 수 있습니다.

이 특정 예는 일부 시나리오 (로그 수집기, 광고 서비스 또는 이와 유사한)에서로드 밸런서가 중복되고 "DNS 상태 검사 라운드 로빈 솔루션"이 그 역할을 잘 수행함을 보여줍니다.


AWS DNS 장애 복구에 대해 말한 내용을 살펴 보겠습니다 .

Route 53은 DNS 장애 조치를 통해 웹 사이트 중단을 감지하고 최종 사용자를 사용자가 지정한 대체 또는 백업 위치로 리디렉션 할 수 있습니다. Route 53 DNS 장애 조치는 상태 점검을 통해 정기적으로 전 세계 여러 위치에서 애플리케이션 엔드 포인트에 인터넷 요청을하여 애플리케이션의 각 엔드 포인트가 작동 중인지 작동 중지되었는지 확인합니다.

이 기술은 또한 ELB (참고 용이 아닌 필요하지 않음)를 더욱 강력하게 만들어줍니다. 다시 RR + Health Check를 기반으로합니다.

Route 53 DNS 장애 조치는 배후에서 ELB와 통합하여 이러한 모든 장애 시나리오를 처리합니다. 활성화되면 Route 53은 개별 ELB 노드에 대한 상태 확인을 자동으로 구성하고 관리합니다.


이제 장면 뒤에서 어떻게 작동하는지 봅시다 . 명백한 질문은 DNS 캐싱을 처리하는 방법입니다.

그러나 클라이언트와 Route 53 사이의 모든 계층에서 TTL을 준수하지 않으면 DNS 캐싱은 여전히 ​​문제가 될 수 있습니다 ( "긴 꼬리"문제는 이전 게시물 참조). "캐시 버스 팅"기술을 적용 할 수 있습니다. 고유 한 도메인에 요청을 보내다

("http://<unique-id>.<your-domain>") 

와일드 카드 리소스를 정의

Record "*.<your-domain>" to match it.

Algolia "클라이언트 재시도 전략"을 도입 하여 클라이언트 (귀하의 JS)가 다음을 처리 할 수 ​​있다면 매우 효과적입니다.

결국 API 클라이언트에서 기본 재시도 전략을 구현했습니다. 각 API 클라이언트는 세 개의 다른 시스템에 액세스 할 수 있도록 개발되었습니다. USERIDID-1.algolia.io, USERID-2.algolia.io 및 USERID-3.algolia.io라는 세 가지 다른 DNS 레코드가 각 사용자를 나타냅니다. 첫 번째 구현은 레코드 중 하나를 무작위로 선택한 다음 실패시 다른 레코드로 다시 시도하는 것입니다.


1
Algolia의 접근 방식이 예산 및 사용 사례에 가장 적합하다고 생각합니다. 일반적으로 각로드 밸런서마다 다른 하위 도메인을 다시 사용하지만 JS 위젯 만 사용하므로 최종 사용자는 그 차이를 알 수 없습니다.
user3790827

1
누군가는 현재 사용중인로드 밸런서에서 장애가 발생 하면 Cloudflare의 DNS cloudflare.com/features-optimizer 를 사용 하여 트래픽을 대기로드 밸런서로 리디렉션 하도록 제안했습니다 . cloudflare.com/dns
user3790827
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.