Nginx如何实现TCP负载均衡?

Nginx可以通过ngx_http_upstream_module模块实现Session共享。Session共享用于在上游服务器之间同步会话数据,保证用户在多个服务器之间切换时会话不中断。

实现Session共享需要以下步骤:
1、 选择一致性Hash负载均衡策略(ip_hash或hash),使同一客户端IP的请求始终转发到同一台上游服务器。

upstream app_servers {
    ip_hash;
    server 127.0.0.1:8000;
    server 127.0.0.1:8001; 
}

2、 定义共享内存区或其他机制使上游服务器能访问同一Session数据。

  • Nginx提供ngx_http_memc_module共享内存模块。
  • 也可以使用redis等持久化存储作为会话存储介质。

3、 上游应用服务器将Session数据保存到第2步定义的共享存储。

4、 Nginx将请求根据ip_hash转发到对应的上游服务器。

5、 上游服务器从共享存储中获取对应会话数据,保证会话连续。
例如,完整配置:

# Nginx配置

upstream app_servers {
    ip_hash;
    server 127.0.0.1:8000;
    server 127.0.0.1:8001;  
}

# 上游服务器使用共享内存模块api保存session
ngx_http_memc_set("some_key", "some value", 5);  

这种配置可以在负载均衡的上游服务器之间实现会话同步,用户在不同服务器之间切换时会话保持不变。