Bagaimana saya bisa menyeimbangkan lalu lintas web masuk di antara server N apache?

12

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. teks alternatif


sumber
1
maafkan saya tetapi program apa yang Anda gunakan untuk gambar Anda?
Prix
1
@Prix - Sepertinya visio ( office.microsoft.com/en-us/visio )
malonso

Jawaban:

4

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.

Nakedible
sumber
2

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 memerlukan proxy_pass upstream_namearahan 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 daftar BACKENDuntuk semua server Anda.
    Lihat misalnya pengaturan Pound misalnya .

Ketika kebutuhan untuk beberapa penyeimbang beban muncul, Anda mungkin ingin pergi untuk heartbeatkonfigurasi, 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.

Dering Ø
sumber
1

Anda harus memerlukan alasan yang sangat bagus untuk memperkenalkan kompleksitas tambahan dan satu titik kegagalan ke dalam arsitektur Anda.

Penyeimbangan beban Round-Robin

  • tidak ada biaya
  • sederhana untuk diterapkan dan dikelola
  • mengimplementasikan failover pada klien - satu-satunya tempat kegagalan dapat dideteksi dengan andal
  • secara implisit mendukung server-afinitas tetapi masih memungkinkan failover tanpa masalah manajemen sesi yang terkait dengan sesi lengket
  • tidak memerlukan perangkat lunak / perangkat keras / konfigurasi tambahan pada node cluster

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

  1. Alamat IPV4 menjadi langka dan karenanya mahal - tetapi masih banyak. jauh lebih murah daripada mengatakan Cisco CSS.

  2. 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

symcbean
sumber
"tidak memerlukan perangkat lunak tambahan" - well, mengharuskan webapp telah berbagi status sesi (login, apa yang ada di keranjang belanja, dll). Dan DNS RR dapat memiliki penyeimbangan muatan yang tidak rata untuk periode waktu yang lama. Ya, DNS RR adalah metode yang layak, tetapi hampir tidak jelas lebih unggul daripada alternatif ...
Jesper M
0

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.

jaq
sumber
0

Nginx mengagumkan sebagai proksi hulu, saya telah menggunakannya dengan sukses besar dalam konfigurasi melakukan 1 juta + unik setiap hari

Robert Swisher
sumber
0

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:

  • Penyeimbang beban tingkat TCP / IP (Linux Virtual Server et al). Terendah per koneksi overhead, kecepatan tertinggi, tidak dapat "melihat" HTTP.
  • Penyeimbang beban tingkat HTTP (HAProxy, nginx, Apache 2.2, Pound, Microsoft ARR, dan banyak lagi). Overhead yang lebih tinggi, bisa melihat HTTP, bisa gzip HTTP, bisa melakukan SSL, bisa melakukan sticky load balancing sesi.
  • Proxy mundur HTTP (Server Lalu Lintas Apache, Varnish, Squid). Dapat menyimpan objek yang bisa di-cache (beberapa halaman web, css, js, gambar) dalam RAM dan meneruskannya ke klien berikutnya tanpa melibatkan server web backend. Dapat sering melakukan beberapa hal yang sama seperti penyeimbang beban HTTP L7.

ada penyeimbang kedua karena saya yakin pada titik tertentu penyeimbang akan membutuhkan bantuan juga.

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.

membantu tentang apa "penyeimbang" seharusnya dan praktik terbaik tentang cara mengaturnya.

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.

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

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 .

Jesper M
sumber