Truy vấn cơ sở dữ liệu bị treo qua IPsec: sắp xếp lại UDP hay TCP?
Một truy vấn treo sau bắt tay sạch chỉ vào bên trong đường đi của tunnel. Ba điều kiện quyết định nên sửa đường hay quay về TCP trên 443.
Truy vấn treo sau bắt tay TCP không phải vấn đề định tuyến. Lỗi tuyến làm hỏng bắt tay, nên phiên thiết lập xong rồi im lặng là chỉ vào bên trong đường đi: kiểm tra, MTU, hoặc cách các gói UDP của tunnel đến. Quyết định trước mắt là sửa đường đó hay chuyển tunnel sang TCP. Ba điều kiện quyết định điều này, và không điều nào liên quan đến cơ sở dữ liệu.
Phân loại treo trước khi đổ lỗi cho tunnel
Bốn kết quả trông giống nhau với người dùng và mang nghĩa hoàn toàn khác với kỹ sư.
| What the client sees | What it rules out |
|---|---|
| Connection refused | Nothing is listening on the address and port the client reached |
| Timeout before the handshake | A filter, a missing route, or the wrong address |
| Handshake completes, query hangs | The session exists, so look at inspection, MTU and packet order |
| Stalls that recover on retry | Often reordering, or a state table entry expiring |
Chỉ hai dòng cuối mới đáng dành thời gian cho tunnel. Kết nối bị từ chối qua VPN thường là cơ sở dữ liệu chỉ lắng nghe trên loopback, đây là vấn đề của trình lắng nghe, và hết thời gian trước bắt tay là bộ lọc hoặc tuyến. Cả hai đều không khá hơn khi đổi cách đóng gói.
Ghi phân loại vào ticket trước. Đó là bước rẻ nhất và loại bỏ phần lớn không gian tìm kiếm.
Ba điều kiện quyết định giữa UDP và TCP
Lưu lượng IPsec đã đóng gói đi trên UDP, và UDP cho đường đi tự do sắp xếp lại và bỏ gói mà không báo cho ai. Khi việc sắp xếp lại đẩy gói ra ngoài cửa sổ chống lặp của tunnel, chúng bị bỏ lặng lẽ và phiên TCP bên trong chỉ việc chờ. Đó là cơ chế đằng sau một bắt tay thành công và một truy vấn không bao giờ trở lại.
Sửa đường hay quay về TCP phụ thuộc ba điều. Thứ nhất, có mất gói thật trên đường hay chỉ là sắp xếp lại? Thứ hai, bạn có thể đổi nơi kiểm tra, hoặc loại tunnel này khỏi thành phần sắp xếp lại? Thứ ba, khối lượng công việc có nhạy với kiểu treo, ví dụ nhiều phiên ghép kênh dùng chung một liên kết?
Nếu câu trả lời đầu là mất gói và câu thứ hai là không,TCP trên 443 là phương án dự phòng thực dụng. Nếu câu trả lời thứ hai là có, hãy sửa đường và giữ UDP.
Đọc bản ghi tường lửa, không phải lỗi ứng dụng
Ứng dụng báo hết thời gian, điều đó không nói gì về nguyên nhân. Nhật ký của chính tường lửa là nơi xuất hiện việc bỏ hay chặn, nên lọc theo địa chỉ cơ sở dữ liệu và ứng dụng rồi tìm cả việc bỏ lẫn chấp nhận.Các mô-đun phòng chống mối đe dọa có thể bỏ gói mà không tạo lỗi ở tầng ứng dụng, và đó chính là hình dạng của một truy vấn bị treo. Im lặng trong nhật ký cũng là dữ liệu: nó chỉ vào thứ không ghi log, như việc sắp xếp lại.
Cũng kiểm tra cụm. Một cụm cấu hình sai có thể giữ phiên trong bảng trạng thái trên một thành viên trong khi gói đi theo đường của thành viên khác, nên phản hồi đến nơi không có trạng thái. Những lần treo như vậy trông ngẫu nhiên và không tương quan với tải.
So sánh cả hai đầu trước khi thay đổi bất cứ điều gì, và so sánh thứ tự đến thay vì số gói:
tcpdump -ni any udp port 4500 -w /tmp/encap.pcap
tcpdump -ni any tcp port 5432 -w /tmp/inner.pcapTCP trên 443 thực sự khiến bạn tốn gì
Chuyển tunnel sang TCP loại bỏ triệu chứng sắp xếp lại, vì hộp trung gian giờ thấy một luồng có thứ tự. Nhưng nó cũng tạo ra TCP chồng TCP. Kết nối ngoài gửi lại thứ mà kết nối trong đã gửi lại, và một lần mất gói có thể dừng mọi phiên ghép kênh cùng lúc. Trên đường sạch điều đó vô hình. Trên đường có mất gói, cách chữa còn tệ hơn triệu chứng.
Sự đánh đổi là chấp nhận được khi phương án thay thế là không có kết nối, và nên được ghi thành ngoại lệ có người chịu trách nhiệm thay vì coi là bình thường.
Ghi lại giao thức, cổng, một truy vấn mẫu và kết quả đo được, kèm ngày. Không có bản ghi đó, kỹ sư tiếp theo sẽ lặp lại thí nghiệm, và ngoại lệ lặng lẽ trở thành kiến trúc.
Giữ quyết định có thể xem xét lại
Chẩn đoán đường đi mau cũ. Hộp trung gian được thay, cấu hình mô-đun thay đổi, liên kết được nâng cấp, và lý do cho TCP trên 443 biến mất trong khi cấu hình vẫn còn. Đặt ngày xem xét cho ngoại lệ và nêu điều kiện cho phép bạn quay lại UDP.
Thử cả hai giao thức với một truy vấn nhỏ và với tập kết quả lớn. Sắp xếp lại hiện ra thành những lần treo phụ thuộc kích thước, còn lỗi trình lắng nghe dừng cả hai kích thước như nhau.