Load Balancing Server DNS: UDP / TCP

10

Saya telah diminta untuk membangun kembali infrastruktur load balancing kami di pusat data.

Permintaan asli adalah untuk memuat server FTP keseimbangan. Saya mencoba melakukan itu menggunakan load balancer saat ini ( Piranha / LVS), tetapi tidak membuatnya dan berjalan. Bukan hanya karena ada sedikit atau tidak ada dokumentasi untuk perangkat lunak ini. Karena Piranhadianggap sudah usang, saya pergi ke HAProxysetelah beberapa hari mencoba, yang melakukan pekerjaan dalam sepersekian waktu yang dihabiskan Piranha.

Jadi saya punya penyeimbangan beban FTP (mode pasif) di tempatnya. Sekarang, saya diminta mengganti seluruh Piranha Load Balancer di pusat data. Dalam konfigurasi Piranha saat ini, kami memiliki beberapa server web, server IIS .... aaaand DNS .

Tidak ada satu hal:
HAProxytampaknya menjadi LB yang umum digunakan, tetapi tidak mampu menanganiUDP load balancing . Ini menyedihkan, karena saya suka cara HAProxykerjanya. Jadi saya banyak mencari di Google dan menemukan beberapa hal. Kebanyakan orang tampaknya menggunakan LVSsebagai LB untuk DNS (TCP / UDP). Ada yang menggunakan dlbDNS, ada yang pakai lbnamed, ada yang pakai netfilter / iptables.

Karena saya ingin tetap menggunakan HAProxyFTP, HTTP, server IIS, saya bingung menggunakannya bersisian LVS.

Persyaratan:
2 instance LB dengan failover
2 server DNS (sudah ada) dengan failover
Beberapa server backend (http, aplikasi, dll ...)

Pertanyaan:
Apakah ini mungkin? Apakah penyetelan beban UDP di server DNS bahkan perlu? Apakah ada sumber daya apa pun yang dapat menunjukkan kepada saya bagaimana memulai dengan itu? Atau apakah ada solusi LB yang mampu tidak hanya menangani TCP / HTTP, tetapi juga load balancing UDP?

PS: Solusi LB harus non-hardware dan open source / lisensi GPL / bebas biaya.

Setiap bantuan atau mengarah ke sumber daya masing-masing sangat dihargai!

Mosh Pit
sumber
Periksa Nginx nginx.com/blog/announcing-udp-load-balancing ini tampaknya menjawab pertanyaan dns Anda
user433519

Jawaban:

15

Jangan memuat saldo DNS Anda.

Ini adalah protokol yang sangat ringan - Anda akan membutuhkan sejumlah besar lalu lintas untuk membutuhkan lebih dari satu kotak (dalam hal ini Anda hanya akan menjadi hambatan pada penyeimbang beban Anda), dan ada ketahanan yang dibangun karena Anda dapat menggunakan beberapa catatan NS dalam delegasi Anda (server lain akan digunakan jika ada yang down).

Shane Madden
sumber
Jelas menggunakan beberapa catatan NS, karena TCP menjadi lebih umum untuk DNS, biarkan saja load-balance itu sendiri. Menemukan kembali roda itu menyakitkan karena suatu alasan.
cpt_fink
Beberapa server DNS memang menawarkan redundansi dan mencegah kegagalan total, tetapi server DNS yang jatuh masih akan menyebabkan keterlambatan resolusi nama.
200_sukses
Oke, masuk akal bagi saya. Masalahnya adalah bahwa saya masih perlu IP virtual untuk keperluan failover jika saya tidak salah, karena kita akan memiliki 2 mesin yang akan berisi HAProxy dan LVS untuk routing. Bagaimana saya mendekati ini?
Mosh Pit
2
@MoshPit vrrpd atau keepalived adalah opsi yang bagus.
Shane Madden
Saya berasumsi Anda berbicara tentang pengaturan Hot Standby Aktif - Aktif, benar?
Mosh Pit
11

Saya tidak nyaman dengan Tanya Jawab ini karena belum benar-benar ditetapkan jenis server DNS yang Anda bicarakan. Ada beberapa kesalahpahaman yang signifikan dalam hal ketahanan DNS rekursif dan penting bahwa orang-orang yang berlayar melalui mesin pencari tidak meninggalkan diskusi ini dengan rasa aman yang salah.

  • DNS Resmi : Untuk server DNS otoritatif, pengetahuan umum tentang ketahanan DNS cukup tepat. Selama Anda memiliki beberapa server DNS resmi yang geo-redundan, Anda baik-baik saja. Alasan utama untuk menambah ketersediaan tinggi untuk masing-masing IP adalah jika Anda hosting banyak zona otoritatif. Ini memungkinkan Anda meningkatkan jumlah server tanpa harus mengubah pengaturan registrar untuk setiap domain yang dihosting.

  • DNS Rekursif : Selalu gunakan beberapa bentuk solusi ketersediaan tinggi. (BGP, alat, dll.) Di sinilah Anda dapat mengalami masalah serius. Semua pustaka resolver tidak dibuat sama: klien Windows DNS akan membulatkan robin server awal yang digunakan antara kueri, tetapi sebagian besar sistem berbasis Unix akan selalu menelusuri daftar secara berurutan. Apa yang bahkan kurang dikenal adalah bahwa pustaka Unix ini harus berhenti pada setiap kombinasi domain pencarian sebelum pindah ke server berikutnya. Jika Anda memiliki beberapa domain pencarian yang dikonfigurasi dan server pertama dalam urutan pencarian resolver sudah mati, ini dapat membuat penundaan signifikan dalam resolusi DNS untuk setiap permintaan tunggal: lebih dari cukup untuk menyebabkan masalah dalam aplikasi penting Anda.

Ketika datang ke DNS rekursif, ingatlah bahwa infrastruktur server Anda hanya sekuat konfigurasi klien yang paling braindead. Seiring pertumbuhan perusahaan Anda, ini adalah sesuatu yang tidak pernah Anda kendalikan. Jangan membuat asumsi desain yang didasarkan pada lingkungan OS server yang homogen, karena hal-hal jarang tetap sama di perusahaan yang sedang berkembang. Ini pasti akan menggigit seseorang jika Anda tidak berencana untuk itu.

Andrew B
sumber
Kami menggunakan bind / dinamai sebagai layanan DNS sejauh ini.
Mosh Pit
Poin bagus - saya mengasumsikan jawaban saya berwibawa tapi Anda benar, itu mungkin sebuah recursor.
Shane Madden
1
@MoshPit Komentar "layanan DNS" Anda tidak menjelaskan apakah ini bersifat rekursif atau otoritatif. Wewenang adalah ketika Anda meng-hosting domain. Rekursif adalah sesuatu yang akan Anda gunakan untuk mendapatkan alamat IP dari domain yang tidak Anda host. Server yang melakukan keduanya "campuran", yang bertentangan dengan praktik terbaik keamanan.
Andrew B
1
Saya minta maaf untuk itu, perhatikan ketika Anda memposting komentar itu. Kami mengendalikan server DNS kami sendiri, dan itu adalah otoritatif.
Mosh Pit
Jangan gunakan penyeimbang beban untuk ketersediaan tinggi.
womble
2

Hari-hari ini Anda dapat menggunakan dnsdistPowerDNS

Dari README

dnsdist adalah loadbalancer yang sangat DNS-, DoS- dan sadar penyalahgunaan. Tujuannya dalam hidup adalah untuk merutekan lalu lintas ke server terbaik, memberikan kinerja terbaik kepada pengguna yang sah sembari mengubah atau memblokir lalu lintas yang kasar.

dnsdist bersifat dinamis, dalam arti bahwa konfigurasinya dapat diubah saat runtime, dan statistiknya dapat ditanyakan dari antarmuka yang mirip konsol.

https://github.com/PowerDNS/pdns/tree/master/pdns/dnsdistdist

Mereka menyediakan repositori untuk OS umum: https://repo.powerdns.com/

Boden Garman
sumber