Tetapkan beberapa IP untuk 1 Entri dalam file hosts


29

Saya memiliki server web yang terhubung ke basis data internal melalui VPN. Ada 2 IP (primer dan sekunder) ke database dari server web. Bagaimana saya bisa mengatur file / etc / hosts saya sehingga jika IP primer tidak tersedia maka IP sekunder akan digunakan?

Apakah ini berfungsi untuk file host saya?

141.131.286.1   abc.efg.datastore.com   #primary

141.131.286.237 abc.efg.datastore.com   #secondary

Jawaban:


26

File host tidak menyediakan mekanisme seperti itu. Jika Anda mencantumkan dua IP untuk nama yang sama, hanya yang pertama yang akan digunakan. Jadi, tidak ada yang namanya IP primer dan sekunder.

Juga, file host tidak menangani URL. Itu hanya menangani nama-nama seperti yang disediakan dalam pertanyaan. URL berisi jalur dan protokol lengkap seperti http://host/path/to/resource.


Judul dan penamaan yang diedit dalam pertanyaan OP untuk menghilangkan kebingungan tentang URL / host.
dmourati

14

Anda tidak bisa memberikan ketahanan atau penyeimbangan muatan round robin melalui /etc/hostsfile - itu tidak dirancang untuk tujuan itu.

Sebagai gantinya , opsi Anda adalah ... (tanpa urutan tertentu)

  1. Konfigurasikan jaringan Anda dengan benar, sehingga rute berubah ketika tautan dijatuhkan
  2. Gunakan penyeimbangan beban round-robin DNS (bukan A Good Idea TM ) menggunakan layanan terkelola (mis. Loaddns.com atau dnsmadeeasy.com dll.)
  3. Gunakan penyeimbang beban L3 lokal untuk lalu lintas keluar (HAProxy?) Dengan back-end yang didefinisikan sebagai diperlukan
  4. Bangun ketahanan ke dalam aplikasi web Anda sendiri

Penyeimbangan beban round-robin DNS biasanya tidak tangguh. Satu dipilih dan yang lain tidak dicoba.
Lingkaran Antti Rytsölä Konsultasikan

Pilihan lain bisa menggunakan netcat atau perangkat lunak lain untuk meneruskan koneksi ke IP. Kemudian ubah maju jika satu IP hilang.
Lingkaran Antti Rytsölä Konsultasikan

1
@anttiR DNS RR saja tidak memiliki ketahanan, tetapi digunakan melalui penyedia layanan DNS yang dikelola. Saya telah mengedit jawaban saya dan memberikan beberapa contoh agar lebih jelas.
Ben Lessani - Sonassi

Saya ragu itu akan bekerja dengan database. Mereka memiliki kecenderungan untuk mengambil satu IP dan menaatinya. Situs web internet di sisi lain akan bekerja dengan baik.
Lingkaran Antti Rytsölä Konsultasikan

Itu akan tergantung pada resolver dari mesin host. Jika resolver DNS diatur menjadi layanan non-caching - atau polling DB pendaftar DNS secara langsung, maka itu akan berhasil. Tapi seperti yang saya katakan, itu bukan ide yang bagus , itu hanya ide .
Ben Lessani - Sonassi

3

/ etc / hosts tidak mendukung round robin tetapi Anda dapat menulis skrip bash sederhana untuk menggantikan entri yang ditandai dengan komentar #RoundRobin (atau tag lain yang ingin Anda gunakan, hanya mencerminkannya di baris grep di skrip) .

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

Script di atas mengambil output dari nslookup untuk sub.domain.com dan menyimpannya dalam sebuah array. Ini kemudian mencetak nilai paling atas ke $ baru dan mengambil nilai yang ada untuk tag #RoundRobin ditugaskan di / etc / hosts ... terakhir, ia melakukan penggantian sed

/ etc / hosts entri file akan terlihat seperti ini

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

Terakhir, tempatkan skrip ini di crontab root untuk menjalankan setiap jam atau lebih dan sekarang Anda akan memiliki / etc / host round-robin.

Ini sangat berguna jika Anda memiliki halaman kode yang menarik beberapa data dari API dan pencarian DNS untuk server API menyebabkan banyak waktu hang dalam eksekusi skrip halaman ... menghasilkan konsumsi CPU yang tinggi untuk apa yang sebaliknya tampaknya halaman sederhana. Untuk menghindari pencarian DNS yang mahal (terutama jika situs Anda melakukan ratusan kali per menit untuk lalu lintas yang padat), Anda harus menggunakan / etc / hosts untuk menyelesaikan FQDN dari server API jarak jauh. Ini secara dramatis akan mengurangi penggunaan CPU untuk menarik data API dan menghasilkan halaman.


Bukankah dns caching mengurangi ratusan pencarian Anda per menit?
Xalorous

Saya tidak mengontrol server DNS, apakah itu sesuatu yang dapat saya atur di server web CentOS?
Satalink


0

Ya, itu akan berhasil.

Namun, mekanisme pencarian hanya melakukan daftar sampai menemukan kecocokan.

Jadi, sementara jawaban untuk pertanyaan yang ditulis adalah YA, itu akan menjadi tantangan. Tapi tidak ada yang bisa diatasi.

Coba ini: Masing-masing alamat IP tersebut benar-benar perlu memiliki nama yang berbeda.


1
Tidak, itu tidak akan berhasil. Terjadinya kedua nilai di / etc / hosts tidak akan pernah digunakan. Dan jika dia mengganti nama alamat IP kedua dengan nama host yang berbeda, sekarang dia harus melakukan sesuatu di aplikasi untuk melakukan load balancing. Itu akan menjadi mahal dan kotor, ketika DNS atau DNS + Load Balancer adalah jawaban yang tepat.
Xalorous

0

Cara mudah untuk mewujudkan hal ini adalah dengan menggunakan layanan DNS publik, seperti AWS Route53. Anda dapat memasukkan beberapa alamat IP per catatan A dengan prioritas

abc.efg.datastore.com

10 141.131.286.1  
20 141.131.286.237 

Selama tidak ada sertifikat yang terlibat, ini berfungsi dan bahkan tidak bertentangan dengan norma atau praktik terbaik apa pun.

NSLookup atau kueri domain lainnya akan mengembalikan kedua alamat. Aplikasi Anda harus mampu menangani ini. Dan ya, domain tersebut harus terdaftar secara publik, bukan hanya nama host lokal.


Browser akan dapat menangani hal ini, jika 10 tidak tersedia maka akan mundur pada 20. Ini pasti tergantung pada aplikasi dan juga harus ada titik di mana Anda memeriksa ketersediaan - jika Anda ingin mengatur sesuatu yang lebih rumit dan mahal dengan load balancing.
bortran

Acatatan tidak memiliki bidang prioritas. Beberapa layanan DNS resmi memiliki bobot catatan, tetapi hal itu dilakukan secara probabilistik termasuk atau tidak termasuk catatan.
Matt Nordhoff

0

Mudah diatur, ikuti instruksi:

  1. instal dnsmasq
  2. sunting /etc/resolv.conf dan set "nameserver 127.0.0.1" sebagai DNS pertama
  3. tambahkan DNS normal sebagai alternatif (google one misalnya) "nameserver 8.8.8.8" sebagai baris kedua
  4. pastikan dua catatan yang diperlukan ada di file / etc / hosts Anda
  5. sekarang periksa dengan host perintah abc.efg.datastore.com

    yang seharusnya merespons dua catatan dengan RR-DNS jadi jika satu node dari daftar tidak aktif - aplikasi Anda akan terhubung ke yang lain

1
Tumpukan IP secara otomatis memeriksa file host sebelum berkonsultasi dengan DNS. Saya percaya ini adalah bagian dari definisi IP, tetapi saya tahu bahwa Windows dan Linux sama-sama mengikuti pola ini. Dia tidak membutuhkan dnsmasq, dan jika dia mengubah /etc/resolv.conf dengan cara ini, dia akan kehilangan koneksi ke server DNS aslinya.
Xalorous

tidak benar, ia dapat meletakkan beberapa baris ke resolv.conf sehingga baris berikutnya dapat menjadi "nameserver 8.8.8.8", misalnya, + nscd untuk merekam caching yang ada, pendekatan ini persis memecahkan masalah yang dijelaskan
Ihor Kolodyuk

Bukan itu yang kau suruh dia lakukan. Anda mengatakan kepadanya untuk mengatur server nama ke loopback. Anda TIDAK mengatakan tambahkan loopback sebagai server nama. Tetapi jika tuan rumah tidak berjalan bernama, atau bahkan jika itu dan itu tidak mendengarkan pada loopback, maka dns pertanyaan ke alamat itu akan tidak dijawab. Cukup menambahkan alamat ke file host akan memungkinkan mereka untuk diselesaikan, tetapi jika mereka memiliki nama host yang sama, hanya yang pertama yang akan digunakan dan kita kembali di awal. Jawabannya adalah dalam menyiapkan host virtual di DNS dengan alias tertimbang, atau di depan database dengan penyeimbang beban.
Xalorous

Itulah tepatnya yang saya katakan kepadanya, dnsmasq bertindak sebagai proxy server nama. Pendekatan ini berhasil.
Ihor Kolodyuk
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.