Saya menemukan pertanyaan ini ketika mencari di Google untuk cara mendiagnosis Amazon Elastic Load Balancers (ELBs) dan saya ingin menjawabnya untuk orang lain seperti saya yang mengalami masalah ini tanpa banyak panduan.
Properti ELB
ELB memiliki beberapa sifat menarik. Contohnya:
- ELB terdiri dari 1 atau lebih node
- Node-node ini diterbitkan sebagai catatan A untuk nama ELB
- Node ini dapat gagal, atau dimatikan, dan koneksi tidak akan ditutup dengan anggun
- Seringkali membutuhkan hubungan yang baik dengan dukungan Amazon ($$$) untuk membuat seseorang menggali masalah ELB
CATATAN: Properti lain yang menarik tetapi sedikit kurang relevan adalah bahwa ELB tidak dirancang untuk menangani lonjakan lalu lintas yang tiba-tiba. Mereka biasanya membutuhkan 15 menit lalu lintas yang padat sebelum dapat ditingkatkan atau mereka dapat dipanaskan berdasarkan permintaan melalui tiket dukungan
Pemecahan masalah ELB (secara manual)
Pembaruan: AWS sejak itu telah memigrasikan semua ELB untuk menggunakan Rute 53 untuk DNS. Selain itu, semua ELB sekarang memiliki all.$elb_name
catatan yang akan mengembalikan daftar lengkap node untuk ELB. Misalnya, jika nama ELB Anda elb-123456789.us-east-1.elb.amazonaws.com
, maka Anda akan mendapatkan daftar lengkap node dengan melakukan sesuatu seperti dig all.elb-123456789.us-east-1.elb.amazonaws.com
. Untuk node IPv6, all.ipv6.$elb_name
juga berfungsi. Selain itu, Rute 53 dapat mengembalikan hingga 4KB data yang masih menggunakan UDP, jadi menggunakan +tcp
bendera mungkin tidak diperlukan.
Mengetahui hal ini, Anda dapat melakukan sedikit pemecahan masalah sendiri. Pertama, atasi nama ELB ke daftar node (sebagai catatan A):
$ dig @ns-942.amazon.com +tcp elb-123456789.us-east-1.elb.amazonaws.com ANY
The tcp
flag disarankan sebagai ELB Anda bisa memiliki terlalu banyak catatan untuk fit dalam paket UDP tunggal. Saya juga diberitahu, tetapi belum dikonfirmasi secara pribadi, bahwa Amazon hanya akan menampilkan hingga 6 node kecuali Anda melakukan ANY
kueri. Menjalankan perintah ini akan memberi Anda output yang terlihat seperti ini (dipangkas untuk singkatnya):
;; ANSWER SECTION:
elb-123456789.us-east-1.elb.amazonaws.com. 60 IN SOA ns-942.amazon.com. root.amazon.com. 1376719867 3600 900 7776000 60
elb-123456789.us-east-1.elb.amazonaws.com. 600 IN NS ns-942.amazon.com.
elb-123456789.us-east-1.elb.amazonaws.com. 60 IN A 54.243.63.96
elb-123456789.us-east-1.elb.amazonaws.com. 60 IN A 23.21.73.53
Sekarang, untuk masing-masing A
rekaman gunakan mis curl
untuk menguji koneksi ke ELB. Tentu saja, Anda juga ingin mengisolasi tes Anda hanya ke ELB tanpa terhubung ke backend Anda. Satu properti terakhir dan sedikit fakta yang diketahui tentang ELB:
- Ukuran maksimum dari metode permintaan (kata kerja) yang dapat dikirim melalui ELB adalah 127 karakter . Yang lebih besar dan ELB akan membalas dengan HTTP 405 - Metode tidak diizinkan .
Ini berarti bahwa kita dapat memanfaatkan perilaku ini untuk menguji hanya bahwa ELB merespons:
$ curl -X $(python -c 'print "A" * 128') -i http://ip.of.individual.node
HTTP/1.1 405 METHOD_NOT_ALLOWED
Content-Length: 0
Connection: Close
Jika Anda melihat HTTP/1.1 405 METHOD_NOT_ALLOWED
maka ELB merespons dengan sukses. Anda mungkin juga ingin menyesuaikan batas waktu curl dengan nilai yang dapat Anda terima.
Memecahkan masalah ELB menggunakan elbping
Tentu saja, melakukan ini bisa sangat membosankan, jadi saya telah membangun alat untuk mengotomatisasi elbping ini . Ini tersedia sebagai permata ruby, jadi jika Anda memiliki rubygems maka Anda dapat menginstalnya hanya dengan melakukan:
$ gem install elbping
Sekarang Anda dapat menjalankan:
$ elbping -c 4 http://elb-123456789.us-east-1.elb.amazonaws.com
Response from 54.243.63.96: code=405 time=210 ms
Response from 23.21.73.53: code=405 time=189 ms
Response from 54.243.63.96: code=405 time=191 ms
Response from 23.21.73.53: code=405 time=188 ms
Response from 54.243.63.96: code=405 time=190 ms
Response from 23.21.73.53: code=405 time=192 ms
Response from 54.243.63.96: code=405 time=187 ms
Response from 23.21.73.53: code=405 time=189 ms
--- 54.243.63.96 statistics ---
4 requests, 4 responses, 0% loss
min/avg/max = 187/163/210 ms
--- 23.21.73.53 statistics ---
4 requests, 4 responses, 0% loss
min/avg/max = 188/189/192 ms
--- total statistics ---
8 requests, 8 responses, 0% loss
min/avg/max = 188/189/192 ms
Ingat, jika Anda melihat code=405
maka itu berarti ELB merespons.
Langkah selanjutnya
Metode apa pun yang Anda pilih, Anda setidaknya akan tahu apakah node ELB Anda merespons atau tidak. Berbekal pengetahuan ini, Anda dapat mengubah fokus Anda menjadi pemecahan masalah bagian-bagian lain dari tumpukan Anda atau dapat membuat kasus yang cukup masuk akal bagi AWS bahwa ada sesuatu yang salah.
Semoga ini membantu!
host
utilitas menyelesaikan ke alamat yang sama pada sistem di mana kita dapat terhubung dan sistem di mana kita tidak bisa.