1 http下载架构
2 fastdfs分布式架构设计安装
安装详解:http://blog.csdn.net/clevercode/article/details/52267080。
3 FastDFS扩展模块
3.1 原理解析:http://blog.csdn.net/clevercode/article/details/52276077。
3.2 FastDFS扩展模块要点:
1 使用扩展模块来解决文件同步延迟问题
2 在每台storage server上部署web server,直接对外提供HTTP服务
3 tracker server上不需要部署web server,开启http服务。
4 如果请求文件在当前storage上不存在,通过文件ID反解出源storage,直接请求源storage
5 目前已提供apache和nginx扩展模块 FastDFS扩展模块不依赖于FastDFS server,可以独立存在!
3.3 模块工作机制:
1 对请求URL中的文件名进行反解,得到文件创建时间、文件大小和源storage server IP地址
2 如果文件在本地存在,直接返回文件内容;否则转3
3 文件在本地不存在的情况处理:
1)如果 (当前时间 - 文件创建时间) > 文件同步延迟阀值(如一天) 或者 源storage server IP地址在本机IP中(即当前文件上传到的源storage server为本机),则返回404 NOT FOUND
2)如果配置为redirect模式,直接重定向到源storage server IP对应的URL;否则为proxy模式,调用FastDFS client API从源storage server IP获取该文件并返回给客户端
4 nginx的fdfs扩展模块后,就使用nginx的负载均衡,向tracker server获取两个参数而已,这两个参数是:
storage_sync_file_max_delay:文件同步的最大延迟,缺省为1天
storage_sync_file_max_time:同步单个文件需要的最大时间,缺省为5分钟。
4 配置storage(192.168.101.132)上的nginx
4.1 配置nginx扩展(mod_fastdfs.conf)
# cp /usr/local/src/nginx/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
# vi /etc/fdfs/mod_fastdfs.conf
base_path=/data0/fastdfs
tracker_server=192.168.101.135:22122
group_name=group1
url_have_group_name = true
store_path0=/data0/fastdfs/storage/storage0
4.2 配置nginx.conf
# vi /usr/local/nginx/conf/nginx.conf
add_header srv-id 132;
server_name img1.mydomain.com;
location /group1/M00 {
root /data0/fastdfs/storage/storage0/data;
ngx_fastdfs_module;
}
启动
# /usr/local/nginx/sbin/nginx
5 配置storage(192.168.101.133)上的nginx
5.1 配置nginx扩展(mod_fastdfs.conf)
# cp /usr/local/src/nginx/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
# vi /etc/fdfs/mod_fastdfs.conf
base_path=/data0/fastdfs
tracker_server=192.168.101.135:22122
group_name=group1
url_have_group_name = true
store_path0=/data0/fastdfs/storage/storage0
5.2 配置nginx.conf
# vi /usr/local/nginx/conf/nginx.conf
add_header srv-id 133;
server_name img2.mydomain.com;
location /group1/M00 {
root /data0/fastdfs/storage/storage0/data;
ngx_fastdfs_module;
}
启动
# /usr/local/nginx/sbin/nginx
6 测试
配置host(C:\Windows\System32\drivers\etc\hosts)
192.168.101.132 img1.mydomain.com
192.168.101.133 img2.mydomain.com
6.1 132与133都开启storage
a)上传w8.png。可以看到被轮询上传到了192.168.101.132storage中。
# /usr/local/bin/fdfs_test /etc/fdfs/client.conf upload w8.png
b)访问img1.mydomain.com,本地命中图片。
http://img1.mydomain.com/group1/M00/00/00/wKhlhFe7DCeAcOvYAAaxqYLWRQk392.png
c)访问img2.mydomain.com,本地命中图片。
http://img2.mydomain.com/group1/M00/00/00/wKhlhFe7DCeAcOvYAAaxqYLWRQk392.png
6.2 停止132storage,只开启133storage
a)停止192.168.101.132storage
# /usr/local/bin/stop.sh /usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf
b)上传w9.png图片。图片只能被存储到192.168.101.133的storage中
# /usr/local/bin/fdfs_test /etc/fdfs/client.conf upload w9.png
c)访问img2.mydomain.com,本地命中图片。
http://img2.mydomain.com/group1/M00/00/00/wKhlhVe7DuSALxjTAAKHqXsWj4A287.png
d)访问img1.mydomain.com,本地132没有,解析源ip到133服务器去取。
http://img1.mydomain.com/group1/M00/00/00/wKhlhVe7DuSALxjTAAKHqXsWj4A287.png