haproxy有关session的问题
在实验的时候遇到一个问题就是当我登录网站的时候,然后我再刷新一下,用户的状态就退出了
我现在的框架是这样的,前面有一台haproxy作为反向代理,后面有两台服务器跑的是java应用。后面两台服务器做的是一个负载均衡
现在要解决这个问题就是用haproxy 的session的方法来解决
原文参照
http://bbs.linuxtone.org/thread-9526-1-1.html
http://lxsym.blog.51cto.com/1364623/852400
本帖最后由 snifferqq 于 -- : 编辑 haproxy 解决 多主机session共享问题 的三种方法
session知识储备
haproxy三种方法保持客户端session一致
实验环境及结构
安装配置及管理
本实验中使用到相同的index.php代码
联系方法及扩展阅读
感谢 不就是要我命 QQ 提供测试主机 session知识储备
Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。
而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。
服务器也通过URL重写的方式来传递SessionID的值,因此不是完全依赖Cookie。如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。 php.ini 里几个session相关值的 其它的值请参考《PHP与Mysql5程序设计》
session.use_cookies = #表示 服务端和客户端交互session是通过cookie的方式 默认值
session.name = 9ai9 #默认值是PHPSESSID 我这里改成9ai9是为了和默认值区别
session.cache_limiter = nocache #此设置确保对每个请求,在可能提供缓存的版本前,先请求发送到最初的服务器。这个值联系到下文中 cookie识别中的相关参数 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 timeout 5h request-learn 注意 9ai9 这个值替换成 你的php.ini 里session.name的值。 实例访问 http://appsession.9ai9.net:8080 2.4 只做简单轮询对比
实例访问 http://nosession.9ai9.net:8080
实验环境及结构
CentOS 5.3
haproxy 113.106.185.245
WEB1 REALsrv_70 184.82.239.70
WEB2 REALsrv_120 220.162.237.120
安装配置及管理 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..tar.gz
cd haproxy-1.4.
make TARGET=linux26 PREFIX=/usr/local/haproxy install
mkdir /usr/local/haproxy/conf
vim /usr/local/haproxy/conf/haproxy.cfg
global
log 127.0.0.1 local0 info
maxconn
user haproxy
group haproxy
daemon
nbproc
pidfile /var/run/haproxy.pid
defaults
mode http
maxconn
contimeout
clitimeout
srvtimeout
option httplog
option redispatch
option abortonclose
retries
listen admin_stats
bind 113.106.185.245:
mode http
log 127.0.0.1 local0 err
stats uri /qhappy_stats
stats realm 9ai9.net\ Qhappy
stats auth qhappy:qhappy
stats refresh 5s
listen site_status
bind 113.106.185.245:
mode http
log 127.0.0.1 local0 err
monitor-uri /site_status
frontend WEB_SITE
bind 0.0.0.0:
mode http
log global
option httplog
option httpclose
option forwardfor
acl COOKIE hdr_reg(host) -i ^(cookie.9ai9.net)
acl SOURCE hdr_reg(host) -i ^(sourceip.9ai9.net)
acl APPSESSION hdr_reg(host) -i ^(appsession.9ai9.net)
acl NOSESSION hdr_reg(host) -i ^(nosession.9ai9.net)
use_backend COOKIE_srv if COOKIE
use_backend SOURCE_srv if SOURCE
use_backend APPSESSION_srv if APPSESSION
use_backend NOSESSION_srv if NOSESSION
# default_backend ai_server
backend COOKIE_srv
mode http
cookie SESSION_COOKIE insert indirect nocache
server REALsrv_70 184.82.239.70: cookie check inter rise fall weight
server REALsrv_120 220.162.237.120: cookie check inter rise fall weight
backend SOURCE_srv
mode http
balance source
server REALsrv_70 184.82.239.70: cookie check inter rise fall weight
server REALsrv_120 220.162.237.120: cookie check inter rise fall weight
backend APPSESSION_srv
mode http
appsession 9ai9 len timeout 5h request-learn
server REALsrv_70 184.82.239.70: cookie check inter rise fall weight
server REALsrv_120 220.162.237.120: cookie check inter rise fall weight backend NOSESSION_srv
mode http
balance roundrobin
server REALsrv_70 184.82.239.70: cookie check inter rise fall weight
server REALsrv_120 220.162.237.120: cookie check inter rise fall weight
backend ai_server
mode http
balance roundrobin
cookie SERVERID
server REALsrv_70 184.82.239.70: cookie check inter rise fall weight
server REALsrv_120 220.162.237.120: cookie check inter rise fall weight
复制代码
haproxy 启动重启等管理脚本
cd /etc/init.d/
wget http://www.9ai9.net/download/shell/haproxy
chmod haproxy
chkconfig --add haproxy 使用方法 你懂的
/etc/init.d/haproxy {start|stop|status|checkconfig|restart|try-restart|reload|force-reload} 本实验中使用到相同的index.php代码 如下
<?php
session_start();
$_SESSION['time'] =date("Y:m:d:H:s",time());
echo "本次访问时间"."<font color=red>".$_SESSION['time']."</font>"."<br>";
echo "访问的服务器地址是"."<font color=red>".$_SERVER['SERVER_ADDR']."</font>"."<br>";
echo "访问的服务器域名是"."<font color=red>".$_SERVER['SERVER_NAME']."</font>"."<br>";
echo "SESSIONNAME是"."<font color=red>".session_name()."</font>"."<br>";
echo "SESSIONID是"."<font color=red>".session_id()."</font>"."<br>";
?>
复制代码
联系方法及扩展阅读
笔者 水煮鱼@溢 微博 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
backend h5.kongzfinance.com
balance roundrobin
appsession JSESSIONID len timeout 5h request-learn
option httpchk GET /test HTTP/1.0
server 10.5.25.14: 10.5.25.174: check inter rise fall weight
server 10.5.16.42: 10.5.16.42: check inter rise fall weight
这里的JSESSIONID 是后端程序的session.name
比如说这里我们打开一个我们的测试网站的链接地址
然后按F12
我们复制一下cookie的内容看一下
然后这里们然后重启一下haproxy,然后我们再次访问一下
haproxy有关session的问题的更多相关文章
- haproxy测试
环境: Clients:N台linux, 使用“ab -k -c 20000...” 并发2w 请求haproxy Haproxy Server: R610 2*8核 2.4G Real Server ...
- haproxy 安装与配置
一. Haproxy 介绍 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.根据官方数据,其最高极限支持10G的并发.HAP ...
- 用HAProxy和KeepAlived构建高可用的反向代理系统
对于访问量较大的网站来说,随着流量的增加单台服务器已经无法处理所有的请求,这时候需要多台服务器对大量的请求进行分流处理,即负载均衡.而如果实现负载均衡,必须在网站的入口部署服务器(不只是一台)对这些请 ...
- 【 HAProxy 】学习笔记
一.haproxy的功能: HAProxy vs LVS HAProxy支持tcp和http两种代理模式,而lvs仅支持tcp代理模式 HAProxy相比LVS的使用要简单 ...
- Haproxy+asp.net +RedisSessionStateProvider 完美实现负载均衡,并且session保持
.net framework 4.5下测试成功,使用RedisSessionStateProvider 2.2.1保持session数据,通过Haproxy保持会话数据.首先在PM下安装RedisSe ...
- haproxy+tomcat实现负载均衡以及session共享(linux centos7环境)
一.安装HAProxy 1.进入home目录,下载最新haproxy安装包. cd /home wget http://haproxy.1wt.eu/download/1.4/src/haproxy- ...
- HAProxy负载均衡保持客户端和服务器Session亲缘性的3种方式
1 用户IP 识别 haroxy 将用户IP经过hash计算后 指定到固定的真实服务器上(类似于nginx 的IP hash 指令) 配置指令: balance source 配置实例: backe ...
- Haproxy 8种算法+Session共享
Haproxy有8种负载均衡算法(balance),分别如下: 1.balance roundrobin # 轮询,软负载均衡基本都具备这种算法 2.balance static-rr # 根据权重, ...
- Haproxy之负载均衡功能、基于cookie的session持久、haproxy自带的健康页面及其动静分离的实现
实验前提: 1.本次实验是在Centos 7.4(64bit)系统上完成的.2.实验前确保每台服务器时间同步3.本次实验有3台主机,其中haproxy作为反向代理地址为192.168.31.43,后面 ...
随机推荐
- simple-libfm-example-part1
原文:https://thierrysilbermann.wordpress.com/2015/02/11/simple-libfm-example-part1/ I often get email ...
- matlab中将矩阵按照行打乱顺序的一个例子
来自百度百科: A = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12] rowrank = randperm(size(A, 1)); % 随机打乱的数字,从1~行数打 ...
- nyoj-659-推断三角形(大坑)
推断三角形 时间限制:1000 ms | 内存限制:65535 KB 难度: 描写叙述 小明非常喜欢研究三角形.如今,小明已经知道三角形的三条边.假设三条边能组成三角形,小明就会非常高兴,他就会得 ...
- (LeetCode 83)Remove Duplicates from Sorted Lists
Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...
- android 时间与String的相互转化
:大体思路 [html] view plaincopy 这种转换要用到java.text.SimpleDateFormat类 字符串转换成日期类型: 方法1: 也是最简单的方法 Date date=n ...
- ZH奶酪:在博客中添加Latex公式
1. 点击编辑器中的插入图片: 2.在URL输入下边的地址: http://latex.codecogs.com/gif.latex?你的latex代码 就可以了-
- ZH奶酪:Linux/Ubuntu 安装/卸载 软件
1.安装.deb文件 以安装Chrome为例: (1)到官方网站下载Chrome浏览器相应版本,比如google-chrome-stable_current_i386.deb: (2)Ctrl+Alt ...
- 子查询二(在HAVING子句中使用子查询)
HAVING子句的主要功能是对分组后的数据进行过滤,如果子查询在HAVING中表示要进行分组过滤,一般返回单行单列的数据 示例一.查询部门编号,人数,平均工资,并且要求这些部门的平均工资高于公司的平均 ...
- 算法笔记_197:历届试题 带分数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. ...
- Performance Testing
To test application performance, add rules using FiddlerScript to the OnBeforeResponse function (exc ...