分类: LINUX
2010-06-02 13:54:13
HAProxy后端keepalive指的是在HAProxy服务完一次request后,不关闭HAProxy和后端Squid的连接,而是维护这个连接以备后续的request复用。
2 配置启用HAProxy后端长连接需要配置如下:
option http-pretend-keepalive
option http-srv-kpa
squid需要配置如下:
pconn_timeout 60 seconds //该时间可调,对于我们的环境可以考虑配置的长一点
client_persistent_connections on
3 相关数据结构struct pconn
77 #define PCONN_INI 0x0000
78 #define PCONN_NEW 0x0001
79 #define PCONN_REUSE 0x0002
80 #define PCONN_RM 0x0004
81 #define PCONN_RM_END 0x0008
82
83 struct pconn {
84 int fd;
85 int flags;
86 struct pconn *next;
87 };
struct pconn *p_free_hdr
该分量为存放所有的free pconn的链表
server->phdr
struct server结构中新增phdr分量struct pconn *phdr,该分量为存放所有可重用的连接信息的链表。
fdtab
struct fdtab结构中新增struct server *srv分量标记该fd属于那个server(只有后端的fd才不为空),新增struct pconn *pcn标记连接信息。
connect_server函数
connect_server函数完成连接到后端server的操作(分配到那个server在sess_prepare_conn_req函数中实现)。该函数完成申请socket,设置socket,connect后端server及其它变量设置。
我们在这个函数中的改动是在申请socket时首先,从server->phdr中查找是否有重用的连接,有则取链表中的第一个结点,没有则从p_free_hdr 中取一个free节点存放新连接。
fd_delete函数
fd_delete函数完成连接的释放。目前我们修改为不释放连接信息,而是把连接信息依据状态把连接信息存放至p_free_hdr或server->phdr。
soft_stop
soft_stop完成程序退出的资源清理。在其中把server->phdr的连接信息释放;释放p_free_hdr。
chinaunix网友2010-09-03 13:14:11
您好,您的后端keepalive patch我近期进行了测试,发现如下问题测试过程:对于相同url,确定是可以只分发到后端同一squid上, 当在配置文件中开启option http-srv-kpa,确定为开启了后端keep-alive, 但是:当开启option http-srv-kpa时对haproxy后端的某个url进行压力测试后,haproxy将不在对此url进行转发,而只对其他url转发。 不开启时,则测试正常。 希望提供下解决方法,期待您的答复。qq:38036763