Thông tin bổ sung cho những người có thể gặp sự cố tương tự khi cố gắng kết nối với RDS hoặc RedShift:
1) Kiểm tra các nhóm bảo mật
Xác minh nhóm bảo mật cho phiên bản RDS cho phép truy cập từ nhóm bảo mật mà máy chủ nguồn của bạn thuộc về (hoặc IP của nó được thêm trực tiếp nếu bên ngoài AWS). Nhóm bảo mật bạn nên xem là nhóm được chỉ định trong các thuộc tính phiên bản RDS từ giao diện người dùng bảng điều khiển RDS (có tên là "nhóm bảo mật").
LƯU Ý :Nhóm bảo mật cơ sở dữ liệu có thể khác với nhóm bảo mật AWS EC2. Nếu phiên bản RDS của bạn ở EC2 cổ điển / công khai, bạn nên kiểm tra trong phần "nhóm bảo mật cơ sở dữ liệu" của giao diện người dùng RDS. Đối với người dùng VPC, nhóm bảo mật sẽ là nhóm bảo mật VPC bình thường (tên sg-xxx sẽ được liệt kê trong các thuộc tính của phiên bản RDS).
2) Xác nhận DNS không phải là vấn đề.
Amazon sử dụng DNS phân tách, do đó, tra cứu DNS bên ngoài AWS sẽ trả về IP công cộng trong khi tra cứu nội bộ đối với AWS sẽ trả về IP riêng. Nếu bạn nghi ngờ đó là sự cố DNS, bạn đã xác nhận các IP khác nhau được trả về từ các vùng khả dụng khác nhau chưa? Nếu các AZ khác nhau nhận được các IP khác nhau, bạn sẽ cần liên hệ với bộ phận hỗ trợ AWS.
3) Xác nhận kết nối mạng bằng cách thiết lập kết nối ổ cắm.
Các công cụ như tracepath và traceroute có thể sẽ không hữu ích vì RDS hiện đang giảm lưu lượng ICMP.
Kiểm tra kết nối cổng bằng cách cố gắng thiết lập kết nối ổ cắm với phiên bản RDS trên cổng 3306 (mysql hoặc 5432 cho postgres). Bắt đầu bằng cách tìm IP của phiên bản RDS và sử dụng telnet hoặc nc (hãy đảm bảo sử dụng IP nội bộ / riêng tư nếu kết nối từ bên trong AWS):
telnet x.x.x.x 3306
nc -vz x.x.x.x 3306
a) Nếu nỗ lực kết nối của bạn không thành công và ngay lập tức bị lỗi, cổng có thể bị chặn hoặc máy chủ từ xa không chạy dịch vụ trên cổng đó. bạn có thể cần tham gia hỗ trợ AWS để khắc phục sự cố thêm. Nếu kết nối từ bên ngoài AWS, trước tiên hãy thử kết nối từ một phiên bản khác bên trong AWS (vì tường lửa của bạn có thể đang chặn các kết nối đó).
b) Nếu kết nối của bạn không thành công và bạn gặp phải thời gian chờ, các gói có thể đang bị tường lửa bỏ / bỏ qua hoặc các gói đang quay trở lại trên một đường dẫn mạng khác. Bạn có thể xác nhận điều này bằng cách chạy netstat -an | grep SYN
(từ một phiên ssh khác trong khi chờ lệnh telnet / nc hết thời gian chờ).
Kết nối ở trạng thái SYN có nghĩa là bạn đã gửi một yêu cầu kết nối nhưng chưa nhận được bất kỳ thứ gì trở lại (SYN_ACK hoặc từ chối / chặn). Thông thường, điều này có nghĩa là tường lửa hoặc nhóm bảo mật đang bỏ qua hoặc bỏ các gói.
Nó cũng có thể là một vấn đề với định tuyến NAT hoặc nhiều đường dẫn từ nhiều giao diện. Kiểm tra để đảm bảo rằng bạn không sử dụng iptables hoặc cổng NAT giữa máy chủ của bạn và phiên bản RDS. Nếu bạn đang sử dụng VPC, hãy đảm bảo rằng bạn cho phép lưu lượng truy cập vào / ra từ máy chủ nguồn.
c) Nếu kiểm tra kết nối socket của bạn thành công, nhưng bạn không thể kết nối với máy khách mysql (CLI, bàn làm việc, ứng dụng, v.v.), hãy xem đầu ra của netstat để xem trạng thái kết nối đang ở trạng thái nào (thay x.x.x.x bằng địa chỉ IP thực của phiên bản RDS):
netstat -an | grep x.x.x.x
Nếu bạn đang thiết lập kết nối khi sử dụng telnet hoặc NC, nhưng bạn thấy trạng thái 'SYN' khi sử dụng máy khách mysql, bạn có thể đang gặp sự cố MTU.
RDS, tại thời điểm này được viết, có thể không hỗ trợ các gói ICMP được sử dụng cho PMTUD ( https:/ /en.wikipedia.org/wiki/Path_MTU_Discovery#Problems_with_PMTUD ). Đây có thể là sự cố nếu bạn đang cố gắng truy cập RDS hoặc RedShift trong VPC từ phiên bản ec2 cổ điển thông qua ClassicLink. Hãy thử giảm MTU bằng những thứ sau, sau đó kiểm tra lại:
sudo ip link show
# take note of the current MTU (likely 1500 or 9001)
sudo ip link set dev eth0 mtu 1400
Nếu MTU thấp hơn hoạt động, hãy nhớ liên hệ với bộ phận hỗ trợ khách hàng của AWS để được trợ giúp và đề cập rằng bạn đang gặp sự cố MTU khi cố gắng kết nối với phiên bản RDS của mình. Điều này có thể xảy ra nếu các gói TCP được bao bọc bằng cách đóng gói để tạo đường hầm, dẫn đến một MTU khả dụng thấp hơn cho dữ liệu gói / tải trọng. Việc hạ thấp MTU trên máy chủ nguồn cho phép các gói được bọc vẫn nằm trong giới hạn MTU trong khi đi qua cổng đường hầm.
Nếu nó không hoạt động, hãy đặt MTU của bạn về mặc định và nhờ hỗ trợ AWS để khắc phục sự cố thêm.