Tôi đã tìm thấy câu hỏi này trong khi Googling về cách chẩn đoán Cân bằng tải đàn hồi của Amazon (ELBs) và tôi muốn trả lời nó cho bất kỳ ai khác như tôi đã gặp rắc rối này mà không cần hướng dẫn nhiều.
Thuộc tính ELB
ELB có một số tính chất thú vị. Ví dụ:
- ELB được tạo thành từ 1 hoặc nhiều nút
- Các nút này được xuất bản dưới dạng bản ghi A cho tên ELB
- Các nút này có thể bị lỗi hoặc bị tắt và các kết nối sẽ không được đóng một cách duyên dáng
- Nó thường đòi hỏi một mối quan hệ tốt với sự hỗ trợ của Amazon ($$$) để khiến ai đó đào sâu vào các vấn đề ELB
LƯU Ý: Một thuộc tính thú vị khác nhưng ít phù hợp hơn một chút là ELB không được thiết kế để xử lý lưu lượng truy cập đột ngột. Họ thường yêu cầu 15 phút lưu lượng truy cập lớn trước khi họ tăng quy mô hoặc họ có thể được làm ấm trước theo yêu cầu thông qua một vé hỗ trợ
Xử lý sự cố ELBs (thủ công)
Cập nhật: AWS đã di chuyển tất cả ELB để sử dụng Tuyến 53 cho DNS. Ngoài ra, tất cả các ELB hiện có một all.$elb_name
bản ghi sẽ trả về danh sách đầy đủ các nút cho ELB. Ví dụ: nếu tên ELB của bạn là elb-123456789.us-east-1.elb.amazonaws.com
, thì bạn sẽ có được danh sách đầy đủ các nút bằng cách thực hiện một cái gì đó như dig all.elb-123456789.us-east-1.elb.amazonaws.com
. Đối với các nút IPv6, all.ipv6.$elb_name
cũng hoạt động. Ngoài ra, Tuyến 53 có thể trả về tối đa 4KB dữ liệu vẫn sử dụng UDP, do đó sử dụng +tcp
cờ có thể không cần thiết.
Biết điều này, bạn có thể tự mình khắc phục một chút sự cố. Đầu tiên, phân giải tên ELB thành danh sách các nút (dưới dạng bản ghi A):
$ dig @ns-942.amazon.com +tcp elb-123456789.us-east-1.elb.amazonaws.com ANY
Các tcp
cờ được đề nghị như ELB của bạn có thể có quá nhiều hồ sơ để bên trong phù hợp của một gói tin UDP duy nhất. Tôi cũng đã nói, nhưng cá nhân tôi chưa xác nhận rằng Amazon sẽ chỉ hiển thị tối đa 6 nút trừ khi bạn thực hiện ANY
truy vấn. Chạy lệnh này sẽ cung cấp cho bạn đầu ra trông giống như thế này (được cắt bớt cho ngắn gọn):
;; 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
Bây giờ, đối với mỗi A
bản ghi, hãy sử dụng, ví dụ curl
để kiểm tra kết nối với ELB. Tất nhiên, bạn cũng muốn tách bài kiểm tra của mình thành ELB mà không kết nối với phần phụ trợ của bạn. Một tài sản cuối cùng và thực tế ít được biết đến về ELBs:
- Kích thước tối đa của phương thức yêu cầu (động từ) có thể được gửi qua ELB là 127 ký tự . Bất kỳ lớn hơn và ELB sẽ trả lời bằng HTTP 405 - Phương pháp không được phép .
Điều này có nghĩa là chúng ta có thể lợi dụng hành vi này để chỉ kiểm tra ELB đang phản hồi:
$ 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
Nếu bạn thấy HTTP/1.1 405 METHOD_NOT_ALLOWED
thì ELB đang phản hồi thành công. Bạn cũng có thể muốn điều chỉnh thời gian chờ của curl thành các giá trị được bạn chấp nhận.
Khắc phục sự cố ELBs bằng cách sử dụng elbping
Tất nhiên, làm điều này có thể trở nên khá tẻ nhạt vì vậy tôi đã xây dựng một công cụ để tự động hóa cái gọi là elbping này . Nó có sẵn như một viên đá quý ruby, vì vậy nếu bạn có rubygems thì bạn có thể cài đặt nó bằng cách thực hiện đơn giản:
$ gem install elbping
Bây giờ bạn có thể chạy:
$ 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
Hãy nhớ rằng, nếu bạn thấy code=405
thì điều đó có nghĩa là ELB đang phản hồi.
Bước tiếp theo
Dù bạn chọn phương pháp nào, ít nhất bạn cũng sẽ biết các nút ELB của mình có phản hồi hay không. Được trang bị kiến thức này, bạn có thể chuyển sự tập trung của mình sang xử lý sự cố các phần khác trong ngăn xếp của bạn hoặc có thể đưa ra một trường hợp khá hợp lý để AWS biết rằng có điều gì đó không ổn.
Hi vọng điêu nay co ich!
host
tiện ích phân giải đến cùng một địa chỉ trên các hệ thống nơi chúng tôi có thể kết nối và hệ thống chúng ta không thể