Qual é o comportamento esperado de múltiplas entradas de nomes de host com endereços IP diferentes em/etc/hosts?

Qual é o comportamento esperado de múltiplas entradas de nomes de host com endereços IP diferentes em/etc/hosts?

Eu sei que isso foi discutidoem diversos lugares, mas não parece haver uma resposta definitiva ainda - pelo menos não para RHEL 6. Só espero que alguém possa apontar paracomoestá funcionando, então posso cavar um pouco.

Versão curta:Eu tenho um nó host OpenVZ com um endereço IP público que atua como um proxy reverso para vários contêineres OpenVZ com endereços IP privados. Eu criei 2 containers com o mesmo nome (se você quiser saber o porquê, pule para a versão longa abaixo), e o HN também tem essas entradas (entre outras) em seu /etc/hosts:

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

Posso usar o OpenVZ para suspender/retomar qualquer um desses hosts por ID, e o proxy reverso parece encaminhar solicitações magicamente para qualquer host que esteja em execução (por exemplo, para o endereço IP 10.0.0.130ou 10.0.0.131. Mas não consigo descobrir por nada qual software está fazendo isso. É o Apache? É algo no sistema de rede do HN. Parece funcionar, mas gostaria de saber mais sobre por que/como, pois também parece haver? grandes diferenças de opinião sobre sedevetrabalhar em tudo. Para ser claro, não estou procurando round-robin ou balanceamento de carga aqui. Mudança simples e manual de um contêiner OpenVZ para outro.

Versão Lomg:Ao configurar alguns scripts para criar e gerenciar uma série de contêineres OpenVZ, criei um script chamado make_clone.shque pega um modelo e cria um novo contêiner. O script usa 2 parâmetros: o ID do contêiner e o nome do host desejado. Uma das coisas que ele faz é alocar um novo 10.0.0.*endereço IP para o contêiner e configurar algumas redes, das quais um elemento é colocar uma entrada no /etc/hostsarquivo do nó host.

Ao testar alguns scripts de backup/restauração para esses contêineres, eu queria 'fingir' que um contêiner específico havia morrido, ativar outro com o mesmo nome e restaurar o backup. Em vez de excluir o contêiner original, eu apenas vzctl stop 130o colocava off-line. Criei então um novo container com ID 131, mas com o mesmo nome. Depois de instalado, restaurei o banco de dados MySQL e verifiquei (através de um navegador) se conseguia acessá-lo - está rodando o Joomla com algumas personalizações - e estava tudo bem.

Mas então percebi que nos Host Node's /etc/hostseu tinha essas 2 entradas (entre outras):

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

O nó host também atua como um proxy reverso. Apenas o Host Node possui um endereço IP externo, e sua configuração Apache mapeia efetivamente subdomínios em Containers. Portanto, assim como as entradas acima em /etc/hosts, ele também possui seções como esta na configuração do httpd:

` Nome do servidor 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>

`

No cenário que estou descrevendo, na verdade acabaria com 2 dessas seções devido aos scripts, mas elas seriam idênticas - refere-se ao Container pelo nome do host e não pelo IP, o que me faz pensar que não é o Apache em si que está escolhendo o contêiner 'funcional'. Agora posso navegar http://testbackup.xxx.yy/(usando o nome de domínio real, obviamente) e o Apache parece feliz em encaminhar as solicitações para qualquer um deles 10.0.0.130ou 10.0.0.131que esteja ativo. Posso alternar entre eles simplesmente suspendendo/retomando os contêineres OpenVZ.

Eu não esperava que isso funcionasse - mas é bom que funcione. Minha pergunta é: deveria? Pode-se confiar nele? Ou é apenas um acaso que irá parar de funcionar quando qualquer coisa que esteja em algum outro arquivo de configuração em algum lugar for arrumada?

Responder1

Como um host pode ter vários endereços IP, o que você vê é um comportamento esperado. É como ter vários apelidos, como: chefe, haus, selva-jim, etc... Todo mundo que me conhece sabe que esses são meus apelidos (embora na verdade não sejam meus apelidos).

A menos que você esteja tentando acessar o recurso via endereço IP, seus sistemas deverão funcionar como se nada tivesse acontecido. (Tecnicamente falando, gerar um novo endereço IP em um contêiner não deve afetar seus serviços, desde que esses serviços não estejam vinculados ao endereço IP. No seu caso, você pode ter tido sorte com seus aplicativos funcionando perfeitamente. )

Exemplo: eu poderia atribuir 4 endereços IP a um host:

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

Exemplo 1

Todos esses endereços IP apontam paratestbackup.xxx.yy, o que significa que, se eu tentar acessartestbackup.xxx.yy, chegarei a qualquer um deles, dependendo de qual endereço IP estiver ativo/responsivo no momento da minha solicitação. Novamente, isso só funciona, desde que o serviço que você está tentando acessar não esteja vinculado especificamente a esse endereço IP.

No entanto, se você derrubou10.0.0.133, e você tentou acessar o recursoespecificamentede 10.0.0.133 (ou seja http://10.0.0.133/), você receberia um erro.

ATUALIZAR:

Se você estiver usando 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>

Esta configuração permitirá que dois sites usem o mesmo endereço IP e porta. Se é assim que você configurou seus VirtualHosts, então VirtualHosts está lidando com seu roteamento automático (se você listou os dois ServerNamecampos como o mesmo host, teoricamente).

Você indicou que estava usando o OpenVZ. O OpenVZ pode permitir que seus sites sejam executados de forma independente, mas fisicamente estão todos no mesmo host. A menos que você atribua a cada VE individual seu próprio nome de host e tente acessar esse nome de hostespecificamenteenquanto estiver inativo, você obterá o comportamento esperado do site no ar.

Por exemplo, se você atribuiu um nome de host diferente a um dos endereços OpenVZ/IP:

10.0.0.133 mybackup.xxx.yy

Se você o desativasse 10.0.0.133, não seria mais possível acessá-lo mybackup.xxx.yy, mas seria possível acessá-lo testbackup.xxx.yy(porque ele passa por outros endereços IP que ainda estão ativos e associados testbackup.xxx.yy).

insira a descrição da imagem aqui

informação relacionada