http出口的负载拨揞搠床均衡策略是roundrobin,部分业务系统将会话信息保存在backend server,且backend server之间未廪咫錾净做同步。用户在访问、操作的时候,会出现会话不连贯的现象 。
几种方式对比
1、在haproxy的配置文件的balance中进行配置。
2、source的方式将同一个源IP的请求转葛激握颟发给同一个backend server,可以作用于tcp和http。但是当某个源IP的请求量较大,或者用户请求经过NAT后到达,会导致backend server的负载严重不均衡。不采用。
3、url_param的方式,需要业务在url中带有sessionid,适用于http。不采用。
4、stick-tables的方式,设置复杂,且需要维护记录表。不采用。
5、cookie的方式本身也有多种策略,例如insert,prefix,rewrite等,适用于http。
6、经过对比,决定采用以下方式:cookie cookie.XXXXX.cn insert indirect postonly
结果说明
1、未发送post请求之前,依然采用roundrobin的方式。第一次get请求:
2、第二次get请求:
3、发送了post请求后,被设置cookie。cookie的值为处理post请求的backend server的ID。
4、后续请求被转发到同一个backend server用户后续所有http请求,都会带上cookie,被转发到同一个backend server。
5、绑定的backend server宕机后,cookie失效绑定的backend server宕机后,虽然后续发送的请求中依然会带有cookie,但是这骀旬沃啭时候会重新回到roundrobin的状态,直到用户再次发送POST请求,重新绑定backend server。宕机后,再次发送POST的情形: