Chinaunix首页 | 论坛 | 博客
  • 博客访问: 157468
  • 博文数量: 50
  • 博客积分: 83
  • 博客等级: 民兵
  • 技术积分: 297
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-12 11:47
文章分类
文章存档

2012年(43)

2011年(7)

分类:

2012-05-27 11:07:04

原文地址:HAProxy1.4.6后端keepalive 作者:cbin_07

HAProxy后端keepalive设计原理 1 概述

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 相关数据结构
  1. 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 };

  2. struct pconn *p_free_hdr

    该分量为存放所有的free pconn的链表

  3. server->phdr

    struct server结构中新增phdr分量struct pconn *phdr,该分量为存放所有可重用的连接信息的链表。

  4. fdtab

    struct fdtab结构中新增struct server *srv分量标记该fd属于那个server(只有后端的fd才不为空),新增struct pconn *pcn标记连接信息。

4 改动流程
  1. connect_server函数

    connect_server函数完成连接到后端server的操作(分配到那个serversess_prepare_conn_req函数中实现)。该函数完成申请socket,设置socketconnect后端server及其它变量设置。

    我们在这个函数中的改动是在申请socket时首先,从server->phdr中查找是否有重用的连接,有则取链表中的第一个结点,没有则从p_free_hdr 中取一个free节点存放新连接。

  2. fd_delete函数

    fd_delete函数完成连接的释放。目前我们修改为不释放连接信息,而是把连接信息依据状态把连接信息存放至p_free_hdrserver->phdr




  1. soft_stop

    soft_stop完成程序退出的资源清理。在其中把server->phdr的连接信息释放;释放p_free_hdr

阅读(1717) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~