WebSocket负载均衡方案

 

原文地址:http://www.yangguo.info/2014/6/25/10.html

 

目标

根据指定的key对websocket连接进行负载均衡,达到一致性哈希的效果。

调度模式

Haproxy,负载均衡调度模式有如下几种:

  1. roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
  2. static-rr,表示根据权重;
  3. leastconn,表示最少连接者先处理;
  4. source,表示根据请求源IP;
  5. uri,表示根据请求的URI;
  6. url_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name
  7. hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
  8. rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

方案及实现

模式:url_param

前端:通过带参的uri,来向server端(Haproxy/Socketserver)发起请求,如:

  • ws://localhost/ws?userid=111,来向server端发起请求。

Haproxy:通过acl来配置规则,如:

  • acl is_websocket hdr(Upgrade) -i WebSocket
  • acl is_websocket hdr_beg(Host) -i ws

反向代理负载均衡配置,如:

  • backend socket_backend_url_param
  • balance url_param userid
  • option forwardfor
  • timeout queue 5000
  • timeout server 5000
  • timeout connect 5000
  • server server1 test:8081
  • server server2 test:8082

整体配置

global
maxconn     4096 # Total Max Connections. This is dependent on ulimit
nbproc      2

defaults
    mode        http

frontend all 0.0.0.0:80
    timeout client 5000
    default_backend www_backend
    acl is_websocket hdr(Upgrade) -i WebSocket
    acl is_websocket hdr_beg(Host) -i ws

    use_backend socket_backend_url_param if is_websocket

backend www_backend
    balance roundrobin
    option forwardfor # This sets X-Forwarded-For
    timeout server 5000
    timeout connect 4000
    server server1 test:8081 weight 1 maxconn 1024 check
    server server2 test:8082 weight 1 maxconn 1024 check


backend socket_backend_url_param
    balance url_param userid
    option forwardfor
    timeout queue 5000
    timeout server 5000
    timeout connect 5000
    server server1 test:8081
    server server2 test:8082

你可能感兴趣的:(2014)