호스트 파일의 1 개 항목에 여러 IP 할당


29

VPN을 통해 내부 데이터베이스에 연결하는 웹 서버가 있습니다. 웹 서버에서 데이터베이스에 대한 2 개의 IP (1 차 및 2 차)가 있습니다. 기본 IP를 사용할 수없는 경우 보조 IP가 사용되도록 / etc / hosts 파일을 어떻게 설정합니까?

내 호스트 파일에서도 작동합니까?

141.131.286.1   abc.efg.datastore.com   #primary

141.131.286.237 abc.efg.datastore.com   #secondary

답변:


26

호스트 파일은 이러한 메커니즘을 제공하지 않습니다. 동일한 이름으로 두 개의 IP를 나열하면 첫 번째 IP 만 사용됩니다. 따라서 기본 및 보조 IP와 같은 것은 없습니다.

또한 hosts 파일은 URL을 처리하지 않습니다. 질문에 제공된 것과 같은 이름 만 처리합니다. URL은와 같은 완전한 경로와 프로토콜을 포함합니다 http://host/path/to/resource.


URL / 호스트에 대한 혼동을 없애기 위해 OP 질문에서 제목과 이름을 수정했습니다.
dmourati

14

/etc/hosts파일을 통해 탄력성 또는 라운드 로빈로드 밸런싱을 제공 할 수는 없습니다 .이 목적을 위해 설계되지 않았습니다.

대신 귀하의 옵션은 ... (특별한 순서는 아님)

  1. 링크를 삭제할 때 경로가 변경되도록 네트워크를 올바르게 구성하십시오.
  2. 관리 서비스 (예 : loaddns.com 또는 dnsmadeeasy.com 등)를 사용하여 DNS 라운드 로빈로드 밸런싱 (Good Idea TM 아님)을 사용하십시오.
  3. 필요에 따라 백엔드가 정의 된 아웃 바운드 트래픽 (HAProxy?)에 로컬 L3로드 밸런서를 사용하십시오.
  4. 웹 애플리케이션 자체에 복원력을 구축하십시오

DNS 라운드 로빈 부하 분산은 일반적으로 복원력이 없습니다. 하나가 선택되고 다른 하나는 시도되지 않습니다.
Antti Rytsölä Circles

또 다른 옵션은 netcat 또는 다른 소프트웨어를 사용하여 연결을 IP로 전달하는 것입니다. 하나의 IP가 손실되면 앞으로를 변경하십시오.
Antti Rytsölä Circles

1
@anttiR DNS RR만으로는 탄력성이 없지만 관리되는 DNS 서비스 공급자를 통해 사용됩니다. 내 답변을 편집하고 더 명확하게하기 위해 몇 가지 예를 제시했습니다.
Ben Lessani-Sonassi

나는 그것이 데이터베이스와 잘 작동하는지 의심합니다. 그들은 하나의 IP를 가져 와서 고정시키는 경향이 있습니다. 반면에 인터넷 웹 사이트는 훌륭하게 작동합니다.
Antti Rytsölä Circles

호스트 시스템의 리졸버에 따라 다릅니다. DNS 확인자가 비 캐싱 서비스로 설정되어 있거나 DNS 등록자 DB를 직접 폴링하면 작동합니다. 그러나 내가 말했듯이, 그것은 좋은 생각 이 아니라 단지 생각 입니다.
Ben Lessani-Sonassi

3

/ etc / hosts는 라운드 로빈을 지원하지 않지만 #RoundRobin 주석으로 태그가 지정된 항목을 대체하기 위해 간단한 bash 스크립트를 작성할 수 있습니다 (또는 사용하려는 다른 태그는 스크립트의 grep 행에 반영하십시오) .

#!/bin/bash
fqdnips=( $(nslookup sub.domain.com|grep Address:|awk -F\  '{ print $2 }'|grep -v '#') )

new=`printf "${fqdnips[@]}"`
old=`grep "#RoundRobin" /etc/hosts|awk -F\  '{ print $1 }'`
sed -i "s/$old/$new/g" /etc/hosts

위 스크립트는 sub.domain.com에 대한 nslookup의 출력을 가져 와서 배열에 저장합니다. 그런 다음 최상위 값을 $ new에 인쇄하고 / etc / hosts에 할당 된 태그 #RoundRobin의 기존 값을 가져옵니다. 마지막으로 sed replace를 수행합니다.

/ etc / hosts 파일 항목은 다음과 같습니다

127.0.0.1        localhost
::1              localhost
11.12.13.14      sub.domain.com      #RoundRobin

마지막으로이 스크립트를 루트의 크론 탭에 두어 1 시간마다 실행하면 / etc / host round-robin이 생깁니다.

이는 API에서 일부 데이터를 가져 오는 코딩 된 페이지가 있고 API 서버에 대한 DNS 조회로 인해 페이지의 스크립트 실행에서 많은 정지 시간이 발생하는 경우 특히 유용합니다. 간단한 페이지 인 것 같습니다. 비용이 많이 드는 DNS 조회를 피하려면 (특히 사이트에서 분당 수백 번의 트래픽이 많은 트래픽을 처리하는 경우) / etc / hosts를 사용하여 원격 API 서버의 FQDN을 해결해야합니다. 이렇게하면 API 데이터를 가져 와서 페이지를 생성하는 데 CPU 사용량이 크게 줄어 듭니다.


dns 캐싱은 분당 수백 건의 조회를 완화시키지 않습니까?
Xalorous

DNS 서버를 제어하지 않습니다. CentOS 웹 서버에서 설정할 수있는 것입니까?
Satalink


0

예, 작동합니다.

그러나 검색 메커니즘은 일치하는 것을 찾을 때까지 단순히 목록을 수행합니다.

따라서 쓰여진 질문에 대한 대답은 YES이지만 도전이 될 것입니다. 그러나 극복 할 수있는 것은 없습니다.

이것을 시도하십시오 : 각 IP 주소는 실제로 다른 이름을 가져야합니다.


1
아니요, 작동하지 않습니다. / etc / hosts에서 두 번째로 나타나는 값은 사용되지 않습니다. 그리고 다른 호스트 이름으로 두 번째 IP 주소의 이름을 바꾸면 이제로드 밸런싱을 수행하기 위해 앱에서 무언가를 수행해야합니다. DNS 또는 DNS +로드 밸런서가 정답 일 경우 비용이 많이 들고 혼란 스러울 것입니다.
Xalorous

0

이를 수행하는 쉬운 방법은 AWS Route53과 같은 퍼블릭 DNS 서비스를 사용하는 것입니다. 우선 순위가있는 A 레코드 당 여러 IP 주소를 입력 할 수 있습니다

abc.efg.datastore.com

10 141.131.286.1  
20 141.131.286.237 

인증서가 포함되어 있지 않는 한, 이것은 작동하며 규범이나 모범 사례에 어긋납니다.

NSLookup 또는 다른 도메인 쿼리는 두 주소를 모두 반환합니다. 앱이이를 처리 할 수 ​​있어야합니다. 예, 도메인은 로컬 호스트 이름뿐만 아니라 공개적으로 등록 된 도메인이어야합니다.


브라우저가 10을 사용할 수 없으면 브라우저는 20을 대체합니다. 앱에 따라 다르며 가용성을 확인 해야하는 지점이 있어야합니다. 더 복잡한 것을 설정하려는 경우 로드 밸런싱으로 비쌉니다.
bortran

A레코드에는 우선 순위 필드가 없습니다. 일부 신뢰할 수있는 DNS 서비스에는 레코드 가중치가 있지만, 이는 레코드를 포함하거나 배제하여 확률 적으로 수행됩니다.
Matt Nordhoff

0

설정이 쉽고 지침을 따르십시오.

  1. dnsmasq를 설치하십시오
  2. /etc/resolv.conf를 편집하고 "nameserver 127.0.0.1"을 첫 번째 DNS로 설정
  3. 대안으로 일반 DNS 추가 (예 : Google 1) "nameserver 8.8.8.8"을 두 번째 줄로 추가
  4. 두 개의 필수 레코드가 / etc / hosts 파일에 있는지 확인하십시오
  5. 이제 RR-DNS로 두 개의 레코드에 응답 해야하는 명령 호스트 abc.efg.datastore.com

    을 확인 하여 목록의 한 노드가 다운되면 응용 프로그램이 다른 노드에 연결됩니다.

1
IP 스택은 DNS를 참조하기 전에 호스트 파일을 자동으로 확인합니다. IP 정의의 일부라고 생각하지만 Windows와 Linux 모두이 패턴을 따른다는 것을 알고 있습니다. dnsmasq가 필요하지 않으며 이런 방식으로 /etc/resolv.conf를 변경하면 실제 DNS 서버와의 연결이 끊어집니다.
Xalorous

다음 줄은 "네임 서버 8.8.8.8"을 할 수 있도록 사실이 아니다, 그는 예를 들어, 경우 resolv.conf에 여러 줄을 넣을 수 있습니다, + nscd를 기존 레코드를 캐시에 대해,이 방법은 정확히 설명한 문제 해결
호르 Kolodyuk

그것은 당신이 그에게 말한 것이 아닙니다. 당신은 그에게 그의 네임 서버를 루프백하도록 설정하라고 말했습니다. 이름 서버로 루프백을 추가한다고 말하지 않았습니다. 그러나 호스트가 명명되지 않은 상태로 실행 중이거나 루프백을 수신하지 않는 경우에도 해당 주소에 대한 dns 쿼리에 응답하지 않습니다. 호스트 파일에 주소를 추가하기 만하면 주소를 확인할 수 있지만 호스트 이름이 같은 경우 첫 번째 이름 만 사용되며 처음으로 돌아갑니다. 답은 가중 별명이있는 DNS에 가상 호스트를 설정하거나로드 밸런서가있는 데이터베이스를 정면에 배치하는 것입니다.
Xalorous

그것은 바로 그에게 dnsmasq가 네임 서버 프록시 역할을한다는 것입니다. 이 접근법은 효과가 있습니다.
Ihor Kolodyuk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.