haproxy 解决 多主机session共享问题 的三种方法

Posted on

haproxy 解决 多主机session共享问题 的三种方法

haproxy 解决 多主机session共享问题 的三种方法

1 session知识储备 2 haproxy三种方法保持客户端session一致 3 实验环境及结构 4 安装配置及管理 5 本实验中使用到相同的index.php代码 6 联系方法及扩展阅读 感谢 不就是要我命 QQ 47034839 提供测试主机 1 session知识储备 Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。 而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。 服务器也通过URL重写的方式来传递SessionID的值,因此不是完全依赖Cookie。如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。 php.ini 里几个session相关值的 其它的值请参考《PHP与Mysql5程序设计》 session.use_cookies = 1 /#表示 服务端和客户端交互session是通过cookie的方式 默认值 session.name = 9ai9 /#默认值是PHPSESSID 我这里改成9ai9是为了和默认值区别 session.cache_limiter = nocache /#此设置确保对每个请求,在可能提供缓存的版本前,先请求发送到最初的服务器。这个值联系到下文中 cookie识别中的相关参数 2 haproxy三种方法保持客户端session一致 2.1 用户IP 识别

haroxy 将用户IP经过hash计算后 指定到固定的真实服务器上(类似于nginx 的IP hash 指令) 配置指令 balance source 实例访问http://sourceip.9ai9.net:8080 2.2 cookie 识别
haproxy 将WEB服务端发送给客户端的cookie中插入(或添加加前缀)haproxy定义的后端的服务器COOKIE ID。 配置指令例举 cookie SESSION_COOKIE insert indirect nocache http://cookie.9ai9.net:8080 用firebug可以观察到用户的请求头的cookie里 有类似" Cookie 9ai9=0bc588656ca05ecf7588c65f9be214f5; SESSION_COOKIE=12" SESSION_COOKIE=12就是haproxy添加的内容 2.3 session 识别
haproxy 将后端服务器产生的session和后端服务器标识存在haproxy中的一张表里。客户端请求时先查询这张表。 配置指令例举 appsession 9ai9 len 64 timeout 5h request-learn 注意 9ai9 这个值替换成 你的php.ini 里session.name的值。 实例访问 http://appsession.9ai9.net:8080 2.4 只做简单轮询对比 实例访问 http://nosession.9ai9.net:8080 3 实验环境及结构 CentOS 5.3 64 haproxy 113.106.185.245 WEB1 REALsrv_70 184.82.239.70 WEB2 REALsrv_120 220.162.237.120
4 安装配置及管理 useradd -M -s /sbin/nologin haproxy wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.13.tar.gz tar zxvf haproxy-1.4.13.tar.gz cd haproxy-1.4.13 make TARGET=linux26 PREFIX=/usr/local/haproxy install mkdir /usr/local/haproxy/conf vim /usr/local/haproxy/conf/haproxy.cfg

  1. global
  2. log 127.0.0.1 local0 info
  3. maxconn 4096
  4. user haproxy
  5. group haproxy
  6. daemon
  7. nbproc 1
  8. pidfile /var/run/haproxy.pid
  9. defaults
  10. mode http
  11. maxconn 2000
  12. contimeout 5000
  13. clitimeout 30000
  14. srvtimeout 30000
  15. option httplog
  16. option redispatch
  17. option abortonclose
  18. retries 3
  19. listen admin_stats
  20. bind 113.106.185.245:443
  21. mode http
  22. log 127.0.0.1 local0 err
  23. stats uri /qhappy_stats
  24. stats realm 9ai9.net\ Qhappy
  25. stats auth qhappy:qhappy
  26. stats refresh 5s
  27. listen site_status
  28. bind 113.106.185.245:445
  29. mode http
  30. log 127.0.0.1 local0 err
  31. monitor-uri /site_status
  32. frontend WEB_SITE
  33. bind 0.0.0.0:8080
  34. mode http
  35. log global
  36. option httplog
  37. option httpclose
  38. option forwardfor
  39. acl COOKIE hdr_reg(host) -i ^(cookie.9ai9.net)
  40. acl SOURCE hdr_reg(host) -i ^(sourceip.9ai9.net)
  41. acl APPSESSION hdr_reg(host) -i ^(appsession.9ai9.net)
  42. acl NOSESSION hdr_reg(host) -i ^(nosession.9ai9.net)
  43. use_backend COOKIE_srv if COOKIE
  44. use_backend SOURCE_srv if SOURCE
  45. use_backend APPSESSION_srv if APPSESSION
  46. use_backend NOSESSION_srv if NOSESSION
  47. /# default_backend ai_server
  48. backend COOKIE_srv
  49. mode http
  50. cookie SESSION_COOKIE insert indirect nocache
  51. server REALsrv_70 184.82.239.70:80 cookie 11 check inter 1500 rise 3 fall 3 weight 1
  52. server REALsrv_120 220.162.237.120:80 cookie 12 check inter 1500 rise 3 fall 3 weight 1
  53. backend SOURCE_srv
  54. mode http
  55. balance source
  56. server REALsrv_70 184.82.239.70:80 cookie 11 check inter 1500 rise 3 fall 3 weight 1
  57. server REALsrv_120 220.162.237.120:80 cookie 12 check inter 1500 rise 3 fall 3 weight 1
  58. backend APPSESSION_srv
  59. mode http
  60. appsession 9ai9 len 64 timeout 5h request-learn
  61. server REALsrv_70 184.82.239.70:80 cookie 11 check inter 1500 rise 3 fall 3 weight 1
  62. server REALsrv_120 220.162.237.120:80 cookie 12 check inter 1500 rise 3 fall 3 weight 1 1.
  63. backend NOSESSION_srv
  64. mode http
  65. balance roundrobin
  66. server REALsrv_70 184.82.239.70:80 cookie 11 check inter 1500 rise 3 fall 3 weight 1
  67. server REALsrv_120 220.162.237.120:80 cookie 12 check inter 1500 rise 3 fall 3 weight 1
  68. backend ai_server
  69. mode http
  70. balance roundrobin
  71. cookie SERVERID
  72. server REALsrv_70 184.82.239.70:80 cookie 2 check inter 1500 rise 3 fall 3 weight 1
  73. server REALsrv_120 220.162.237.120:80 cookie 1 check inter 1500 rise 3 fall 3 weight 1 复制代码 haproxy 启动重启等管理脚本 cd /etc/init.d/ wget http://www.9ai9.net/download/shell/haproxy chmod 755 haproxy chkconfig --add haproxy 使用方法 你懂的 /etc/init.d/haproxy {start|stop|status|checkconfig|restart|try-restart|reload|force-reload} 5 本实验中使用到相同的index.php代码 如下
  74. <?php
  75. session_start();
  76. $_SESSION['time'] =date("Y:m:d:H:s",time());
  77. echo "本次访问时间"."".$_SESSION['time'].""."
    ";
  78. echo "访问的服务器地址是"."".$_SERVER['SERVER_ADDR'].""."
    ";
  79. echo "访问的服务器域名是"."".$_SERVER['SERVER_NAME'].""."
    ";
  80. echo "SESSIONNAME是"."".session_name().""."
    ";
  81. echo "SESSIONID是"."".session_id().""."
    ";
  82. ?> 复制代码6 联系方法及扩展阅读 笔者 水煮鱼@溢 微博 http://t.qq.com/cllxy1234 欢迎收听 haproxy 官网 http://haproxy.1wt.eu/download/1.4/doc/configuration.txt 董旗宇 http://www.9ai9.net/download/art/HAProxy配置使用说明.pdf
    刘天斯 http://blog.liuts.com/post/223/ linuxtone http://bbs.linuxtone.org/thread-73-1-1.html

来源: [http://bbs.linuxtone.org/thread-9526-1-1.html](http://bbs.linuxtone.org/thread-9526-1-1.html)

希望本站内容对您有点用处,有什么疑问或建议请在后面留言评论
转载请注明作者(RobinChia)和出处 It so life ,请勿用于任何商业用途