0

예를 들어 동일한 네트워크에 코드/소프트웨어가 동일한 두 대의 서버가 있습니다. 주 서버가 다운되면 두 번째 서버가 기본 서버가되기를 원합니다.웹 사이트/웹 서버 내결함성 - 모범 사례

나는 다음과 같은 접근 방식에 대해 들어 :

위 방법의 장단점은 무엇입니까? 그리고 이것을 달성하는 가장 좋은 방법은 무엇입니까?

답변

1

내가 CARP 너무 익숙하지 않아요하지만 나머지 두 가지 옵션을 돕기 위해 시도 할 수 있습니다 : (

라운드 로빈 DNS 당신이로드 밸런싱 제공하지만 서버가 실패 할 경우 여전히 요청을받을 것이다 역시 실패 할 것입니다.
예 : DNS www.example.com이 xxx1과 xxx2를 모두 가리 킵니다.
xxx2가 죽으면 DNS는 여전히 xxx2로 확인되고 클라이언트는 요청을 계속 시도하므로 이로 인해 가동 중단 시간 동안 요구 사항의 절반에 해당하는 오류율
가동 중지 시간 동안 xxx1 만 가리 키도록 DNS를 변경하더라도, DNS 전파는 오래 걸리고 여전히 느슨한 요청입니다. 당신의 스택의 앞에로드 밸런서 (프록시 서버)를 배치 솔직한 의견으로


내가 HAProxy 정말 좋아 해요하지만이 유일한 해결책을 의미하여 (당신을 위해 일하는 것을 찾을 갈 수있는 유일한 방법입니다)

프록시 서버는 N 백엔드 서버에 둘 사이에 균형을로드하고 임의의 수를 풀어 여전히 수 있습니다
고 가용성의 형태 (HA)에서 응용 프로그램 스택을 통해 당신에게 더 많은 제어 할 수 있습니다 달리는.
유지 관리 또는 배포를 수행하고 클라이언트에 영향을주지 않기 위해 언제든지 다운 타임을 예약 할 수 있습니다.
내장 된 상태 확인 기능은 백엔드 서버를 폴링하고 필요에 따라로드를 꺼내 복구 할 때 다시 배치합니다.
HA로드 밸런싱의 단점은 일반적으로 세션을 올바르게 유지하거나 특별한 경우를 라우팅하기 위해 설정해야하는 규칙의 수입니다. 네, 복잡해질 수는 있지만 지역 사회에서의 지원은 A LOT이며 쉽게 배울 수 있습니다. HA로드 균형 조정의 또 다른 단점은 프록시 서버 자체가 단일 실패 지점이되지만 하트 비트와 두 번째 프록시 서버로 쉽게 해결할 수 있다는 것입니다.

희망이 당신의 부하 분산 장치로의 nginx를 사용하는 것입니다 앱의 오류 허용을 만들기위한 좋은 방법 질문

+0

감사합니다. 자세한 답변을드립니다. 두 가지 질문이 있습니다. "두 번째 프록시 서버"란 두 번째 물리적 서버 또는 단일 서버 내의 소프트웨어를 의미합니다. 실제 서버가있는 경우 문제가 해결 될 때까지 DNS를 변경해야합니다. 그리고 또 다른 질문은 여러분 자신의 선호에 관한 것입니다.'http' 또는'tcp' 모드에서 HAProxy를 실행합니까? – Curious

+1

정말 유용하게 사용하려면 위험을 완화해야하므로 기본 프록시 서버가 실패 할 경우 다른 물리적 서버 또는 가상 시스템 (가능하면)을 사용하십시오. HAProxy는 대개 재시작 스크립트에서 rsync로 설정할 수있는 단일 설정 파일이므로 보조 서버에 최신 설정이 있음을 알 수 있습니다. DNS 전환에 관해서는; HA 스택에서 DNS가 두 서버 사이의 공유 IP를 가리키는 데 필요하지 않습니다 (https://www.howtoforge.com/setting-up-a-high-availability-load-balancer-with-haproxy-heartbeat를 참조하십시오). -on-debian-lenny) –

+1

웹 응용 프로그램에 대해 HTTP 모드에서 HAProxy를 실행하고 메일 서버 (SMTP) 보내는 메일에 TCP 모드를 실행합니다 (캠페인에 대해 하루에 약 2 백만 개의 전자 메일을 보냅니다). tcp는 http가 아닌 트래픽, 그래서 유스 케이스로 바뀝니다. 작업에 적합한 도구를 사용하고 적합한 스택을 만드는 방법에 대해 설명합니다. 그래서 당신이 단순히 HTTP 요청을로드 균형을 원한다면 예 HTTP 모드가 갈 방법입니다. –

1

의 몇 가지 대답을 제공합니다. 당신은 온라인 그럼 다음 서버로 전환

upstream some_name { 
    server server_ip; 
    server server_ip2; 
}; 
server { 
    listen 80; 
    location/{ 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For 
      $proxy_add_x_forwarded_for; 
      proxy_set_header Host $http_host; 
      proxy_set_header X-NginX-Proxy true; 
      proxy_pass http://some_name 
    } 
} 

같은 설정 플러스 상류 객체가 max_fails = 10 fail_timeout = 20 대처럼 더 플래그를 받아 하나 개의 서버가 다운되면 알 수있을만큼 똑똑이 nginx를 만들 수 있습니다 그 이상. 자세한 내용은 official nginx website을 확인하십시오.