Назначить несколько IP-адресов 1-й записи в файле hosts

У меня есть веб-сервер, который подключается к внутренней базе данных через VPN. В базе данных есть два IP-адреса (первичные и вторичные) с веб-сервера. Как настроить файл /etc /hosts так, чтобы, если первичный IP-адрес недоступен, будет использоваться вторичный IP-адрес?

Будет ли это работать для моего хоста?

141.131.286.1   abc.efg.datastore.com   #primary

141.131.286.237 abc.efg.datastore.com   #secondary
21 голос | спросил Mike T 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 19 Sep 2012 16:23:48 +0400 2012, 16:23:48

4 ответа


21

Файл hosts не предоставляет такой механизм. Если вы укажете два IP-адреса с тем же именем, будет использоваться только первый. Таким образом, нет такого понятия, как первичный и вторичный IP-адреса.

Кроме того, файл hosts не обрабатывает URL-адреса. Он просто обрабатывает имена, подобные тем, которые заданы в вопросе. URL-адрес содержит полный путь и протокол, такие как http://host/path/to/resource.

ответил Khaled 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 19 Sep 2012 16:47:23 +0400 2012, 16:47:23
13

Вы не можете обеспечить балансировку нагрузки или циклическую балансировку нагрузки через файл /etc/hosts - он не предназначен для этой цели.

Вместо ваши параметры ... (в определенном порядке)

  1. Настройте свою сеть правильно, чтобы маршруты менялись при удалении ссылки.
  2. Использовать глобальную балансировку нагрузки DNS (не A Good Idea TM ) с помощью управляемой службы (например, loaddns.com или dnsmadeeasy.com и т. д.).
  3. Использовать локальный балансировщик нагрузки L3 для исходящего трафика (HAProxy?) с концами, определенными при необходимости
  4. Создайте устойчивость в своем веб-приложении
ответил Ben Lessani - Sonassi 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 19 Sep 2012 19:10:35 +0400 2012, 19:10:35
1

/etc /hosts не поддерживает round robin, но вы можете написать простой скрипт bash для sed, заменив запись, помеченную комментарием #RoundRobin (или любым другим тегом, который вы хотите использовать, просто отразите его в строке 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

Вышеприведенный скрипт захватывает вывод nslookup для sub.domain.com и сохраняет его в массиве. Затем он печатает наибольшее значение в $ new и захватывает существующее значение для тега #RoundRobin, назначенного в /etc /hosts ... наконец, он выполняет замену sed

/etc /hosts будет выглядеть так:

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

Наконец, поместите этот скрипт в корневой каталог root, чтобы он запускался каждый час или около того, и теперь у вас будет круговой механизм /etc /host.

Это особенно полезно, если у вас есть закодированная страница, которая вытаскивает некоторые данные из API, а поиск DNS для сервера API вызывает много времени на время выполнения скрипта страницы ... что приводит к высокому потреблению процессора для что в противном случае было бы простой страницей. Чтобы избежать дорогостоящего поиска DNS (особенно, если ваш сайт делает сотни из них в минуту для интенсивного трафика), вы должны использовать /etc /hosts для разрешения полного доменного имени удаленного сервера API. Это значительно сократит использование ЦП для вытягивания данных API и создания страницы.

ответил Satalink 31 SunEurope/Moscow2017-12-31T15:03:56+03:00Europe/Moscow12bEurope/MoscowSun, 31 Dec 2017 15:03:56 +0300 2017, 15:03:56
0

Да, это сработает.

Однако механизм поиска просто идет до списка, пока не найдет совпадение.

Таким образом, хотя ответ на поставленный вопрос - ДА, это будет проблемой. Но ничего непреодолимого.

Попробуйте следующее: каждый из этих IP-адресов действительно должен иметь разные имена.

ответил SDsolar 22 Mayam18 2018, 06:47:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132