Chúng tôi đã có một chút vấn đề chuyển đổi dự phòng với một trong những máy ảo HAProxy của chúng tôi ngày hôm nay. Khi chúng tôi đào sâu vào nó, chúng tôi thấy điều này:
Ngày 26 tháng 1 07:41:45 kernel haproxy2: [226818.070059] __rat006it: 10 cuộc gọi lại bị chặn 26 tháng 1 07:41:45 kernel haproxy2: [226818.070064] Hết bộ nhớ ổ cắm 26 tháng 1 07:41:47 kernel haproxy2: [226819.560048] Hết bộ nhớ ổ cắm 26 tháng 1 07:41:49 kernel haproxy2: [226822.030044] Hết bộ nhớ ổ cắm
Mà, trên mỗi liên kết này , rõ ràng phải làm với các cài đặt mặc định thấp cho net.ipv4.tcp_mem
. Vì vậy, chúng tôi đã tăng chúng lên gấp 4 lần từ mặc định của họ (đây là Ubuntu Server, không chắc là hương vị Linux có quan trọng không):
giá trị hiện tại là: 45984 61312 91968 giá trị mới là: 183936 245248 367872
Sau đó, chúng tôi bắt đầu thấy một thông báo lỗi kỳ quái:
26 tháng 1 08:18:49 kernel haproxy1: [2291.579726] Chuỗi băm tuyến quá dài! 26 tháng 1 08:18:49 hạt nhân haproxy1: [2291.579732] Điều chỉnh secret_interval của bạn!
Suỵt .. đó là một bí mật !!
Điều này rõ ràng phải làm với /proc/sys/net/ipv4/route/secret_interval
mặc định là 600 và kiểm soát việc xả định kỳ bộ đệm của tuyến đường
Các
secret_interval
chỉ thị hạt nhân mức độ thường xuyên để thổi bay tất cả mục tuyến đường băm bất kể như thế nào mới / cũ họ đang có. Trong môi trường của chúng tôi điều này nói chung là xấu. CPU sẽ bận rộn xây dựng lại hàng ngàn mục mỗi giây mỗi khi xóa bộ nhớ cache. Tuy nhiên, chúng tôi đặt chế độ này để chạy mỗi ngày một lần để tránh rò rỉ bộ nhớ (mặc dù chúng tôi chưa bao giờ có một cái).
Mặc dù chúng tôi rất vui khi giảm điều này, nhưng có vẻ kỳ lạ khi khuyên bạn nên bỏ toàn bộ bộ đệm tuyến đường theo định kỳ , thay vì chỉ đơn giản là đẩy các giá trị cũ ra khỏi bộ đệm tuyến nhanh hơn.
Sau một số điều tra, chúng tôi thấy /proc/sys/net/ipv4/route/gc_elasticity
rằng dường như là một lựa chọn tốt hơn để giữ kích thước bảng tuyến đường trong kiểm tra:
gc_elasticity
tốt nhất có thể được mô tả là độ sâu xô trung bình mà hạt nhân sẽ chấp nhận trước khi nó bắt đầu hết hạn các mục băm tuyến. Điều này sẽ giúp duy trì giới hạn trên của các tuyến đang hoạt động.
Chúng tôi điều chỉnh độ co giãn từ 8 đến 4, với hy vọng bộ đệm tuyến đường tự cắt tỉa mạnh mẽ hơn. Điều secret_interval
đó không đúng với chúng tôi. Nhưng có một loạt các cài đặt và không rõ đó là cách đúng đắn để đi đến đây.
- / Proc / sys / net / ipv4 / tuyến / gc_elasticity (8)
- / Proc / sys / net / ipv4 / tuyến / gc_interval (60)
- / Proc / sys / net / ipv4 / tuyến / gc_min_interval (0)
- / Proc / sys / net / ipv4 / tuyến / gc_timeout (300)
- / Proc / sys / net / ipv4 / tuyến / secret_interval (600)
- / Proc / sys / net / ipv4 / tuyến / gc_thresh (?)
- rhash_entries (tham số kernel, không xác định mặc định?)
Chúng tôi không muốn làm cho việc định tuyến Linux trở nên tồi tệ hơn , vì vậy chúng tôi sợ phải làm phiền với một số cài đặt này.
Bất cứ ai có thể tư vấn các tham số định tuyến nào là tốt nhất để điều chỉnh, cho một trường hợp HAProxy lưu lượng truy cập cao?