Atribuir vários IPs a 1 Entrada no arquivo hosts

21

Eu tenho um web sever que se conecta a um banco de dados interno através de uma VPN. Existem 2 IPs (primário e secundário) no banco de dados do servidor da web. Como posso configurar meu arquivo / etc / hosts para que, se o IP primário não estiver disponível, o IP secundário seja usado?

Isso funcionaria para o arquivo hosts?

141.131.286.1   abc.efg.datastore.com   #primary

141.131.286.237 abc.efg.datastore.com   #secondary
    
por Mike T 19.09.2012 / 14:23

4 respostas

21

O arquivo hosts não fornece tal mecanismo. Se você listar dois IPs para o mesmo nome, apenas o primeiro será usado. Portanto, não existem IPs primários e secundários.

Além disso, o arquivo hosts não manipula URLs. Apenas lida com nomes como os fornecidos na questão. Um URL contém caminho e protocolo completos, como http://host/path/to/resource .

    
por 19.09.2012 / 14:47
13

Você não pode fornecer resiliência ou balanceamento de carga round robin através do arquivo /etc/hosts - ele não foi projetado para essa finalidade.

Em vez , suas opções são ... (em nenhuma ordem específica)

  1. Configure sua rede corretamente, para que as rotas sejam alteradas quando um link for eliminado
  2. Use o balanceamento de carga de round-robin do DNS (não Uma boa ideia TM ) usando um serviço gerenciado (por exemplo, loaddns.com ou dnsmadeeasy.com, etc.)
  3. Use um balanceador de carga L3 local para o tráfego de saída (HAProxy?) com os back ends definidos como necessários
  4. Construa a resiliência em seu próprio aplicativo da web
por 19.09.2012 / 17:10
1

/ etc / hosts não suporta round robin, mas você pode escrever um simples script bash para substituir uma entrada marcada com um comentário #RoundRobin (ou qualquer outra tag que você queira usar, apenas reflita na linha grep em o script).

#!/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

O script acima captura a saída de nslookup para sub.domain.com e armazena-a em uma matriz. Em seguida, ele imprime o valor mais alto para $ new e pega o valor existente para a tag #RoundRobin atribuído em / etc / hosts ... por último, ele executa uma substituição de sed

A entrada do arquivo / etc / hosts seria semelhante a esta

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

Por fim, coloque este script no crontab da raiz para ser executado a cada hora e agora você terá um round robin / etc / host.

Isso é particularmente útil se você tiver uma página codificada que está obtendo alguns dados de uma API e a pesquisa de DNS do servidor da API estiver causando muito tempo de espera na execução do script da página ... resultando em alto consumo de CPU o que de outra forma pareceria ser uma página simples. Para evitar a dispendiosa pesquisa de DNS (especialmente se seu site está fazendo centenas deles por minuto para tráfego intenso), você deve usar / etc / hosts para resolver o FQDN do servidor de API remoto. Isso reduzirá drasticamente o uso da CPU para extrair os dados da API e gerar a página.

    
por 31.12.2017 / 13:03
0

Sim, funcionaria.

No entanto, o mecanismo de pesquisa simplesmente vai até a lista até encontrar uma correspondência.

Portanto, embora a resposta à pergunta escrita seja SIM, será um desafio. Mas nada insuperável.

Tente isto: cada um desses endereços IP realmente precisa ter nomes diferentes.

    
por 22.05.2018 / 05:47