아파치 - 고가용성

아파치 - 고가용성

Apache를 고가용성으로 설정하는 방법을 찾고 있습니다. 아이디어는 동일한 웹사이트를 제공하는 2개 이상의 Apache 서버 클러스터를 갖는 것입니다. 각 요청이 클러스터의 서버 중 하나로 무작위로 전송되도록 라운드 로빈 DNS로 각 서버의 IP 주소를 설정할 수 있습니다. 나중에 플레이하세요).

저는 이미 웹사이트와 라운드 로빈 DNS를 제공하는 여러 Apache VM 서버(여러 물리적 서버에 분산되어 있음)를 설정하고 작업하고 있으며 잘 작동합니다. SQL 데이터베이스는 고가용성 클러스터에서 MariaDB를 사용하여 설정되고, 웹 데이터(HTML, JS, PHP 스크립트, 이미지, 기타 자산)는 LizardFS 내에 저장되며 세션도 공유 위치에 저장됩니다. 어떤 이유로든 클러스터의 서버 중 하나에 액세스할 수 없게 될 때까지는 이 모든 것이 잘 작동합니다. 그런 다음 요청의 일부(대략 다운된 서버 수를 클러스터의 총 서버 수로 나눈 값)에 응답하지 않습니다. 제가 고려한 옵션은 다음과 같습니다.

자동 DNS 업데이트

웹 서버의 기능을 모니터링하고 DNS에서 다운된 서버를 제거하는 프로세스를 마련하십시오. 여기에는 두 가지 문제가 있습니다.

  • 첫째, TTL을 매우 낮은 숫자(예: 5초)로 설정할 수 있더라도 소수의 DNS 서버가 우리 서버보다 더 높은 최소 TTL을 적용한다고 들었습니다. 그리고 일부 브라우저(예: Chrome)는 TTL 설정에 관계없이 60초 이상 DNS를 캐시합니다. 따라서 우리 측에서는 문제가 없지만 일부 클라이언트는 DNS 업데이트 시 한동안 사이트에 연결하지 못할 수도 있습니다.

  • 둘째, 클러스터의 기능을 모니터링
    하고 DNS 레코드를 업데이트하는 프로그램이 새로운 단일 실패 지점이 됩니다.
    하나 이상의 모니터를 여러 곳에 분산시켜 이 문제를 해결할 수 있습니다 .

왜냐하면 둘 다 문제를 감지하고 둘 다 동일한 DNS를 변경하면 아무런 문제도 발생하지 않기 때문입니다.

uCarp/심장박동

액세스되는 IP 주소를 라운드 로빈 DNS 가상으로 만들고 서버가 다운될 경우 다운된 서버에서 업 서버로 다시 할당하도록 합니다. 예를 들어, server1의 VIP는 192.168.0.101이고 server2의 VIP는 192.168.0.102입니다. server1이 다운되면 192.168.1.102가 server2의 추가 IP가 됩니다. 여기에는 두 가지 문제가 있습니다.

  • 첫째, 내가 아는 바로는 uCarp/Heartbeat는 예를 들어 피어가 핑을 보낼 수 없는 경우와 같이 피어의 액세스 불가능성을 특별히 모니터링합니다. 그런 일이 발생하면 다운된 피어의 IP를 인수합니다. 이는 네트워크에서 액세스할 수 없는 것 외에 웹 서버가 요청을 처리할 수 없는 이유가 더 많기 때문에 문제가 됩니다. Apache가 충돌했거나 구성 오류가 있거나 다른 이유가 있을 수 있습니다. "서버가 핑할 수 없습니다"보다는 "서버가 필요에 따라 페이지를 제공하지 않습니다"라는 기준을 원합니다. 나는 uCarp/Heartbeat에서 그것을 정의할 수 없다고 생각합니다.

  • 둘째, 데이터 센터 전체의 각 서버 세트에는 서로 다른 IP 주소 블록이 있기 때문에 이는 데이터 센터 전체에서 작동하지 않습니다. 데이터 센터 간에 가상 IP 유동을 가질 수 없습니다. 데이터 센터 전체에서 작동해야 하는 요구 사항(예, 분산 파일 시스템과 데이터베이스 클러스터를 데이터 센터 전체에서 사용할 수 있음)은 필수는 아니지만 좋은 장점이 될 것입니다.

질문

그렇다면 이 문제를 어떻게 처리해야 할지에 대한 생각이 있으신가요? 기본적으로 고가용성의 성배는 단일 장애 지점(서버, 로드 밸런서 또는 데이터 센터)이 없고 전환 시 가동 중지 시간이 거의 없다는 것입니다.

답변1

HA 및 로드 공유를 원할 때는 keepalived를 사용하고 두 개의 VIP로 구성합니다. 기본적으로 VIP1은 server1에 할당되고 VIP2는 server2에 할당됩니다. 서버 중 하나가 다운되면 다른 서버가 두 VIP를 모두 가져갑니다.

Keepalived는 다른 서버를 관찰하여 HA를 관리합니다. 서버에 연결할 수 없거나 인터페이스가 다운되면 FAULT상태로 변경됩니다. VIP는 다른 서버가 차지합니다. 서비스를 모니터링하려면 옵션을 사용할 수 있습니다 track_script.

다른 데이터 센터에 다른 클러스터를 추가하려면 두 대의 서버를 더 추가하고 동일한 구성을 수행하면 됩니다. 이제 DNS 라운드 로빈을 사용하여 데이터 센터 간에 트래픽을 로드 공유할 수 있습니다. 이 경우 DNS 업데이트가 필요하지 않습니다.

관련 정보