背景:
有两台ECS服务器都部署了相同的站点,访问时通过SLB进行分发。
问题:
假如第一次通过SLB访问时分发到了后端的ECS1服务器,上传的文件也放在了ECS1服务器上。
第二次再次通过SLB访问时恰好分发到了ECS2服务器,这时候就访问不到上次上传的文件了。
备注:
文件的访问方式如下:
- 通过SLB地址进行分发:这样无法保证恰好能分发到文件所在的服务器,不可行
- 将所有文件固定存放到ECS1服务器,通过固定的ECS1服务器地址访问:如果用户网络能直接访问到ECS就可行,如果不能直接访问后端的ECS服务器则不可行
解决方案:
1、实时同步后端ECS服务器上的文件
弊端:文件冗余;有可能同步失败;性能问题
2、增加一台文件服务器
弊端:待续
3、采用阿里云的NAS服务
具体怎么实现有待研究。初步理解是把站点文件存放在NAS文件系统,然后两台ECS服务器上的站点目录都指向到NAS文件系统。不知道理解的对不对,有待验证。
最终实现:
1、控制文件上传创建都保存在ECS1一台服务器,这个可以通过代码实现。并且文件的保存路径都为SLB的地址,而不是ECS1的地址。
2、在ECS2站点下添加虚拟目录,实际指向ECS1服务器下的文件存放目录
3、最终访问文件时通过SLB就算分发到ECS2上,读取ECS2下的目录时实际读取的还是ECS1下的文件目录