基于阿里云提供的 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
步骤:
example.com DNS 解析指向 LBS 222.1.1.1
LBS 后台添加 ECS1 和 ECS2,对外端口 80,对内端口 80,加权轮询策略,会话保持3600秒
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 等。