Mam serwer internetowy, który łączy się z wewnętrzną bazą danych za pośrednictwem sieci VPN. Istnieją dwa adresy IP (pierwotny i wtórny) do bazy danych z serwera WWW. Jak mogę skonfigurować mój plik / etc / hosts, aby jeśli podstawowy adres IP był niedostępny, użyty zostanie drugi adres IP?
Czy to zadziała dla mojego pliku hosts?
141.131.286.1 abc.efg.datastore.com #primary
141.131.286.237 abc.efg.datastore.com #secondary
linux
networking
hosts
Mike T.
źródło
źródło
Odpowiedzi:
Plik hosts nie zapewnia takiego mechanizmu. Jeśli podasz dwa adresy IP dla tej samej nazwy, użyty zostanie tylko pierwszy. Tak więc nie ma czegoś takiego jak pierwotne i wtórne adresy IP.
Ponadto plik hosts nie obsługuje adresów URL. Po prostu obsługuje nazwy takie jak te podane w pytaniu. Adres URL zawiera pełną ścieżkę i protokół, taki jak
http://host/path/to/resource
.źródło
Za pomocą
/etc/hosts
pliku nie można zapewnić odporności lub równoważenia obciążenia za pomocą okrągłego robina - nie jest on przeznaczony do tego celu.Zamiast tego masz do wyboru ... (w określonej kolejności)
źródło
/ etc / hosts nie obsługuje round robin, ale możesz napisać prosty skrypt bash, aby zastąpić wpis oznaczony komentarzem #RoundRobin (lub dowolnym innym znacznikiem, którego chcesz użyć, po prostu odzwierciedl go w wierszu grep w skrypcie) .
Powyższy skrypt pobiera dane wyjściowe nslookup dla sub.domain.com i przechowuje je w tablicy. Następnie drukuje najwyższą wartość do $ new i pobiera istniejącą wartość dla tagu #RoundRobin przypisanego w / etc / hosts ... na koniec wykonuje zamianę sed
Wpis pliku / etc / hosts wyglądałby tak
Na koniec umieść ten skrypt w crontabie roota, aby uruchamiał się co około godzinę, a teraz będziesz mieć okrągły / robin / etc / host.
Jest to szczególnie przydatne, jeśli masz zakodowaną stronę, która pobiera niektóre dane z interfejsu API, a wyszukiwanie DNS dla serwera API powoduje długi czas oczekiwania na wykonanie skryptu strony ... co powoduje wysokie zużycie procesora w stosunku do tego, co inaczej wydają się być prostą stroną. Aby uniknąć kosztownego wyszukiwania DNS (szczególnie jeśli twoja witryna robi setki z nich na minutę, aby zrobić duży ruch), powinieneś użyć / etc / hosts, aby rozwiązać FQDN zdalnego serwera API. Znacząco zmniejszy to użycie procesora do pobierania danych API i generowania strony.
źródło
Tak, to by zadziałało.
Jednak mechanizm wyszukiwania po prostu idzie, robi listę, aż znajdzie dopasowanie.
Tak więc, chociaż odpowiedź na pytanie w formie pisemnej brzmi TAK, będzie to wyzwanie. Ale nic nie do pokonania.
Spróbuj tego: każdy z tych adresów IP naprawdę musi mieć różne nazwy.
źródło
Łatwym sposobem na osiągnięcie tego byłoby po prostu skorzystanie z publicznej usługi DNS, takiej jak AWS Route53. Możesz wprowadzić wiele adresów IP na rekord A z priorytetem
abc.efg.datastore.com
Tak długo, jak nie są zaangażowane żadne certyfikaty, działa to i nie narusza nawet żadnych norm ani najlepszych praktyk.
NSLookup lub inne zapytania domeny zwrócą oba adresy. Twoja aplikacja musi sobie z tym poradzić. I tak, domena musi być domeną publicznie zarejestrowaną, a nie tylko lokalną nazwą hosta.
źródło
A
rekordy nie mają pola pierwszeństwa. Niektóre autorytatywne usługi DNS mają ważenie rekordów, ale odbywa się to poprzez probabilistyczne włączenie lub wyłączenie rekordów.Łatwy w konfiguracji, postępuj zgodnie z instrukcją:
która powinna odpowiedzieć na dwa rekordy za pomocą RR-DNS, więc jeśli jeden węzeł z listy nie działa - Twoja aplikacja zostanie połączona z innym
źródło