AWS ELB Apache2 503 Layanan Tidak Tersedia: Server back-end dalam kapasitas


39

Kami telah menjalankan beberapa situs web dari infrastruktur AWS Amazon selama sekitar dua tahun sekarang dan sekitar dua hari yang lalu server web mulai turun sekali atau dua kali sehari dengan satu-satunya kesalahan yang saya temukan adalah:

HTTP/1.1 503 Service Unavailable: Back-end server is at capacity

Tidak ada alarm (CPU / Disk IO / DB Conn) dipicu oleh CloudWatch. Saya mencoba mengunjungi situs melalui IP elastis untuk melewati ELB dan mendapatkan ini:

HTTP request sent, awaiting response... Read error (Connection reset by peer) in headers. Retrying.

Saya tidak melihat sesuatu yang luar biasa di log apache dan memverifikasi bahwa mereka diputar dengan benar. Saya tidak punya masalah mengakses mesin ketika "turun" melalui SSH dan melihat daftar proses saya melihat 151 proses apache2 yang tampak normal bagi saya. Restart apache sementara memperbaiki masalah. Mesin ini beroperasi hanya sebagai server web di belakang ELB. Setiap saran akan sangat dihargai.

CPU Utilization Average: 7,45%, Minimum: 0,00%, Maksimal: 25,82%

Penggunaan Memori Rata-Rata: 11,04%, Minimum: 8,76%, Maksimal: 13,84%

Rata-rata Pemanfaatan Tukar: N / A, Minimum: N / A, Maksimum: N / A

Pemanfaatan Ruang Disk untuk / dev / xvda1 dipasang pada / Rata-rata: 62,18%, Minimum: 53,39%, Maksimum: 65,49%

Biarkan saya mengklarifikasi saya pikir masalahnya adalah dengan contoh EC2 individu dan bukan ELB saya hanya tidak ingin mengesampingkan itu meskipun saya tidak dapat mencapai IP elastis. Saya menduga ELB baru saja mengembalikan hasil dari memukul contoh EC2 yang sebenarnya.

Pembaruan: 2014-08-26 Saya seharusnya memperbarui ini lebih cepat tetapi "perbaikan" adalah untuk mengambil snapshot dari contoh "buruk" dan memulai AMI yang dihasilkan. Tidak turun sejak saat itu. Saya memang melihat pemeriksaan kesehatan ketika saya masih mengalami masalah dan bisa sampai ke halaman pemeriksaan kesehatan ( curl http://localhost/page.html) bahkan ketika saya mendapatkan masalah kapasitas dari load balancer. Saya tidak yakin itu masalah pemeriksaan kesehatan, tetapi karena tidak ada orang, termasuk Amazon, yang dapat memberikan jawaban yang lebih baik, saya menandainya sebagai jawabannya. Terima kasih.

Pembaruan: 2015-05-06 Saya pikir saya akan kembali ke sini dan mengatakan bahwa bagian dari masalah yang sekarang saya yakini dengan kuat adalah pengaturan pemeriksaan kesehatan. Saya tidak ingin mengesampingkan masalah mereka dengan AMI karena pasti akan menjadi lebih baik setelah AMI pengganti diluncurkan tetapi saya menemukan bahwa pemeriksaan kesehatan kami berbeda untuk setiap penyeimbang beban dan yang memiliki masalah terbesar. memiliki batas tidak sehat yang sangat agresif dan batas waktu respons. Lalu lintas kami cenderung melonjak tak terduga dan saya pikir antara pengaturan pemeriksaan kesehatan yang agresif dan lonjakan lalu lintas itu adalah badai yang sempurna.


Saya menemukan informasi lebih lanjut tentang di: meta.discourse.org/t/…
Andre Mesquita

Jawaban:


41

Anda akan mendapatkan "Server back-end pada kapasitas" ketika penyeimbang beban ELB melakukan pemeriksaan kesehatannya dan menerima "halaman tidak ditemukan" (atau kesalahan sederhana lainnya) karena kesalahan konfigurasi (biasanya dengan host NameVirtual).

Coba ambil folder file log menggunakan agen pengguna "ELB-HealthChecker". misalnya

grep ELB-HealthChecker  /var/log/httpd/*

Ini biasanya akan memberi Anda kesalahan 4x atau 5x yang mudah diperbaiki. misal Flooding, MaxClients dll memberi terlalu banyak masalah pada masalah.

FYI Amazon: Mengapa tidak menunjukkan respons yang dikembalikan dari permintaan? Bahkan kode status akan membantu.


18

Saya sendiri mengalami masalah ini. Amazon ELB akan mengembalikan kesalahan ini jika tidak ada contoh yang sehat. Situs kami salah konfigurasi, sehingga pemeriksaan kesehatan ELB gagal, yang menyebabkan ELB mengeluarkan dua server dari rotasi. Dengan nol situs yang sehat, ELB mengembalikan 503 Layanan Tidak Tersedia: Server back-end dalam kapasitas.


5

[EDIT setelah memahami pertanyaan dengan lebih baik] Tidak memiliki pengalaman ELB, saya masih berpikir ini kedengarannya mencurigakan seperti kesalahan 503 yang mungkin dilemparkan ketika Apache memunculkan Tomcat dan membanjiri koneksi.

Efeknya adalah jika Apache memberikan lebih banyak permintaan koneksi daripada yang dapat diproses oleh backend, antrian input backend mengisi hingga tidak ada lagi koneksi yang dapat diterima. Ketika itu terjadi, antrian output yang sesuai dari Apache mulai mengisi. Ketika antrian penuh, Apache melempar 503. Hal yang sama akan terjadi ketika Apache menjadi backend, dan frontend mengirimkan dengan kecepatan sedemikian rupa untuk membuat antrian terisi.

Solusi (hipotetis) adalah dengan mengukur konektor input backend dan konektor output frontend. Ini berubah menjadi tindakan penyeimbangan antara tingkat banjir yang diantisipasi dan RAM yang tersedia dari komputer yang terlibat.

Jadi saat ini terjadi, periksa pengaturan maxclients Anda dan pantau pekerja Anda yang sibuk di Apache (mod_status.). Lakukan hal yang sama jika mungkin dengan ELB apa pun yang sesuai dengan backlog konektor Tomcats, maxthreads, dll. Singkatnya, lihat segala sesuatu tentang antrian input Apache dan antrian output ELB.

Meskipun saya sepenuhnya mengerti itu tidak langsung berlaku, tautan ini berisi panduan ukuran untuk konektor Apache. Anda perlu meneliti teknis antrian ELB yang sesuai, kemudian melakukan perhitungan: http://www.cubrid.org/blog/dev-platform/maxclients-in-apache-and-its-ffect-on-tomcat-during- full-gc /

Seperti yang diamati dalam komentar di bawah ini, untuk membanjiri konektor Apache lonjakan lalu lintas bukan satu-satunya kemungkinan. Jika beberapa permintaan lebih lambat dilayani daripada yang lain, rasio yang lebih tinggi dari itu juga dapat menyebabkan pengisian konektor antrian. Ini benar dalam kasus saya.

Juga, ketika ini terjadi pada saya, saya bingung bahwa saya harus me-restart layanan Apache agar tidak dilayani lagi 503: s. Cukup menunggu banjir konektor tidak cukup. Saya tidak pernah mengerti, tapi orang bisa berspekulasi di Apache melayani dari cache mungkin?

Setelah menambah jumlah pekerja dan pengaturan maxclients pre-fork yang sesuai (ini adalah multithreaded Apache pada Windows yang memiliki beberapa arahan lain untuk antrian jika saya ingat dengan benar), masalah 503 hilang. Saya sebenarnya tidak melakukan perhitungan, tetapi hanya men-tweak nilai-nilai sampai saya bisa mengamati margin yang luas untuk konsumsi puncak sumber daya antrian. Saya membiarkannya begitu saja.

Semoga ini bisa membantu.


Saya baru sadar bahwa Anda menulis Apache adalah backend Anda. Tetap saja, para pekerja, maxclients dll akan bermain di kurasa, namun jawaban saya terlalu mati dan perlu menulis ulang lengkap. Saya mungkin hanya menghapusnya saja. Hal yang dipelajari: baca pertanyaan dengan benar.
ErikE

Terima kasih. Agar hal ini terjadi, harus ada lonjakan besar dalam lalu lintas? Dan pernah berkata lalu lintas macet tidak harus apache dapat pulih?
JSP

Secara teori, ya. Namun, ketika ini terjadi pada saya, saya harus memulai kembali layanan. Ini membuat saya pertama kali mencari di tempat-tempat yang tidak ada hubungannya dengan apa yang sebenarnya terjadi, tetapi bahkan setelah didiagnosis dan disembuhkan dengan benar, saya masih belum dapat memahami perlunya memulai kembali layanan. Saya diam-diam menduga itu karena menjalankan Apache pada Windows, karena saya menemukan referensi bug yang tidak terkait yang tampaknya hanya muncul dengan kombo itu. Sangat aneh.
ErikE

Dan ya, ada lalu lintas yang membanjiri konektor - tidak spikey (bagi kita) tetapi terlalu banyak. Itu adalah permintaan tertentu yang lebih lambat untuk melayani yang kebetulan datang terlalu banyak pada kesempatan tertentu. Setelah memantau sedikit dan hanya menaikkan nilai terkait, 503 menghilang bersama dengan kebutuhan untuk memulai kembali berikutnya.
ErikE

4

Anda dapat menaikkan nilai pemeriksa kesehatan elb, sehingga sebagai respons lambat tunggal tidak akan menarik server dari elb. lebih baik memiliki beberapa pengguna mendapatkan layanan tidak tersedia, daripada situs sedang down untuk semua orang.

EDIT: Kami dapat pergi tanpa cache pemanasan awal dengan menaikkan batas waktu pemeriksaan kesehatan menjadi 25 detik ...... setelah 1-2 menit ... situs responsif sekali

EDIT :: baru saja meluncurkan banyak permintaan, dan ketika alat pemantauan Anda menunjukkan manajemen seberapa cepat Anda, maka cukup bayar di muka RI amazon: P

EDIT: itu mungkin, satu contoh backend elb terdaftar tidak cukup. cukup luncurkan beberapa lagi, dan daftarkan mereka dengan elb, dan itu akan membantu Anda mempersempit masalah Anda


0

Ini beberapa tahun terlambat, tapi semoga ini membantu seseorang.

Saya melihat kesalahan ini ketika instance di belakang ELB tidak memiliki IP publik yang tepat ditugaskan. Saya perlu secara manual membuat IP elastis dan mengaitkannya dengan instance setelah titik waktu mana ELB mengambilnya hampir secara instan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.