Saya selalu menggunakan Round-Robin DNS, dengan TTL panjang, sebagai load-balancer. Ini berfungsi sangat baik untuk layanan HTTP / HTTPS dengan browser .
Saya benar-benar stres dengan peramban karena sebagian besar peramban menerapkan semacam «coba lagi pada IP lain», tetapi saya tidak tahu bagaimana perpustakaan atau perangkat lunak lain menangani solusi IP ganda.
Ketika browser tidak mendapatkan balasan dari satu server, maka secara otomatis akan memanggil IP berikutnya, dan kemudian bertahan dengan itu (sampai turun ... dan kemudian mencoba yang lain).
Kembali pada tahun 2007, saya telah melakukan tes berikut:
- tambahkan iframe di situs web saya, menunjuk ke satu entri Round-Robin, seperti
http://roundrobin.test:10080/ping.php
- halaman dilayani oleh 3 soket PHP, mendengarkan pada 3 perbedaan IP, semua pada port 10080 (saya tidak mampu untuk menguji pada port 80, karena situs web saya berjalan di atasnya)
- satu soket (katakanlah A ) ada di sana untuk memeriksa bahwa browser dapat terhubung pada port 10080 (karena banyak perusahaan hanya mengizinkan port standar)
- dua soket lainnya (misalnya B dan C ) dapat diaktifkan atau dinonaktifkan dengan cepat.
Saya biarkan berjalan satu jam, punya banyak data. Hasilnya adalah bahwa untuk 99,5% hit pada socket A , saya mendapat hit pada socket B atau C (tentu saja saya tidak menonaktifkan keduanya pada saat yang sama). Peramban adalah: iPhone, Chrome, Opera, MSIE 6/7/8, BlackBerry, Firefox 3 / 3.5 ... Peramban yang bahkan tidak memenuhi standar pun melakukannya dengan benar!
Sampai hari ini, saya tidak pernah mengujinya lagi, tapi mungkin saya akan menyiapkan tes baru suatu hari atau merilis kode pada github sehingga orang lain dapat mengujinya.
Catatan penting: bahkan jika itu berfungsi sebagian besar waktu, itu tidak menghilangkan fakta bahwa beberapa permintaan akan gagal. Saya juga menggunakannya untuk permintaan POST, karena aplikasi saya akan mengembalikan pesan kesalahan jika tidak berfungsi, sehingga pengguna dapat mengirim data lagi, dan kemungkinan besar browser akan menggunakan IP lain dalam kasus ini dan simpan akan berfungsi . Dan untuk konten statis, ini berfungsi sangat bagus.
Jadi jika Anda bekerja dengan browser, gunakan Round-Robin DNS, baik untuk konten statis atau dinamis, Anda akan lebih baik. Server juga dapat turun di tengah transaksi, dan bahkan dengan penyeimbang beban terbaik Anda tidak dapat menangani kasus seperti itu. Untuk konten dinamis, Anda harus membuat sesi / database / file Anda sinkron, kalau tidak Anda tidak akan bisa menangani ini (tapi itu juga berlaku dengan penyeimbang beban nyata).
Catatan tambahan: Anda dapat menguji perilaku menggunakan IP Anda sendiri iptables
. Misalnya, sebelum aturan firewall Anda untuk lalu lintas HTTP, tambahkan:
iptables -A INPUT -p tcp --dport 80 --source 12.34.56.78 -j REJECT
(di mana 12.34.56.78
jelas IP Anda)
Jangan gunakan DROP
, karena meninggalkan port yang difilter , dan browser Anda akan menunggu sampai waktu habis. Jadi sekarang, Anda dapat mengaktifkan atau menonaktifkan satu server atau yang lain. Tes yang paling jelas adalah untuk menonaktifkan server A, memuat halaman, lalu mengaktifkan server A dan menonaktifkan server B. Ketika Anda akan memuat halaman lagi, Anda akan melihat sedikit menunggu dari browser, maka itu akan memuat dari server Lagi. Di Chrome, Anda dapat mengonfirmasi IP server dengan melihat permintaan di panel jaringan. Di General
tab Headers
, Anda akan melihat tajuk palsu bernama Remote Address:
. Ini adalah IP dari mana Anda mendapat jawaban.
Jadi, jika Anda perlu masuk dalam mode pemeliharaan di satu server, cukup nonaktifkan lalu lintas HTTP / HTTPS dengan satu iptables
REJECT
aturan, semua permintaan akan masuk ke server lain (dengan sekali menunggu, hampir tidak terlihat bagi pengguna).