Haproxy
HaProxy stick-table 和 nbproc 高於 1
我已經使用帶有 HaProxy 的stick-table 根據 IP 連接數配置了一條規則,如下所示:
global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy user haproxy group haproxy daemon # Default SSL material locations ca-base /etc/ssl/certs crt-base /etc/ssl/private maxconn 60000 backend connectionstablev4 stick-table type ip size 1m expire 60s store conn_cur frontend smtpv4 bind :25 tcp-request connection track-sc0 src table connectionstablev4 acl connabuse sc_conn_cur(0,connectionstablev4) gt 5 tcp-request connection reject if connabuse # Reject any client that speak before the aloha tcp-request inspect-delay 1s acl content_present req_len gt 0 tcp-request content reject if content_present default_backend smtp_backend backend smtp_backend mode tcp timeout server 1m timeout connect 5s # Health check option smtpchk HELO mx1.improvmx.com server srv1 127.0.0.1:2525 check send-proxy maxconn 500
而且效果很好。
但是一旦我添加更多程序,就像這樣(在全域部分):
global # ... same as above nbproc 6 cpu-map 1 1 cpu-map 2 2 cpu-map 3 3 cpu-map 4 4 cpu-map 5 5 cpu-map 6 6
每個 IP 的最大連接數停止工作。
我懷疑棒表是基於每個程序而不是全域的,但我找不到任何關於這件事的資訊。
問題顯然出在 nbproc/cpu-map 上,因為只要我刪除這部分,其他一切都正常。
是否有一些規則或配置要設置以指示 HaProxy 對所有程序使用相同的棒表?
提前致謝。
使用執行緒而不是程序。文件中直接提到了您的流程問題。
https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#3.1-nbthread
此設置僅在內置支持執行緒時可用。它使 haproxy 線上程上執行。這是“nbproc”獨有的。雖然“nbproc”在歷史上曾經是使用多個處理器的唯一方式,但它也存在與程序之間缺乏同步相關的許多缺點(執行狀況檢查、對等點、stick-tables、stats ……)不影響執行緒。因此,強烈建議任何現代配置從“nbproc”遷移到“nbthread”。當 HAProxy 在前台啟動時,“nbthread”也可以工作。在某些支持 CPU 親和性的平台上,當不使用 nbproc 時,預設的“nbthread”值會自動設置為程序在啟動時綁定的 CPU 數。這意味著可以使用“taskset”或“cpuset”等命令輕鬆地從呼叫程序中調整執行緒數。否則,此值預設為 1。預設值在“haproxy -vv”的輸出中報告。另請參見“nbproc”。