ฉันพบคำถามนี้ในขณะที่ Googling สำหรับวิธีการวินิจฉัย Amazon Elastic Load Balancers (ELB) และฉันต้องการตอบคำถามนี้ให้กับคนอื่น ๆ เช่นฉันที่มีปัญหานี้โดยไม่ได้รับคำแนะนำมากนัก
คุณสมบัติของ ELB
ELBs มีคุณสมบัติที่น่าสนใจ ตัวอย่างเช่น
- ELB ประกอบด้วยโหนดตั้งแต่ 1 โหนดขึ้นไป
- โหนดเหล่านี้ถูกเผยแพร่เป็นเรคคอร์ด A สำหรับชื่อ ELB
- โหนดเหล่านี้สามารถล้มเหลวหรือถูกปิดและการเชื่อมต่อจะไม่ถูกปิดอย่างสง่างาม
- มันมักจะต้องมีความสัมพันธ์ที่ดีกับการสนับสนุนของ Amazon ($$$) เพื่อให้คนที่จะขุดปัญหา ELB
หมายเหตุ: คุณสมบัติที่น่าสนใจอีกประการหนึ่ง แต่มีความเกี่ยวข้องน้อยกว่าเล็กน้อยคือ ELB ไม่ได้รับการออกแบบมาเพื่อรองรับปริมาณการใช้ข้อมูลที่เพิ่มขึ้นอย่างฉับพลัน โดยทั่วไปแล้วพวกเขาต้องการการจราจรหนาแน่น 15 นาทีก่อนที่พวกเขาจะขยายขนาดหรือพวกเขาสามารถอุ่นเครื่องล่วงหน้าตามคำขอผ่านทางตั๋วสนับสนุน
การแก้ไขปัญหา ELB (ด้วยตนเอง)
อัปเดต: AWS ได้ทำการโยกย้าย ELB ทั้งหมดเพื่อใช้ Route 53 สำหรับ DNS นอกจากนี้ ELB ทั้งหมดตอนนี้มีall.$elb_name
บันทึกที่จะส่งกลับรายการทั้งหมดของโหนดสำหรับ ELB ตัวอย่างเช่นถ้าชื่อ ELB ของคุณแล้วคุณจะได้รับรายการเต็มรูปแบบของโหนดด้วยการทำสิ่งที่ชอบelb-123456789.us-east-1.elb.amazonaws.com
dig all.elb-123456789.us-east-1.elb.amazonaws.com
สำหรับโหนด IPv6 all.ipv6.$elb_name
ก็ใช้งานได้เช่นกัน นอกจากนี้เส้นทาง 53 สามารถส่งคืนข้อมูลสูงสุด 4KB ที่ยังคงใช้งาน UDP ได้ดังนั้น+tcp
อาจไม่จำเป็นต้องใช้การตั้งค่าสถานะ
เมื่อทราบสิ่งนี้คุณสามารถแก้ไขปัญหาเล็กน้อยด้วยตัวเอง ขั้นแรกแก้ไขชื่อ ELB ไปยังรายการโหนด (เป็นระเบียน A):
$ dig @ns-942.amazon.com +tcp elb-123456789.us-east-1.elb.amazonaws.com ANY
tcp
ธงเป็นข้อเสนอแนะที่เป็น ELB ของคุณอาจมีระเบียนมากเกินไปที่จะอยู่ข้างในแบบของแพ็กเก็ต UDP เดียว ฉันยังได้รับการบอกกล่าว แต่ยังไม่ได้รับการยืนยันเป็นการส่วนตัวว่า Amazon จะแสดงได้สูงสุด 6 โหนดเว้นแต่คุณจะดำเนินการANY
ค้นหา การรันคำสั่งนี้จะให้ผลลัพธ์ที่มีลักษณะดังนี้ (ตัดให้สั้นลง):
;; 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
ตอนนี้สำหรับแต่ละA
ระเบียนใช้เช่นcurl
การทดสอบการเชื่อมต่อกับ ELB แน่นอนคุณต้องการแยกการทดสอบเป็นแค่ ELB โดยไม่ต้องเชื่อมต่อกับแบ็กเอนด์ของคุณ หนึ่งในคุณสมบัติสุดท้ายและความจริงที่รู้จักกันน้อยเกี่ยวกับ ELBs:
- ขนาดสูงสุดของวิธีการร้องขอ (verb) ที่สามารถส่งผ่าน ELB เป็น127 ตัวอักษร ใด ๆ ที่มีขนาดใหญ่และ ELB จะตอบกับHTTP 405 - วิธีการที่ไม่ได้รับอนุญาต
นี่หมายความว่าเราสามารถใช้ประโยชน์จากพฤติกรรมนี้เพื่อทดสอบเฉพาะว่า ELB ตอบสนอง:
$ 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
ถ้าคุณเห็นHTTP/1.1 405 METHOD_NOT_ALLOWED
ว่า ELB ตอบสนองเรียบร้อยแล้ว คุณอาจต้องการปรับการหมดเวลาของ curl เป็นค่าที่ยอมรับได้สำหรับคุณ
การแก้ไขปัญหา ELB โดยใช้ elbping
แน่นอนว่าการทำเช่นนี้จะได้รับน่าเบื่อสวยดังนั้นผมจึงได้สร้างเครื่องมือในการทำงานโดยอัตโนมัตินี้เรียกว่าelbping มันมีให้เป็นอัญมณีทับทิมดังนั้นหากคุณมี rubygems คุณสามารถติดตั้งได้โดยทำ:
$ gem install elbping
ตอนนี้คุณสามารถเรียกใช้:
$ 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
จำไว้ว่าถ้าคุณเห็นcode=405
นั่นหมายความว่า ELB กำลังตอบสนอง
ขั้นตอนถัดไป
ไม่ว่าคุณจะเลือกวิธีใดอย่างน้อยที่สุดคุณจะรู้ว่าโหนดของ ELB ของคุณตอบสนองหรือไม่ ด้วยความรู้นี้คุณสามารถเปลี่ยนโฟกัสไปที่การแก้ไขปัญหาส่วนอื่น ๆ ของสแต็กของคุณหรือทำให้ AWS เป็นคดีที่สมเหตุสมผลว่ามีบางอย่างผิดปกติ
หวังว่านี่จะช่วยได้!
host
ยูทิลิตี้นี้จะแก้ไขที่อยู่เดียวกันบนระบบ เราทำไม่ได้