本文目录:
- 一、前言
- 二、FastDFS介绍
- 三、FastDFS下载安装
- 四、配置tracker与storage
- 五、测试
- 六、fastdfs-nginx-module安装配置
- 七、Storage的nginx安装配置
- 八、Storage的其他配置
- 九、Tracker的nginx的配置
- 十、nginx下测试
一、前言:
本文实现了FastDFS的安装,测试
系统环境:ubantu16.04
FastDFS版本:5.1.2
二、FastDFS介绍
FastDFS是一个由C语言实现的开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储,文件同步,文件访问(文件上传,下载)等;解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务。如相册网站,视频网站等等。
同类的分布式文件还有谷歌的GFS,HDFS(Hadoop),TFS(淘宝)
FastDFS有两个角色:Tracker(跟踪器),Storage(存储节点)
Tracker:主要做调度作用,起到负载均衡的作用;负责管理所有的Storage和Group,每一个Storage再启动后会连接Tracker,告知自己所属的Group,并保持周期心跳
Storage:存储节点,主要提供容量和备份服务;以Group为单位,每个Group内可以有多台Storage,数据互相备份。
官方提供的架构图:
本文架构是一台服务器:Tracker,Storage(为同一Group)
三、FastDFS的安装(每台服务器都要安装,这里只有一台)
1、下载安装libfastcommon
由于fastdfs5.0.5依赖libfastcommon,先安装libfastcommon
下载:github地址:https://github.com/happyfish100/libfastcommon 下载之后,将其压缩为gzip格式的文件
将文件上传到/home/suer/software/ 目录下
解压libfastcommon,命令:tar -zxvf libfastcommon-master.tar.gz
编译,进入libfastcommon-master目录,命令:cd libfastcommon
sudo ./make.sh
安装,命令:sudo ./make.sh install
显示如上图,libfastcommon 安装成功
2、下载安装FastDFS
下载,网址: https://github.com/happyfish100/fastdfs
解压FastDFS,命令:
tar -zxvf fastdfs-master.tar.gz
编译,进入fastfds-master目录,命令:
cd fastdfs-master ./make.sh
安装,命令:
./make.sh install
显示如上图,FastDFS安装成功
四、配置Tracker与Storage
FastDFS安装成功后,会在/etc目录下会有个fdfs目录,进入fdfs,会发现三个.sample后缀的示例文件。
1、配置Tracker服务器(本文使用192.168.64.141)
在/etc/fdfs目录下,修改tracker.conf,命令:
cp tracker.conf.sample tracker.conf vim tracker.conf
打开tracker.conf,修改如下处:
# the base path to store data and log files base_path=/data/fastdfs/tracker
当然前提是,首先要创建/data/fastdfs/tracker目录,命令:
mkdir -p /data/fastdfs/tracker
修改保存, 启动tracker服务,命令:
fdfs_trackerd /etc/fdfs/tracker.conf start
类似的命令,关闭tracker服务:
fdfs_trackerd /etc/fdfs/tracker.conf stop
启动tracker服务后,查看监听,命令:
netstat -unltp|grep fdfs
tracker默认端口22122
查看/data/fastdfs/tracker目录文件,发现多出两个文件,用来存放数据和日志的
至此tracker跟踪器安装成功。
2、配置Storage服务器(192.168.64.141)
两台服务器,同样进入/etc/fdfs目录下,命令:
cp storage.conf.sample storage.conf vim storage.conf
打开storage.conf,修改如下处:
# the base path to store data and log files base_path=/data/fastdfs/storage # store_path#, based 0, if store_path0 not exists, it's value is base_path # the paths must be exist store_path0=/data/fastdfs/storage # tracker_server can ocur more than once, and tracker_server format is # "host:port", host can be hostname or ip address #配置tracker跟踪器ip端口 tracker_server=192.168.64.141:22122
当然前提是,首先要创建/data/fastdfs/storage目录,命令:
mkdir -p /data/fastdfs/storage
修改保存后,启动storage服务,命令:可能会有点慢
fdfs_storaged /etc/fdfs/storage.conf start
启动有错误,可以通过/data/fastdfs/storage/logs查看
查看/data/fastdfs/storage下文件内容,生成logs、data两个目录
查看下端口监听,命令:
netstat -unltp|grep fdfs
storage默认端口23000
至此Storage存储节点安装成功。
所有存储节点都启动之后,可以在任一存储节点上使用如下命令查看集群的状态信息:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
通过上两图可以看到,storage都为Active,配置成功
五、测试上传文件
三台服务器随便选择一台服务器,这里我选择192.168.7.44服务器
同样进入/etc/fdfs目录,编译client.conf,命令如下:
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf vim /etc/fdfs/client.conf
修改如下:
# the base path to store log files base_path=/data/fastdfs/client # tracker_server can ocur more than once, and tracker_server format is # "host:port", host can be hostname or ip address #配置tracker跟踪器ip端口 tracker_server=192.168.64.141:22122
同样前提是,首先要创建/data/fastdfs/client目录,命令:
mkdir -p /data/fastdfs/client
上传/opt目录的一张图片(名为:14.jpg),命令:
fdfs_test /etc/fdfs/client.conf upload /home/suer/zhsq/20180910173729.jpg
如上图,上传成功,分别进入两台storage服务器目录/var/log/fdfs/storage/data/00/00下,都可以发现,文件保存成功
至此,文件上传测试成功。
六、fastdfs-nginx-module安装配置
a、下载,网址: https://github.com/happyfish100/fastdfs-nginx-module
b、解压fastdfs-nginx-module-master,命令:tar -zxvf fastdfs-nginx-module-master.tar.gz
c、配置config文件,命令:
cd /opt/fastdfs/fastdfs-nginx-module/src vim config
修改如下:不修改后面编译nginx会报错
找到下面一行包含有 local 字眼去掉
e、复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录, 并修改,命令:
进入fastdfs-nginx-module/src目录下,复制mod_fastdfs.conf文件到 /etc/fdfs目录,进入/etc/fdfs目录,修改mod_fastdfs.conf配置文件
cd fastdfs-nginx-module/src cp mod_fastdfs.conf /etc/fdfs cd /etc/fdfs vim mod_fastdfs.conf
修改如下三处:
tracker_server=192.168.7.73:22122 # tracker服务IP和端口
url_have_group_name=true # 访问链接前缀加上组名
store_path0=/data/fastdfs/storage # 文件存储路径
修改保存。
六、fastdfs-nginx-module安装配置
如果没有nginx,就安装nginx进行下面的配置
a、Nginx安装依赖如下(gcc/pcre/zlib/openssl)插件,先要安装如下插件,命令:
apt-get install openssl libssl-dev apt-get install libpcre3 libpcre3-dev apt-get install zlib1g-dev apt-get install build-essential
b、下载nginx,命令
wget -c https://nginx.org/download/nginx-1.10.1.tar.gz
c、解压,命令:
tar -zxvf nginx-1.10.1.tar.gz
d、编译配置,命令:
- 注意最后一行,配置fastdfs-nginx模块的路径(这个路径根据自己实际情况而定)
cd nginx-1.10.1 ./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/local/nginx/nginx.pid \ --lock-path=/var/lock/nginx/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi \ --add-module=/opt/fastdfs/fastdfs-nginx-module/src
e、编译安装,命令:
make && make install
f、启动,命令:
/usr/local/nginx/sbin/nginx
我这里启动报错,找不到那个目录,于是手动创建,再启动
mkdir -p /var/temp/nginx/client
nginx默认端口80,查看命令:
netstat -anp|grep 80
如上图,至此nginx安装成功
还有一种情况,就是已经安装了nginx,那么我们应该先去查看nginx的版本,命令是:nginx -V
如果是apt-get直接安装的,就没有相应的源码包,可以去nginx官网下载相应的版本
完了之后解压,可以重新编译,命令是:
sudo ./configure --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads --add-module=/home/suer/software/fastdfs-nginx-module-master/src
注意加粗的地方,这个是加入新的fastdfs-nginx-module-master进行编译。执行这个命令之后,可能会报错
此时,应该更新一下安装包,命令是:sudo apt-get update
然后执行命令 sudo agt-get install gcc,sudo apt-get install libpcre3 libpcre3-dev,安装这些需要的包
再一次执行 sudo ./configure这个命令,看是否没有问题
我有报错是
于是,sudo apt-get install libxml2 libxml2-dev libxslt-dev,sudo apt-get install libgd2-xpm-dev,sudo apt-get install libgeoip-dev
安装了一大批软件包,终于编译没有问题了sudo make,单数后面还是不能make成功
只能卸载原来的nginx
./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/local/nginx/nginx.pid \ --lock-path=/var/lock/nginx/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi \ --add-module=/home/suer/software/fastdfs-nginx-module-master/src
sudo make&&sudo make install
使用sudo /usr/local/nginx/sbin/nginx -t,看是否nginx启动成功。
我这里启动报错,找不到那个目录,于是手动创建,再启动
mkdir -p /var/temp/nginx/client
nginx默认端口80,查看命令:
netstat -anp|grep 80
如上图,至此nginx安装成功
配置软链接
sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
现在就可以不用路径直接输入nginx启动。
八、Storage的其他配置
复制 FastDFS 的部分配置文件到/etc/fdfs 目录,命令:
cd /opt/fastdfs/fastdfs-5.05/conf cp http.conf mime.types /etc/fdfs
配置nginx.conf文件,命令:
vim /usr/local/nginx/conf/nginx.conf
修改端口与/etc/fdfs/storage.conf 中的http.server_port=8888 相对应
在配置文件中加入如下内容:
location /group1/M00 { root /data/fastdfs/storage/; ngx_fastdfs_module; }
注意事项:
8888 端口值是要与/etc/fdfs/storage.conf 中的http.server_port=8888 相对应,因为 http.server_port 默认为 8888,如果想改成 80,则要对应修改过来。
Storage 对应有多个 group 的情况下,访问路径带 group 名,如/group1/M00/00/00/xxx,对应的 Nginx 配置为:
location ~/group([0-9])/M00 { ngx_fastdfs_module; }
如查下载时如发现老报 404, 将 nginx.conf 第一行 user nobody 修改为 user root 后重新启动。
保存,重启nginx服务
/usr/local/nginx/sbin/nginx -s reload
九、跟踪Tracker(192.168.64.141)服务器配置Ngnix
配置Nginx,设置tracker负载均衡
vim /usr/local/nginx/conf/nginx.conf
设置group负载均衡,设置nginx端口为8000
vim /usr/local/nginx/conf/nginx.conf
设置group负载均衡,设置nginx端口为8000
#设置 group1 的服务器 upstream fdfs_group1 { server 192.168.7.149:8888 weight=1 max_fails=2 fail_timeout=30s; server 192.168.7.44:8888 weight=1 max_fails=2 fail_timeout=30s; } server { listen 8000; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #设置 group 的负载均衡参数 location /group1/M00 { proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_pass http://fdfs_group1; expires 30d; }
g、启动nginx服务,查看启动
/usr/local/nginx/sbin/nginx netstat -anp|grep 8000
测试
通过浏览器访问
测试上传后返回的文件ID为 fdfs_test /etc/fdfs/client.conf upload /home/suer/zhsq/20180910173729.jpg
用浏览通过Storage直接访问:http://192.168.64.141/group1/M00/00/00/wKhAjVubY5OAQ9bvAACQ5k9ZMcA905.jpg