FastDFS分布式文件系统安装和配置_亲测成功
介绍
分布式文件系统:Distributed file system, DFS,又叫做网络文件系统:Network File System。一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。
FastDFS:是一个开源的轻量级分布式文件系统,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合中小文件(建议范围:4KB < file_size <500MB),对以文件为载体的在线服务,如相册网站、视频网站等。
FastDFS是为互联网应用量身定做的分布式文件系统,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标。和现有的类Google FS分布式文件系统相比,FastDFS的架构和设计理念有其独到之处,主要体现在轻量级、分组方式和对等结构三个方面。
FastDFS架构
FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)三个部分组成,主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
FastDFS的系统结构图如下:
文件服务器搭建
文件服务器搭建参考于博客:http://blog.csdn.net/wlwlwlwl015/article/details/52619851
下载所需的包
yum -y install wget vim gcc-c++ git pcre pcre-devel zlib zlib-devel openssl openssl-devel
mkdir -p /data/software
cd /data/software
wget -O libfastcommon-1.0.7.tar.gz https://codeload.github.com/happyfish100/libfastcommon/tar.gz/V1.0.7
wget -O fastdfs-5.05.tar.gz https://codeload.github.com/happyfish100/fastdfs/tar.gz/V5.05
wget -O libfastcommon-1.0.39.tar.gz https://codeload.github.com/happyfish100/libfastcommon/tar.gz/V1.0.39
wget -O fastdfs-5.11.tar.gz https://codeload.github.com/happyfish100/fastdfs/tar.gz/V5.11
tar -zxvf libfastcommon-1.0.7.tar.gz
tar -zxvf fastdfs-5.05.tar.gz
安装fastdfs
cd /data/software/libfastcommon-1.0.7
./make.sh
./make.sh install
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
cd /data/software/fastdfs-5.05
./make.sh
./make.sh install
cd /etc/fdfs
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
cp /data/software/fastdfs-5.05/conf/http.conf /etc/fdfs
cp /data/software/fastdfs-5.05/conf/mime.types /etc/fdfs
配置和启动tracker
配置tracker
mkdir -p /data/apps/fdfs/tracker
vim /etc/fdfs/tracker.conf
disabled=false #启用配置文件(默认启用)
port=22122 #设置tracker的端口号,通常采用22122这个默认端口
base_path=/data/apps/fdfs/tracker #设置tracker的数据文件和日志目录
http.server_port=6666 #设置http端口号,默认为8080
启动tracker服务
ln -s /usr/bin/fdfs_trackerd /usr/local/bin
ln -s /usr/bin/stop.sh /usr/local/bin
ln -s /usr/bin/restart.sh /usr/local/bin
service fdfs_trackerd start
#/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
设置开机启动
echo 'service fdfs_trackerd start' >> /etc/rc.d/rc.local
echo '/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf start' >> /etc/rc.d/rc.local
配置和启动storage
#配置storage
mkdir -p /data/apps/fdfs/storage
mkdir -p /data/datas/fdfs
vim /etc/fdfs/storage.conf
disabled=false #启用配置文件(默认启用)
group_name=group1 #组名,根据实际情况修改
port=23000 #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
base_path=/data/apps/fdfs/storage #设置storage数据文件和日志目录
store_path_count=2 #存储路径个数,需要和store_path个数匹配
store_path0=/data/datas/fdfs/path0 #实际文件存储路径
store_path1=/data/datas/fdfs/path1 #实际文件存储路径
tracker_server=192.168.111.11:22122 #tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功
http.server_port=8888 #设置 http 端口号
#启动storage服务
ln -s /usr/bin/fdfs_storaged /usr/local/bin
#启动需要一点时间
mkdir -p /data/datas/fdfs/path0
mkdir -p /data/datas/fdfs/path1
service fdfs_storaged start
#/usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf start
#设置开机启动
echo 'service fdfs_storaged start' >> /etc/rc.d/rc.local
echo '/usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf start' >> /etc/rc.d/rc.local
为storage安装nginx模块
安装Nginx
wget http://nginx.org/download/nginx-1.10.2.tar.gz
git clone https://github.com/happyfish100/fastdfs-nginx-module.git
tar -xzvf nginx-1.10.2.tar.gz
cd nginx-1.10.2
./configure --prefix=/data/apps/nginx-storaged \
--pid-path=/data/logs/nginx-storaged/nginx.pid \
--lock-path=/data/apps/nginx-storaged/nginx.lock \
--error-log-path=/data/logs/nginx-storaged/error.log \
--http-log-path=/data/logs/nginx-storaged/access.log \
--http-client-body-temp-path=/data/temps/nginx-storaged/client_body_temp \
--http-proxy-temp-path=/data/temps/nginx-storaged/proxy_temp \
--http-fastcgi-temp-path=/data/temps/nginx-storaged/fastcgi_temp \
--http-uwsgi-temp-path=/data/temps/nginx-storaged/uwsgi_temp \
--http-scgi-temp-path=/data/temps/nginx-storaged/scgi_temp \
--with-http_stub_status_module \
--add-module=/data/software/fastdfs-nginx-module/src
make
make install
致命错误:common_define.h:没有那个文件或目录
参考链接:
https://blog.csdn.net/zzzgd_666/article/details/81911892
/usr/local/include/fastdfs/fdfs_define.h:15:27: 致命错误:common_define.h:没有那个文件或目录
vim fastdfs-nginx-module-1.20/src/config
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
还报错
错误:‘FDFSHTTPParams’没有名为‘support_multi_range’的成员
装新版本的 libfastcommon fastdfs 后重新编译
配置Nginx
mkdir -p /data/datas/fdfs/path0/data
mkdir -p /data/datas/fdfs/path1/data
ln -s /data/datas/fdfs/path0/data /data/datas/fdfs/path0/data/M00
ln -s /data/datas/fdfs/path1/data /data/datas/fdfs/path0/data/M01
修改Nginx配置
vim /data/apps/nginx-storaged/conf/nginx.conf
user root;
#根据CPU个数配置
worker_processes 2;
listen 9999;
access_log /data/logs/nginx-storaged/access.log;
location ~/group1 {
root /data/datas/fdfs/path0/data;
ngx_fastdfs_module;
}
修改Nginx模块配置
cp -r /data/software/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
base_path=/data/logs/fdstdfs-ng-module #保存日志目录
tracker_server=192.168.10.82:22122
tracker_server=192.168.10.83:22122
tracker_server=192.168.10.84:22122
tracker_server=192.168.10.85:22122
storage_server_port=23000 #storage服务器的端口号
url_have_group_name = true #文件 url 中是否有 group 名
store_path_count=2 #存储路径个数,需要和store_path个数匹配
store_path0=/data/datas/fdfs/path0 #实际文件存储路径
store_path0=/data/datas/fdfs/path1 #实际文件存储路径
group_count = 2 #设置组的个数,事实上这次只使用了group1
[group1]
group_name=group1
storage_server_port=23000
store_path_count=2
store_path0=/data/datas/fdfs/path0
store_path1=/data/datas/fdfs/path1
[group2]
group_name=group2
storage_server_port=23000
store_path_count=2
store_path0=/data/datas/fdfs/path0
store_path1=/data/datas/fdfs/path1
启动Nginx
cp -r /data/software/fastdfs-5.05/conf/http.conf /etc/fdfs/
cp -r /data/software/fastdfs-5.05/conf/mime.types /etc/fdfs/
mkdir -p /data/temps/nginx-storaged/client_body_temp
mkdir -p /data/temps/nginx-storaged/client_body_temp
/data/apps/nginx-storaged/sbin/nginx
echo '/data/apps/nginx-storaged/sbin/nginx' >> /etc/rc.d/rc.local
测试安装是否成功
mkdir -p /data/apps/fdfs/client
vim /etc/fdfs/client.conf
base_path=/data/apps/fdfs/client
tracker_server=192.168.10.82:22122
tracker_server=192.168.10.83:22122
tracker_server=192.168.10.84:22122
tracker_server=192.168.10.85:22122
http.tracker_server_port=8080
fdfs_test1 /etc/fdfs/client.conf upload a.txt
Nginx官网upload-module模块代码
Nginx官网upload-module模块代码 指定的是vkholodkov这个地址的,但是自动跳转到fdintino
vkholodkov这个地址已经不存在了
git clone -b 2.2 https://github.com/vkholodkov/nginx-upload-module
git clone -b 2.3.0 https://github.com/fdintino/nginx-upload-module
./configure --prefix=/u06/data/apps/nginx-main \
--pid-path=/u06/data/logs/nginx-main/nginx.pid \
--lock-path=/u06/data/apps/nginx-main/nginx.lock \
--error-log-path=/u06/data/logs/nginx-main/error.log \
--http-log-path=/u06/data/logs/nginx-main/access.log \
--http-client-body-temp-path=/u06/data/temps/nginx-main/client_body_temp \
--http-proxy-temp-path=/u06/data/temps/nginx-main/proxy_temp \
--http-fastcgi-temp-path=/u06/data/temps/nginx-main/fastcgi_temp \
--http-uwsgi-temp-path=/u06/data/temps/nginx-main/uwsgi_temp \
--http-scgi-temp-path=/u06/data/temps/nginx-main/scgi_temp \
--with-http_stub_status_module \
--add-module=/u06/data/software/nginx-upload-module \
--with-http_auth_request_module \
--with-http_ssl_module \
--with-http_realip_module \
--with-pcre=/u06/data/software/pcre-8.35
--add-module=/u06/data/software/fastdfs-nginx-module/src \
前端对外的nginx不用这个fastdfs模块,使用负载到后端的fastdfs去下载文件
查看nginx编译参数
/u06/data/apps/nginx-main/sbin/nginx -V
./configure --prefix=/u06/data/apps/nginx-main \
--pid-path=/u06/data/logs/nginx-main/nginx.pid \
--lock-path=/u06/data/apps/nginx-main/nginx.lock \
--error-log-path=/u06/data/logs/nginx-main/error.log \
--http-log-path=/u06/data/logs/nginx-main/access.log \
--http-client-body-temp-path=/u06/data/temps/nginx-main/client_body_temp \
--http-proxy-temp-path=/u06/data/temps/nginx-main/proxy_temp \
--http-fastcgi-temp-path=/u06/data/temps/nginx-main/fastcgi_temp \
--http-uwsgi-temp-path=/u06/data/temps/nginx-main/uwsgi_temp \
--http-scgi-temp-path=/u06/data/temps/nginx-main/scgi_temp \
--with-http_stub_status_module \
####--add-module=/u06/data/software/fastdfs-nginx-module/src \
--add-module=/u06/data/software/nginx-upload-module \
--with-http_auth_request_module \
--with-http_ssl_module \
--with-http_realip_module \
--with-pcre=/u06/data/software/pcre-8.35
查看nginx编译参数
/u06/data/apps/nginx-storaged/sbin/nginx -V
./configure --prefix=/u06/data/apps/nginx-storaged \
--pid-path=/u06/data/logs/nginx-storaged/nginx.pid \
--lock-path=/u06/data/apps/nginx-storaged/nginx.lock \
--error-log-path=/u06/data/logs/nginx-storaged/error.log \
--http-log-path=/u06/data/logs/nginx-storaged/access.log \
--http-client-body-temp-path=/u06/data/temps/nginx-storaged/client_body_temp \
--http-proxy-temp-path=/u06/data/temps/nginx-storaged/proxy_temp \
--http-fastcgi-temp-path=/u06/data/temps/nginx-storaged/fastcgi_temp \
--http-uwsgi-temp-path=/u06/data/temps/nginx-storaged/uwsgi_temp \
--http-scgi-temp-path=/u06/data/temps/nginx-storaged/scgi_temp \
--with-http_stub_status_module \
--add-module=/u06/data/software/fastdfs-nginx-module/src
参考链接:
https://blog.csdn.net/wlwlwlwl015/article/details/52619851
https://blog.csdn.net/zzzgd_666/article/details/81911892
https://blog.csdn.net/u013378306/article/details/74852294
https://www.cnblogs.com/kevingrace/p/8471827.html
https://my.oschina.net/u/2481288/blog/1829110