在学习taotao商城
这个视频的过程中、用到了fastdfs
、刚好自己有一台服务器就自己学习了下、参考了网上多篇文章、感谢各位分享~~
FastDFS
是c
写的开源分布式文件系统、充分考虑了冗余被人、负载均衡、及线性扩容机制、注重高可用、高性能指标、可以很方便的搭建一套高性能的文件服务器集群提供文件上传、下载等服务~
###一、FastDFS架构
FastDFS
包括Tracker server
和Storage server
, 客户端请求Tracker server
进行文件上传、下载,通过Tracker server
调度最终由Storage server
完成文件上传和下载。 Tracker server
的角色类似于dubbo
的registry
和moniter
、并不直接提供服务、而是storage server
启动时注册到tracker server
, client
通过tracker server
连接storage server
, client
不知道自己连接的是哪一台storage server
, 连接完成后、上传和下载是client
直接请求storage server
, 可类比于 dubbo consumer
通过registry
连接dubbo service
但、连接完成之后是consumer
和service
直接通信
#####文件上传流程
文件下载流程
####1.Tracker Server
Tracker server
作用是负载均衡和调度,通过Tracker server
在文件上传时可以根据一些策略找到Storage server
提供文件上传服务,可以将tracker称为追踪服务器或调度服务器
####1.Storage Server
Storage server
作用是文件存储,客户端上传的文件最终存储在Storage
服务器上,Storage server
没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage
称为存储服务器。
二、FastDFS安装
####1.安装libfastcommon
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 1. 下载: wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz 2. 修改名字:mv V1.0.7 libfastcommon-1.0.7.tar.gz 3. 解压:tar zxvf libfastcommon-1.0.7.tar.gz 4. cd libfastcommon-1.0.7/ 5. 编译:./make.sh 6. 安装:./make.sh install
另外: 设置几个软链接、方便后续扩展nginx时使用: ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
|
2. 安装 tracker
1 2 3 4 5 6 7
| 1. 下载: wget https: 2. 修改名字:mv V5.05 FastDFS_v5.05.tar.gz 3. 解压:tar zxvf FastDFS_v5.05.tar.gz 4. 进入解压后目录:cd fastdfs-5.05/ 5. 编译:./make.sh 6. 安装:./make.sh install
|
3. 修改tracker配置文件
1 2 3 4 5 6 7 8
| 2安装完成后、在/etd/fdfs下有tracker的配置文件 复制一份:cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf mkdir -p /usr/local/fastdfs/ (此处可以根据自己的情况和习惯存放) base_path= /usr/local/fastdfs/
启动 tracker 服务:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf 重启 tracker 服务:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart 查看是否有 tracker 进程:ps aux | grep tracker
|
####4. storage(存储节点)服务部署
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 一般 storage 服务我们会单独部署到一台服务器上,但是这里为了方便(~~我只有一台服务器~~)就安装在同一台上了
如果单独部署到一台服务器上、上边tracker的部署步骤重新来一遍即可 这里是同一台server、只修改配置~~
复制一份配置:cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf 编辑:vim /etc/fdfs/storage.conf base_path= /usr/local/fastdfs/
创建目录:mkdir /usr/local/fastdfs/storage/images-data store_path0= /usr/local/fastdfs/storage/images-data
图片实际存放路径,如果有多个,这里可以有多行(要创建多个目录): store_path0=/opt/fastdfs/storage/images-data0 store_path1=/opt/fastdfs/storage/images-data1
subdir_count_per_path=256 是用来配置目录个数的、如果只是练习不做实际存储服务、可改小一点儿
指定 tracker 服务器的 IP 和端口 tracker_server=192.168.1.114:22122 (192.168.1.114)是你的server服务器ip、本机也可以使用(0.0.0.0:22122)、记得不可使用127.0.0.1
|
5. 测试服务
1 2 3
| 启动 storage 服务:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf,首次启动会很慢,因为它在创建预设存储文件的目录 重启 storage 服务:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart 查看是否有 storage 进程:ps aux | grep storage
|
####6. 查看tracker
是否可以正常与storage
通信
1 2 3 4 5 6 7 8
| fdfs_monitor /etc/fdfs/storage.conf ... Storage 1: id = 192.168.2.231 ip_addr = 192.168.2.231 ACTIVE --若看到ACTIVE这个字样、代表可以正常通信 ... 查看storage和tracker是否正常启动: ps aux | grep fdfs
|
7. 使用fdfs_client测试
1 2 3 4 5 6 7 8 9 10 11 12 13
| 复制一份配置:cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf 编辑:vim /etc/fdfs/client.conf
base_path= /usr/local/fastdfs/
指定 tracker 服务器的 IP 和端口 tracker_server=192.168.1.114:22122 log_level=info
echo asasasa > ~/test.txt
测试:fdfs_test /etc/fdfs/client.conf upload ~/test.txt 可以看到如下图所示、就是上传成功了
|
####8. 安装Nginx和其插件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 如果Nginx已经安装过,则仅需要fastdfs-nginx-module_v1.16.tar.gz 下载nginx:wget http: 下载Nginx插件:wget http: 解压 Nginx 模块:tar zxvf fastdfs-nginx-module_v1.16.tar.gz 进入解压后的目录 cd fastdfs-nginx-module vim src/config 修改:去掉local、因为实际安装fastdfs时、是放到了/usr/include下 1. CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/" -> CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
2. CORE_LIBS="$CORE_LIBS -L/usr/local/lib -lfastcommon -lfdfsclient" -> CORE_LIBS="$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"
回到nginx的解压目录 cd ../nginx-1.11.8 sudo ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/bin/nginx --conf-path=/usr/local/etc/nginx/nginx.conf --pid-path=/usr/local/var/run/nginx.pid --lock-path=/usr/local/var/run/nginx.lock --error-log-path=/usr/local/var/log/nginx/^Cror.log --http-log-path=/usr/local/var/log/nginx/access.log --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module --with-file-aio --add-module=/home/nj/build/fastdfs-nginx-module/src
sudo make && sudo make install (若是有权限的账户、可以不用加sudo、我使用的是普通用户)
|
####9. 整个fastdfs-nginx-module和nginx
1 2 3 4 5 6 7 8
| copy fastdfs-nginx-module的配置文件到 /etc/fdfs下、方便查找 cp /home/nj/build/fastdfs-nginx-module/src/mod_fdfs.conf /etc/fdfs vi /etc/fdfs/mod_fdfs.conf
base_path=/usr/local/fastdfs tracker_server=192.168.1.114:22122 url_have_group_name = true store_path0=/usr/local/fastdfs/storage
|
####10. 然后配置Nginx,添加如下内容
1 2 3 4 5 6 7 8 9 10 11 12 13
| server { listen 80; server_name localhost;
...
location /group1/M00 { ngx_fastdfs_module; } ... } 启动nginx
|
用浏览器访问刚才步骤7中测试上传的文件:
1
| http://xxxx/group1/M00/00/00/fwAAAVu0UTSAZiNHAAAACE6c2W4921_big.txt
|
^.^
哦啦~ 到此安装完成、可以使用了~
####另外:
1 2 3
| fastdfs提供了php_client、可以使用php调用fastdfs的服务 参考: https://github.com/happyfish100/fastdfs/tree/master/php_client/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz
|
参考资源
- https://github.com/happyfish100/fastdfs/tree/master/php_client
- https://www.waitig.com/fastdfs%E5%AE%89%E8%A3%85%E6%AD%A5%E9%AA%A4.html
- https://www.codetd.com/article/3138763
- http://soartju.iteye.com/blog/803477
等多个网络资源…