Bagaimana sebagian besar peramban berperilaku jika mereka mendapatkan beberapa A-record dari server DNS? Apakah menempel pada satu IP selama itu dapat dijangkau (dan hanya menggunakan yang lain jika IP turun)? Atau apakah mereka beralih sepanjang waktu tanpa alasan?
Jika mayoritas browser saat ini menempel satu IP, DNS-RR akan cukup bagi saya sebagai solusi failover sederhana.
domain-name-system
failover
high-availability
round-robin
HiPerFreak
sumber
sumber
Jawaban:
Setiap browser memiliki metode sendiri dalam menangani round-robin DNS, saya telah menghabiskan waktu hari ini untuk meneliti masalah ini dan akan terus memperbarui jawaban saya karena saya menemukan bukti implementasi yang akan membatasi jawaban saya ke browser yang mengekspos perilaku mereka.
Google Chrome
Google Chrome (digunakan v58) akan meminta semua entri host untuk alamat (A, AAAA, CNAME) dan memasukkannya ke dalam array ( address_list ). Chrome kemudian akan mencoba untuk membuka soket pada setiap alamat IP dalam urutan dari pertama hingga terakhir, chrome tidak akan mencoba IP tercepat atau terdekat, mengasumsikan IP pertama (diberikan oleh resolver dns hulu Anda) adalah IP terbaik. Dalam tes saya mengikat dan windows dns server memberikan urutan IP yang berbeda per pencarian, memberikan apa yang tampak seperti 50/50 membagi bandwidth untuk setiap IP. Fungsi ini terbuka di
chrome://net-internals/#events&q=type:SOCKET%20is:active
Curl (libcurl / 7.54.0)
Curl juga memiliki fungsi fail-over ini tetapi
--connect-timeout
jauh lebih lama daripada default di chrome, chrome gagal segera, Curl tidak. Jika Anda menggunakan libcurl dan ingin selamat dari contoh round-robin dns di mana satu IP gagal, (berfungsi dalam chrome tetapi tidak dalam kode) pastikan untuk menentukan nilai ini lebih rendah.DEFAULT_CONNECT_TIMEOUT: 0 membuat saya berpikir ini tidak mungkin dengan curl.
* After 149990ms connect time, move on!
Di kedua browser , IP tidak lengket , mereka mengikuti TTL yang diberikan dalam DNS dan begitu ttl kedaluwarsa (chrome mempertahankan ini secara internal, curl bertanya pada setiap permintaan), pemilihan ip dilakukan setiap kali seperti dijelaskan di atas.
Apa artinya ini? DNS-RR ok untuk beberapa sistem, tetapi tidak dirancang untuk failover. Anda harus mengharapkan bahwa semua hasil dari pencarian DNS (sumber kebenaran) valid dan tersedia untuk melayani lalu lintas. Ada banyak cara untuk memastikan ketersediaan IP, seperti IP float virtual, BGP / Trik perutean, dll. Gunakan mereka .
Semua tes yang dilakukan di lingkungan IPv4 saja, akan kembali dengan hasil tumpukan ganda begitu infrastruktur tersedia untuk diuji.
Saya berspekulasi bahwa perubahan ini adalah efek samping dari IPv6-Fallback RFC Happy Eyeballs
Perbarui Pertimbangan yang bermanfaat, RR DNS hanya dapat membantu dengan load balancing, bukan kegagalan aplikasi, jika salah satu node Anda memiliki 503 Anda akan melayani 40-60% jika lalu lintas Anda 503s. Asumsi dibuat bahwa semua IP yang terdaftar adalah titik akhir kerja yang valid jika dapat dijangkau
sumber
sunting: Mengedit jawaban saya sejak HiPerFreak menyekolahkan saya.
Server DNS akan mengembalikan daftar semua catatan A yang dimilikinya untuk nama host yang diberikan. Di mana round robin masuk adalah bahwa itu berputar bagaimana daftar itu dipesan. Tautan yang diposkan itu adalah contoh yang bagus tentang bagaimana browser web akan menggunakan daftar itu.
Round Robinning dapat digunakan untuk bentuk penyeimbangan beban yang sangat primitif, tetapi merupakan pengganti yang sangat buruk untuk penyeimbangan beban nyata, karena jika salah satu host dalam rotasi round robin turun, server DNS akan menjadi lebih bijak dan akan tetap letakkan alamat IP dari simpul yang jatuh dalam daftar.
sumber
Lihat ini pertanyaan saya (dan jawab): Bagaimana browser menangani banyak IP .
Robin dns putaran pendek tidak meningkatkan ketersediaan sama sekali. Browser memilih satu IP dan tetap menggunakannya, bahkan jika tidak merespons. (Diperiksa dengan FF dan chrome).
Setelah cache dns browser kedaluwarsa, nama host diselesaikan lagi dan proses diulangi, terlepas dari apakah IP menjawab atau tidak.
Untuk HA dasar, Anda dapat menggunakan DNS dinamis atau berbagai pendekatan berbasis IP.
EDIT: Perilaku ini akan terjadi ketika host yang tidak dapat diakses bertindak sebagai "lubang hitam". Jika tuan rumah sebaliknya menolak koneksi masuk, browser akan mencoba satu ip, mendapatkan penolakan dan segera menggunakan ip lain dan dengan demikian ia akan gagal dengan cukup baik.
sumber
Mereka mengganti IP, itu bukan solusi failover.
Browser membiarkan OS untuk melakukan resolusi nama, dan untuk memeriksa Linux selalu mengacak alamat IP, coba host google.com beberapa kali. IP akan datang secara acak.
sumber
DNS mengembalikan semua IP dalam daftar tetapi mereka mengubah urutan daftar dan urutan ini tidak acak atau berubah ketika 1 gagal tetapi mereka selalu mengembalikan IP dalam urutan yang sama untuk alasan penyeimbangan beban. Ketika browser menerima daftar, saya kira itu memilih 1 dalam daftar jika tidak dikenal sebagai tidak berfungsi.
sumber