Saya mencoba memahami konsep load balancing untuk memastikan ketersediaan dan redundansi untuk membuat pengguna senang ketika ada masalah, daripada load balancing demi menawarkan kecepatan terik kepada jutaan pengguna.
Kami memiliki anggaran terbatas dan berusaha untuk tetap berpegang pada hal-hal di mana ada banyak pengetahuan yang tersedia, jadi menjalankan Apache di Ubuntu VPS sepertinya adalah strategi sampai beberapa mesin pencari terkenal mendapatkan kami ( termasuk ironi hari Sabtu, harap dicatat ).
Setidaknya bagi saya, itu adalah hutan lengkap solusi berbeda yang tersedia. Apache sendiri mod_proxy & HAproxy adalah dua yang kami temukan dengan pencarian google cepat, tetapi tidak memiliki pengalaman load balancing, saya tidak tahu apa yang cocok untuk situasi kami, atau apa yang akan kami jaga saat memilih solusi untuk menyelesaikan masalah ketersediaan.
Apa pilihan terbaik untuk kita? Apa yang harus kita lakukan untuk mendapatkan ketersediaan tinggi sementara tetap berada di dalam anggaran kita?
Jawaban:
Solusi yang saya gunakan, dan dapat dengan mudah diimplementasikan dengan VPS, adalah sebagai berikut:
Lengkungan ini memiliki keuntungan sebagai berikut, menurut pendapat saya yang bias:
Dalam kasus Anda, memiliki VPS yang terpisah secara fisik adalah ide yang bagus, tetapi membuat berbagi ip lebih sulit. Tujuannya adalah memiliki sistem yang tahan kesalahan, redundan, dan beberapa konfigurasi untuk penyeimbangan beban / HA dan mengacaukannya menambah satu titik kegagalan (seperti penyeimbang beban tunggal untuk menerima semua lalu lintas).
Saya juga tahu Anda bertanya tentang apache, tetapi saat itu kami memiliki alat khusus yang lebih cocok untuk pekerjaan itu (seperti nginx dan vernis). Biarkan apache untuk menjalankan aplikasi di backend dan sajikan dengan menggunakan alat lain (bukan berarti apache tidak dapat melakukan penyeimbangan muatan yang baik atau membalikkan proksi, itu hanya masalah pembongkaran berbagai bagian pekerjaan ke lebih banyak layanan sehingga setiap bagian dapat melakukannya dengan baik ini berbagi).
sumber
HAproxy adalah solusi yang baik. Konfigurasi ini cukup lurus ke depan.
Anda akan membutuhkan instance VPS lain untuk duduk di depan setidaknya 2 VPS lainnya. Jadi untuk load balancing / fail over, Anda membutuhkan minimal 3 VPS
Beberapa hal yang perlu dipikirkan juga adalah:
Pengakhiran SSL. Jika Anda menggunakan HTTPS: // koneksi itu harus berakhir di load balancer, di belakang load balancer itu harus melewati semua lalu lintas melalui koneksi yang tidak terenkripsi.
Penyimpanan file. Jika pengguna mengunggah gambar ke mana ia pergi? Apakah itu hanya duduk di satu mesin? Anda perlu berbagi file secara instan di antara mesin - Anda dapat menggunakan layanan S3 Amazon untuk menyimpan semua file statis Anda, atau Anda dapat memiliki VPS lain yang akan bertindak sebagai server file, tetapi saya akan merekomendasikan S3 karena itu berlebihan dan murah murah.
info sesi. setiap mesin dalam konfigurasi penyeimbang beban Anda harus dapat mengakses info sesi pengguna, karena Anda tidak pernah tahu mesin apa yang akan mereka tekan.
db - apakah Anda memiliki server db yang terpisah? jika Anda hanya memiliki satu mesin sekarang, bagaimana Anda akan memastikan mesin baru Anda akan memiliki akses ke server db - dan jika server VPS db terpisah, seberapa mubazirnya. Itu tidak selalu masuk akal untuk memiliki ujung depan Ketersediaan Tinggi web dan satu titik kegagalan dengan satu server db, sekarang Anda perlu mempertimbangkan replikasi db dan promosi budak juga.
Jadi saya sudah di posisi Anda, itulah masalah dengan situs web yang melakukan beberapa ratus hit sehari untuk operasi nyata. Menjadi kompleks dengan cepat. Harapan yang memberi Anda beberapa makanan untuk dipikirkan :)
sumber
Pilihan saya adalah untuk Linux Virtual Server sebagai load balancer. Hal ini membuat direktur LVS titik kegagalan tunggal serta hambatan, tetapi
Biaya dapat ditekan dengan meminta direktur pertama berada di mesin yang sama dengan simpul LVS pertama, dan direktur kedua di mesin yang sama dengan simpul LVS kedua. Node ketiga dan selanjutnya adalah node murni, tanpa implikasi LVS atau HA.
Ini juga membuat Anda bebas untuk menjalankan perangkat lunak server web apa pun yang Anda suka, karena pengalihan dilakukan di bawah lapisan aplikasi.
sumber
Bagaimana dengan rantai ini?
round robin dns> haproxy di kedua mesin> nginx untuk memisahkan file statis> apache
Mungkin juga menggunakan ucarp atau detak jantung untuk memastikan haproxy selalu menjawab. Stunnel akan duduk di depan haproxy jika Anda memerlukan SSL juga
sumber
Anda mungkin ingin mempertimbangkan untuk menggunakan perangkat lunak pengelompokan yang tepat. RedHat's (atau CentOS) Cluster Suite , atau Oracle's ClusterWare . Ini dapat digunakan untuk mengatur cluster aktif-pasif, dan dapat digunakan untuk me-restart layanan, dan gagal di antara node ketika ada masalah serius. Ini pada dasarnya adalah apa yang Anda cari.
Semua solusi kluster ini sudah termasuk dalam lisensi OS masing-masing, jadi Anda mungkin tidak masalah biaya. Mereka memang memerlukan beberapa cara penyimpanan bersama - baik mount NFS, atau disk fisik yang diakses oleh kedua node dengan sistem file berkerumun. Contoh yang terakhir adalah disk SAN dengan beberapa akses host diizinkan, diformat dengan OCFS2 atau GFS . Saya percaya Anda dapat menggunakan disk bersama VMWare untuk ini.
Perangkat lunak cluster digunakan untuk mendefinisikan 'layanan' yang berjalan pada node sepanjang waktu, atau hanya ketika node itu 'aktif'. Node berkomunikasi melalui detak jantung, dan juga memantau layanan tersebut. Mereka dapat me-restart mereka jika mereka melihat kegagalan, dan reboot jika mereka tidak dapat diperbaiki.
Anda pada dasarnya akan mengkonfigurasi satu alamat IP 'dibagikan' yang mengarahkan lalu lintas ke. Kemudian apache, dan layanan lain yang diperlukan, dapat didefinisikan juga, dan hanya berjalan di server aktif. Disk bersama akan digunakan untuk semua konten web Anda, semua file yang diunggah, dan direktori konfigurasi apache Anda. (dengan httpd.conf, dll)
Dalam pengalaman saya, ini bekerja dengan sangat baik.
--Christopher Karel
sumber
Penyeimbangan muatan yang optimal bisa sangat mahal dan rumit. Penyeimbangan beban dasar harus memastikan bahwa setiap server melakukan servis kira-kira jumlah hit yang sama kapan saja.
Metode load-balancing yang paling sederhana adalah menyediakan beberapa catatan A dalam DNS. Secara default alamat IP akan dikonfigurasi dalam metode round robin. Ini akan menghasilkan pengguna yang didistribusikan secara merata di seluruh server. Ini berfungsi baik untuk situs stateless. Diperlukan metode yang sedikit lebih rumit ketika Anda memiliki situs stateful.
Untuk menangani persyaratan stateful, Anda dapat menggunakan arahan ulang. Berikan setiap server web alamat alternatif seperti www1, www2, www3, dll. Arahkan ulang koneksi www awal ke alamat alternatif host. Anda mungkin berakhir dengan masalah bookmark dengan cara ini, tetapi mereka harus tersebar secara merata di server.
Bergantian, menggunakan jalur yang berbeda untuk menunjukkan server mana yang menangani sesi stateful akan memungkinkan sesi proxy yang telah berpindah host ke server asli. Ini mungkin menjadi masalah ketika sesi untuk server yang gagal tiba di server yang telah mengambil alih dari server yang gagal. Namun, kecuali perangkat lunak pengelompokan negara akan hilang pula. Karena caching peramban, Anda mungkin tidak mengalami banyak sesi mengubah server.
Kegagalan dapat ditangani dengan mengkonfigurasi server untuk mengambil alih alamat IP dari server yang gagal. Ini akan meminimalkan waktu henti jika server gagal. Tanpa perangkat lunak pengelompokan, sesi stateful akan hilang jika server gagal.
Tanpa failover, pengguna akan mengalami penundaan hingga browser mereka gagal ke alamat IP berikutnya.
Menggunakan layanan Restful daripada sesi stateful harus menghilangkan masalah pengelompokan di front-end. Masalah pengelompokan di sisi penyimpanan masih akan berlaku.
Bahkan dengan penyeimbang beban di depan server, Anda mungkin akan memiliki DNS round-robin di depannya. Ini akan memastikan semua penyeimbang beban Anda digunakan. Mereka akan menambahkan layer lain ke desain Anda, dengan kompleksitas tambahan dan titik kegagalan lainnya. Namun, mereka dapat menyediakan beberapa fitur keamanan.
Solusi terbaik akan tergantung pada persyaratan yang relevan.
Menerapkan server gambar untuk menyajikan konten seperti gambar, file CSS, dan konten statis lainnya dapat memudahkan pemuatan pada server aplikasi.
sumber
Saya biasanya menggunakan sepasang mesin OpenBSD yang identik:
OpenBSD ringan, stabil, dan cukup aman - Sempurna untuk layanan jaringan.
Untuk memulai, saya merekomendasikan pengaturan layer3. Ini menghindari pengaturan firewall komplikasi (PF). Berikut ini adalah contoh /etc/relayd.conf file yang menunjukkan pengaturan penyeimbang beban relai sederhana dengan pemantauan webserers backend:
sumber
Pernahkah Anda memberi ec2 dengan cloudfoundry atau mungkin Elastic beanstalk atau hanya AWS biasa yang menggeser pemikiran. Saya telah menggunakan itu dan timbangannya cukup baik dan menjadi elastis dapat ditingkatkan / turun tanpa campur tangan manusia.
Mengingat bahwa Anda mengatakan Anda tidak memiliki pengalaman dengan load balancing, saya akan menyarankan opsi ini karena mereka membutuhkan otak minimal "penggorengan" untuk bangkit dan berjalan.
Mungkin lebih baik menggunakan waktu Anda.
sumber
pound
sampai baru-baru ini ketika, saya percaya mereka menerapkan nginx. Perhatikan bahwa nginx dapat diimplementasikan untuk menggantikan Apache, atau hanya sebagai antarmuka ke Apache.