基于阿里云提供的 LBS、ECS、RDS


  • 对外域名 example.com

  • ECS1:公网 IP 200.114.5.36,内网 IP 192.1.1.100

  • ECS2:公网 IP 200.114.5.37,内网 IP 192.1.1.101

  • LBS:公网IP 222.1.1.1

  • RDS:账号信息 -h 192.1.1.102 -P 3306 -utest -ptest



步骤:

  1. example.com DNS 解析指向 LBS 222.1.1.1

  2. LBS 后台添加 ECS1 和 ECS2,对外端口 80,对内端口 80,加权轮询策略,会话保持3600秒

  3. ECS1 和 ECS2 中的应用数据库使用 RDS,应用 session 保存在 RDS。图片等存储最好使用 OSS,如果不是 OSS 少数场景可能存在少许问题,这里不展开。


负载均衡的效果如下:

curl http://222.1.1.1/index.html

ECS1

curl http://222.1.1.1/index.html

ECS2


附:Session 同步问题

  • LBS 支持会话保持,但并不支持 session 同步。所谓会话保持,是指来自同一个 用户的请求会在一段时间内路由到同一个 ECS;session 同步是指一个用户的 session 数据保持在多个 ECS 中,无论用户请求哪个 ECS, session 数据都存在。

  • 阿里云 LBS 不支持 session 同步的原因: session 同步是应用层的事情,底层软件无法感知 session。默认情况下 PHP 将 session 数据保存在磁盘文件中,PHP 配置文件中 session.save_path 负责session文件的存放位置。

  • 应用层 session 同步方案:把 session 保存在数据库中,如 RDS 、Memcached、Redis 等。