Saya ingin menggunakan sesuatu seperti Detak Jantung / Squid / Varnish / dll untuk menyeimbangkan jumlah lalu lintas masuk di antara instance apache internal. Ini harus berupa perangkat lunak dan bukan perangkat keras karena semua barang saya dijalankan pada VPS. Saya tidak punya banyak pengalaman di bidang ini, maaf jika saya menyalahgunakan terminologi dan memilih paket yang salah.
Saya telah menyusun sesuatu untuk menggambarkan apa yang saya cari. Sisi hijau adalah seperti apa pengaturan awal akan terlihat dan sisi biru adalah seperti apa tampilannya setelah menambahkan lebih banyak contoh apache karena peningkatan lalu lintas. Ini mungkin bukan bagaimana hal-hal ini bekerja, tetapi Idealnya saya akan menambahkan IP dari balancer / s ke DNS domain. Kemudian balancer / s akan melihat berapa banyak koneksi pada setiap instance apache (melalui beberapa daftar konfigurasi IP internal atau IP abadi) dan mendistribusikan koneksi secara merata. Dalam warna biru ada penyeimbang kedua karena saya yakin pada titik tertentu penyeimbang akan membutuhkan bantuan juga.
Mungkin saya salah tentang hal ini, tetapi saya mencari bantuan tentang apa yang seharusnya menjadi "penyeimbang" dan praktik terbaik tentang cara mengaturnya.
Bantuan apa pun akan bagus.
Jawaban:
Hampir semua "reverse proxy" akan melakukan apa yang Anda minta.
Misalnya Varnish, Pound dan HAProxy semuanya bagus dalam apa yang mereka lakukan, tetapi mereka juga memiliki perbedaannya - namun, untuk apa yang Anda minta, salah satu dari mereka akan melakukannya. Secara pribadi, saya akan berpikir Anda akan lebih baik dengan HAProxy, tapi itu hanya dugaan.
Anda sebaiknya membaca artikel tentang load balancers untuk membantu Anda memutuskan jenis apa yang Anda butuhkan: http://1wt.eu/articles/2006_lb/
Selain itu, Anda dapat mempertimbangkan untuk menggunakan layanan pra-dibangun untuk ini - seperti menjalankan perangkat lunak Anda di Cloud Komputasi Amazon dan menggunakan Elastic Load Balancing mereka.
sumber
Pada awalnya, ada pertanyaan penting yang harus dijawab:
apakah Anda perlu sesi pengguna ditangani oleh load-balancer (s) dan selalu didorong ke server web yang sama (jika hidup)?
sesi tidak diperlukan : dalam hal ini, Anda harus menggunakan yang efisien program nginx yang sebagai penyeimbang beban. Konfigurasi mudah diatur, di mana Anda pada dasarnya hanya perlu menunjukkan daftar server web dalam sebuah
upstream upstream_name { server1, ..., serverN }
pernyataan, kemudian, untuk domain tertentu, Anda memerlukanproxy_pass upstream_name
arahan sederhana .Lihat Nginx wiki .
diperlukan sesi ada pengaturan yang sama untuk pound di mana Anda menunjukkan nama cookie yang akan meng - host ID sesi (
ID MYCOOKIENAME
), lalu daftarBACKEND
untuk semua server Anda.Lihat misalnya pengaturan Pound misalnya .
Ketika kebutuhan untuk beberapa penyeimbang beban muncul, Anda mungkin ingin pergi untuk
heartbeat
konfigurasi, yang baik akan memastikan hanya satu penyeimbang me-mount IP virtual untuk domain tertentu, (jika sesi diperlukan, atau me-mount keduanya dan memberi makan DNS dengan dua alamat IP untuk contoh). Mungkin ini harus dirinci dalam pertanyaan lain pada saat itu menjadi perlu (karena alat berkembang dengan cepat).Lihat juga tautan ini misalnya.
sumber
Anda harus memerlukan alasan yang sangat bagus untuk memperkenalkan kompleksitas tambahan dan satu titik kegagalan ke dalam arsitektur Anda.
Penyeimbangan beban Round-Robin
Saya kagum dengan banyaknya informasi yang salah tentang round-robin. Jika saya adalah orang yang sinis saya mungkin bertanya-tanya apakah ada koneksi dengan vendor yang memproduksi perangkat keras load-balancing yang mahal.
Satu-satunya poin yang akan saya akui adalah itu
Alamat IPV4 menjadi langka dan karenanya mahal - tetapi masih banyak. jauh lebih murah daripada mengatakan Cisco CSS.
Internet semakin berjalan di layanan web - dan tidak semua pengembang mengimplementasikan dukungan DNS sesuai dengan spesifikasi . Tetapi setiap browser yang pernah saya gunakan berfungsi sebagaimana mestinya
sumber
mulailah pencarian Anda di sini: http://httpd.apache.org/docs/2.1/mod/mod_proxy_balancer.html dan http://www.barneyb.com/barneyblog/2009/02/26/apache-httpds-mod_proxy_balancer/
sumber
Untuk penyeimbang, Anda bisa melihat ke LVS di http://www.linuxvirtualserver.org/ , mungkin menjalankan ldirectord dan detak jantung untuk mengarahkan lalu lintas dan melakukan failover.
sumber
Nginx mengagumkan sebagai proksi hulu, saya telah menggunakannya dengan sukses besar dalam konfigurasi melakukan 1 juta + unik setiap hari
sumber
OK, ini ditanya beberapa waktu lalu, dan saya terlambat ke pesta. Meski begitu, ada sesuatu untuk ditambahkan di sini.
Jackie, kamu sudah cukup berhasil. Ilustrasi Anda menunjukkan bagaimana penanganan keseimbangan ditangani pada sebagian besar instalasi berukuran kecil dan menengah.
Anda harus membaca pengantar keseimbangan beban oleh Willy Tarreau yang terkait dengan Nakedible. Itu masih valid, dan itu adalah pengantar yang bagus.
Anda perlu mempertimbangkan bagaimana ini sesuai dengan kebutuhan Anda:
Ya tentu. Tetapi load balancing sederhana, dan seringkali penyeimbang beban tunggal bisa berjalan cepat . Saya menautkan ke artikel ini, yang mengejutkan di web, hanya sebagai contoh kinerja apa yang bisa disediakan oleh server modern . Jangan gunakan banyak LB sebelum Anda perlu. Ketika Anda perlu pendekatan umum adalah penyeimbang beban tingkat IP di bagian paling depan (atau DNS Round Robin), pergi ke penyeimbang beban tingkat HTTP, pergi ke proxy & server webapp.
Bintik masalah adalah penanganan keadaan sesi, dan sampai batas tertentu perilaku keadaan gagal. Menyiapkan penyeimbang beban sendiri relatif mudah.
Jika Anda hanya menggunakan server webapp 2-4 backend, hashing statis berdasarkan alamat IP asal dapat dilakukan. Ini menghindari perlunya status sesi bersama di antara server webapp. Setiap node webapp melihat 1 / N dari lalu lintas keseluruhan, dan pemetaan pelanggan ke server statis dalam operasi normal. Ini tidak cocok untuk instalasi yang lebih besar.
The dua algoritma load balancing terbaik, dalam arti bahwa mereka memiliki perilaku jinak di bawah beban tinggi dan distribusi beban bahkan, adalah round robin dan benar load balancing acak. Kedua hal ini mengharuskan aplikasi web Anda memiliki status sesi global yang tersedia di node webapp. Bagaimana ini dilakukan tergantung pada tumpukan teknologi webapp; tetapi umumnya ada solusi standar yang tersedia untuk ini.
Jika tidak ada hashing statis, atau keadaan sesi bersama yang cocok untuk Anda, maka pilihannya umumnya penyeimbangan beban ' sesi lengket ' dan status sesi per-server. Dalam kebanyakan kasus ini berfungsi dengan baik, dan ini merupakan pilihan yang sepenuhnya layak.
Ya, beberapa situs menggunakan ini. Ada banyak nama untuk berbagai algoritma load balancing yang ada. Jika Anda dapat memilih round robin atau random (atau round robin, weighted random) maka saya akan merekomendasikan Anda melakukannya, untuk alasan yang diberikan di atas.
Hal terakhir: Jangan lupa bahwa banyak vendor (F5, Cisco dan lainnya pada high-end, Coyote Point dan Kemp Technologies dengan harga yang lebih masuk akal) menawarkan peralatan penyeimbang beban yang matang .
sumber