/etc/hosts에서 IP 주소가 서로 다른 여러 호스트 이름 항목의 예상 동작은 무엇입니까?

/etc/hosts에서 IP 주소가 서로 다른 여러 호스트 이름 항목의 예상 동작은 무엇입니까?

나는 이것이 논의된 것을 안다~에 여러 개의 장소, 하지만 아직 확실한 대답은 없는 것 같습니다. 적어도 RHEL 6의 경우는 아닙니다. 누군가가 다음을 지적할 수 있기를 바랄 뿐입니다.어떻게작동 중이므로 조금 파볼 수 있습니다.

짧은 버전:개인 IP 주소가 있는 여러 OpenVZ 컨테이너에 대한 역방향 프록시 역할을 하는 공용 IP 주소가 있는 OpenVZ 호스트 노드가 있습니다. 나는 동일한 이름을 가진 2개의 컨테이너를 생성했으며(이유를 알고 싶다면 아래의 긴 버전으로 건너뛰십시오) HN에는 다음 항목도 있습니다 /etc/hosts.

# Generated by make_clone.sh
10.0.0.130 testbackup.xxx.yy
10.0.0.131 testbackup.xxx.yy

OpenVZ를 사용하여 ID로 이러한 호스트 중 하나를 일시 중지/재개할 수 있으며 역방향 프록시는 마술처럼 실행 중인 호스트(예: IP 주소 10.0.0.130또는 10.0.0.131.)로 요청을 라우팅하는 것 같습니다. 하지만 평생 알 수는 없습니다. 어떤 소프트웨어가 이 작업을 수행하고 있나요? HN의 네트워킹 시스템에 있는 것인가요? 작동하는 것 같지만 그 이유와 방법에 대해 더 알고 싶습니다. 여부에 대한 의견 차이가 크다.~해야 한다전혀 일하지 마세요. 분명히 말하면 여기서는 라운드 로빈이나 로드 밸런싱을 찾고 있지 않습니다. 하나의 OpenVZ 컨테이너에서 다른 컨테이너로 간단하게 수동으로 전환할 수 있습니다.

Lomg 버전:make_clone.sh일련의 OpenVZ 컨테이너를 생성하고 관리하기 위해 일부 스크립트를 설정하는 동안 템플릿을 사용하여 새 컨테이너를 생성하는 스크립트를 만들었습니다 . 스크립트는 컨테이너 ID와 원하는 호스트 이름이라는 2개의 매개변수를 사용합니다. 수행하는 작업 중 하나는 10.0.0.*컨테이너에 새 IP 주소를 할당하고 일부 네트워킹을 구성하는 것입니다. 그 중 한 요소는 호스트 노드의 /etc/hosts파일에 항목을 추가하는 것입니다.

이러한 컨테이너에 대한 일부 백업/복원 스크립트를 테스트하는 동안 특정 컨테이너가 죽은 것처럼 '가장'하고 동일한 이름의 다른 컨테이너를 가동하여 백업을 복원하고 싶었습니다. 원래 컨테이너를 실제로 삭제하는 대신 vzctl stop 130오프라인으로 가져가곤 했습니다. 그런 다음 ID가 131이지만 이름은 동일한 새 컨테이너를 만들었습니다. 일단 작동되면 MySQL 데이터베이스를 복원하고 (브라우저를 통해) 액세스할 수 있는지 확인했습니다. 일부 사용자 정의를 통해 Joomla를 실행하고 있었고 모든 것이 정상이었습니다.

그러나 나는 호스트 노드의 에 /etc/hosts다음과 같은 2개의 항목이 있다는 것을 발견했습니다.

# Generated by make_clone.sh
10.0.0.130 testbackup.xxx.yy
10.0.0.131 testbackup.xxx.yy

호스트 노드는 역방향 프록시 역할도 합니다. 호스트 노드에만 외부 IP 주소가 있으며 Apache 구성은 하위 도메인을 컨테이너에 효과적으로 매핑합니다. 따라서 위의 /etc/hosts 항목뿐만 아니라 httpd 구성에도 다음과 같은 섹션이 있습니다.

` 서버 이름 testbackup.xxx.yy

    ProxyRequests Off
    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    ProxyPass /server-status !
    ProxyPass / http://testbackup.xxx.yy/
    ProxyPassReverse / http://testbackup.xxx.yy/

    <Location />
            Order allow,deny
            Allow from all
    </Location>

`

내가 설명하는 시나리오에서는 실제로 스크립트로 인해 이러한 섹션 중 2개로 끝나지만 동일할 것입니다. 이는 IP가 아닌 호스트 이름으로 컨테이너를 참조하므로 선택하는 것이 Apache 자체가 아니라고 생각하게 만듭니다. '작동하는' 컨테이너. 이제 http://testbackup.xxx.yy/(당연히 실제 도메인 이름을 사용하여) 찾아볼 수 있으며 Apache는 10.0.0.130또는 중 어느 쪽으로든 요청을 라우팅하는 데 만족해 보입니다 10.0.0.131. OpenVZ 컨테이너를 일시 중지/재개하여 간단히 전환할 수 있습니다.

나는 이것이 작동할 것이라고 기대하지 않았습니다. 그러나 작동하게 되어 기쁩니다. 내 질문은, 그래야 할까요? 의지할 수 있나요? 아니면 어딘가에 있는 다른 구성 파일에 있는 보풀이 정리되면 작동을 멈추는 우연에 불과합니까?

답변1

호스트는 여러 IP 주소를 가질 수 있으므로 보고 있는 동작은 예상된 동작입니다. 마치 보스맨, 하우스, 정글짐 등과 같은 여러 개의 별명을 갖는 것과 같습니다. 저를 아는 사람들은 그것이 제 별명이라는 것을 압니다(실제로 제 별명은 아닙니다).

IP 주소를 통해 리소스에 액세스하려고 시도하지 않는 한 시스템은 아무 일도 일어나지 않은 것처럼 작동해야 합니다. (기술적으로 말하면, 해당 서비스가 IP 주소에 연결되지 않는 한 컨테이너에 새 IP 주소를 생성해도 서비스에 영향을 주어서는 안 됩니다. 귀하의 경우 앱이 원활하게 실행되는 행운을 누렸을 수도 있습니다. )

예: 하나의 호스트에 4개의 IP 주소를 할당할 수 있습니다.

10.0.0.130 testbackup.xxx.yy
10.0.0.131 testbackup.xxx.yy
10.0.0.132 testbackup.xxx.yy
10.0.0.133 testbackup.xxx.yy

실시예 1

해당 IP 주소는 모두 다음을 가리킵니다.테스트백업.xxx.yy즉, 내가 액세스를 시도하면테스트백업.xxx.yy, 요청 시 활성/응답하는 IP 주소에 따라 그 중 하나에 도달합니다. 다시 말하지만, 이는 액세스하려는 서비스가 해당 IP 주소에 구체적으로 연결되어 있지 않은 경우에만 작동합니다.

하지만, 내려놨다면10.0.0.133, 귀하는 리소스에 액세스하려고 시도했습니다.구체적으로10.0.0.133(즉 http://10.0.0.133/)부터 오류가 발생합니다.

업데이트:

Apache VirtualHosts를 사용하는 경우:

<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example.com

# Other directives here

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/example2
ServerName www.example.org

# Other directives here

</VirtualHost>

이 구성을 사용하면 두 사이트가 동일한 IP 주소와 포트를 사용할 수 있습니다. 이것이 VirtualHosts를 설정한 방법이라면 VirtualHosts가 자동 라우팅을 처리하는 것입니다( ServerName이론적으로 두 필드를 모두 동일한 호스트로 나열한 경우).

OpenVZ를 사용하고 있다고 표시하셨습니다. OpenVZ를 사용하면 사이트가 독립적으로 실행될 수 있지만 물리적으로는 모두 동일한 호스트에 있습니다. 각 개별 VE에 고유한 호스트 이름을 할당하고 해당 호스트 이름에 액세스하려고 시도하지 않는 한구체적으로다운된 동안 사이트의 예상 동작이 작동하게 됩니다.

예를 들어, OpenVZ/IP 주소 중 하나에 다른 호스트 이름을 할당한 경우:

10.0.0.133 mybackup.xxx.yy

삭제하면 더 이상 10.0.0.133해당 항목에 액세스할 수 없지만 mybackup.xxx.yy에서 액세스할 수는 있습니다 testbackup.xxx.yy(아직 작동 중이고 와 연결된 다른 IP 주소를 통과하기 때문입니다 testbackup.xxx.yy).

여기에 이미지 설명을 입력하세요

관련 정보