2014-06-04 19 views
6

우리는 180 초의 TTL로 DNS 장애 조치 설정을했습니다. 서버가 실패하면 A 호스트 레코드의 IP 주소를 작동중인 서버의 IP 주소로 갱신합니다. 현재 저희 웹 사이트는 일정 기간 동안 AJAX 요청을 사용하여 새로 고칩니다. 서버 중 하나가 실패하면 DNS가 업데이트되고 페일 오버 (failover)되므로 도메인에 ping을 보내면 올바른 IP가됩니다. 그러나 브라우저 내부에서 TTL이 만료 된 후에도 AJAX 요청은 도메인 이름에 할당 된 이전 IP 주소를 유지합니다 (브라우저에서 페이지를 다시로드 할 수 없음). 나는 다른 질문을 읽을 때 클라이언트에서 DNS 캐시를 강제로 플러시 할 수 없다는 것을 알고 있습니다. 내 질문은, 당신이 자바 스크립트 또는 AJAX를 사용하여 이것을 달성하기 위해 다른 방법이나 속임수를 알고 있습니까? 감사.AJAX 요청의 도메인 이름에 대한 DNS 업데이트

+1

저에게 X/Y 문제처럼 보입니다. 당신은 단지 인프라의 단점 때문에이 상황에 처해 있습니다 ... 브라우저는 성능상의 이유로 DNS 보유로 악명이 높습니다. 따라서 제 작업이 위태로운 것이 아니라면이 경로로 넘어 가지 않을 것입니다. –

+0

고 가용성 솔루션으로 우리는 ajax 요청을 통해 데이터를 제공하는 두 개의 서버를 가지고 있습니다. 웹 응용 프로그램은 클라이언트 측이므로 브라우저에서 새로 고쳐지지 않습니다. AJAX 새로 고침은 간격을두고 발생하며 ajax의 도메인 이름은 그대로 유지되지만 서버가 실패하면 업데이트 된 IP가 유지됩니다. 이 작업을 수행 할 수있는 방법이 없다면 요청을 처리하는 두 대의 서버로 고 가용성을위한 사이트/아약스 요청을 어떻게 재 설계 할 수 있는지 알고 있습니까? 감사합니다. – wayofthefuture

+0

그냥 희망찬 생각 : 항상 다른 서버에 요청을하고 IP를 변경하지 않고 해당 서버에서 'cURL'(또는 이와 비슷한)을 수행하고 응답을 반환하면 어떻게됩니까? 그래서,'always-up-server'를 어떤 종류의 라우터로 사용합니까? – GuyT

답변

2

두 개 (또는 그 이상)의 하위 도메인을 사용하십시오. 예. 실제 서버에 해당하는 data1.example.com 및 data2.example.com 크로스 도메인 작동하려면

그러나, 당신은 도메인 간의 통신을 가능하게 document.domain을 설정해야합니다

document.domain = "example.com"; 

그런 다음, 수동으로 다른 서버 간의 장애 조치 스크립트가 필요합니다. 내가 아는 많은 방법으로 성공한 유일한 방법입니다.

+0

감사합니다. 약간의 편집도 있습니다. – wayofthefuture

4

나는이 클라이언트 측을 시도하지 않을 것이고 네트워크 부하 분산 장치 또는 다른 서버 측 가상 IP 주소를 사용할 것입니다.

클라이언트 쪽에서 요청할 때 브라우저 보안을 피하거나 도메인 간 요청을 완벽하게 준수하도록 AJAX 호출을해야합니다. 이러한 변경을 적용하면 행복 할 것입니다. 일부 JavaScript DNS 라이브러리가 있습니다.이 이름을 사용하여 DNS 이름을 IP 주소 또는 CName으로 확인하고 반환 된 IP 주소 또는 CName을 사용하여 AJAX URL을 조정하고 AJAX를 새로 고칩니다. AJAX 호출이 실패 할 때마다 새로운 DNS 조회를 사용하는 URL.

나는 이렇게하고 싶지 않아요 자신

+0

이름에 대한 호스트 레코드가 두 개 이상 있으므로 크로스 도메인으로 이동할 필요가 없습니다. 기본적으로 명명 된 1 개의 도메인은 라운드 로빈 방식으로 구성되며 서버가 다운되면 라운드 로빈은 계속 동일한 IP를 계속 전송합니다. 감사합니다 – wayofthefuture

+2

http://en.wikipedia.org/wiki/Same-origin_policy에서 세부 정보를 제공합니다. 접근 방식이 작동하려면 브라우저의 DNS 확인을 중단하고 브라우저가 오래된 IP 주소로 계속 걸려 있기 때문에 스스로 제어해야합니다. 따라서 서버가 죽지 않았고 새로운 데이터에 대한 ajax 요청이 다른 출발지로 간주 될 때로드 된 페이지. –

1

나는 것 중 하나

  • 코드 실패 할 경우, 다음 secondary.mycompany 스위치, 서버 primary.mycompany.com를 칠 아약스. com, 실패하면 다시 기본으로.
  • 장애 조치가 실패한 호스트의 "서비스 ip"를 인계받는 것이 바람직합니다. 이에 대한 좋은 해결책이 있습니다.

Linux의 경우 하트 비트 및 가상 IP와 기타 등등.

+0

이것은 과거에 사용한 솔루션으로 유일하게 신뢰할 수있는 솔루션입니다 (보다 안정적인 네트워크 인프라를 갖추는 것 외에는). 특히 블랙 베리는 기억에 남습니다. 두 개의 공개 이름을 사용하고 ajax 요청에 다른 사람에게 자동 장애 조치를 요청하십시오. – cmroanirgo

관련 문제