【fastdfs】(一)分布式文件系统 fastdfs-5.11 & Linux CentOS-7-x86_64-DVD-1804 安装配置
分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置
fastdfs-5.11 下载地址:https://github.com/happyfish100/fastdfs/releases
由于FastDFS是纯C语言实现,只支持Linux、FreeBSD等UNIX系统,所以我们直接下载tar.gz的压缩包,同以前版本相比将公共的一些函数等单独封装成了libfastcommon包,所以在安装FastDFS之前我们还必须安装libfastcommon,在余大的GitHub首页可以看到:

下载相关文件可以使用命令:
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.39.zip
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
如果有错误提示:【-bash: wget: command not found的两种解决方法】
yum -y install wget
如果有错误提示:【you need to be root to perform this command】
输入su 回车输入密码
如果有错误提示:【cannot find a valid baseurl for repo:base/7/x86_64】
进入/etc/sysconfig/network-scripts目录,查找ifcfg开头的文件,将配置ONBOOT=no,改为ONBOOT=yes 具体命令如下:
cd /etc/sysconfig/network-scripts
ls
centos7 有ifcfg-ens33 ifcfg-lo两个文件,只需要改ifcfg-ens33文件中的配置即可
使用 vim打开文件ifcfg-ens33,并做更改 vi ifcfg-ens33 的 ONBOOT=no在最后一行,并重启网络
service network restart
【进入了记录状态(recording)不要慌,按esc,然后按q,就可以退出recording了。】
【Linux 命令出现>号(大于号)如何退出】
可以尝试使用如下三种组合指令:
ctrl-c 向当前进程发送 SIGINT 信号,用于终止一个进程
ctrl-z 向当前进程发送 SIGSTOP 信号,用于挂起一个进程
ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF,如果在输入无法结束,提示 ">" 符号(大于号)时,可以尝试按下该组合来结束输入。
安装libfastcommon
首先第一步是安装libfastcommon,我这里将libfastcommon上传到的/usr/local目录下,直接解压:
unzip V1.0.39.zip
解压成功后进入目录看一下压缩包的文件:

如果没有装解压工具unzip可以通过以下yum命令进行安装后再解压:
yum -y install unzip zip
解压完成后就可以进行编译安装了,分别执行./make.sh和./make.sh install,由于是新安装的系统有可能会提示找不到gcc命令,
所以我们先要安装gcc编译器:
yum -y install gcc-c++
此时再次执行./make.sh命令进行编译,没有error信息的话就说明编译成功了,最后再执行./make.sh install进行安装
【最近在实践项目的过程中,用到了fastDFS,安装的时候在./make.sh编译时报错。】
yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget
没有报错就说明安装成功了,至此libfastcommon就已经安装成功了,libfastcommon.so 默认安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以此处需要重新设置软链接(类似于Windows的快捷方式):
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
设置完毕后就可以开始安装fastdfs了。
第一步依然是解压:
tar -zxvf fastdfs-5.05.tar.gz
解压完成后进入目录fastdfs-5.05,依次执行./make.sh和./make.sh install:
./make.sh
./make.sh install
没有报错就说明安装成功了
安装到了/etc/fdfs中,我们看一下该目录下的文件: 安装成功后就会生成如上的3个.sample文件(示例配置文件),我们再分别拷贝出3个后面用的正式的配置文件:
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
之后再查看一下/etc/fdfs的文件目录:

至此FastDFS已经安装完毕,接下来的工作就是依次配置Tracker和Storage了。
在配置Tracker之前,首先需要创建Tracker服务器的文件路径,即用于存储Tracker的数据文件和日志文件等,我这里选择在/opt目录下创建一个fastdfs_tracker目录用于存放Tracker服务器的相关文件:
mkdir /opt/fastdfs_tracker
接下来就要重新编辑上一步准备好的/etc/fdfs目录下的tracker.conf配置文件,打开文件后依次做以下修改:
disabled=false#启用配置文件(默认启用)
port=22122#设置tracker的端口号,通常采用22122这个默认端口
base_path=/opt/fastdfs_tracker#设置tracker的数据文件和日志目录
http.server_port=6666#设置http端口号,默认为8080
配置完成后就可以启动Tracker服务器了,但首先依然要为启动脚本创建软引用,因为fdfs_trackerd等命令在/usr/local/bin中并没有,而是在/usr/bin路径下:
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
最后通过命令启动Tracker服务器:
service fdfs_trackerd start
(有可能报错提示fdfs_trackerd不存在)命令执行后可以看到以下提示:

如果启动命令执行成功,那么同时在刚才创建的tracker文件目录/opt/fastdfs_tracker中就可以看到启动后新生成的data和logs目录,tracker服务的端口也应当被正常监听,最后再通过netstat命令查看一下端口监听情况:
netstat -unltp|grep fdfs
可以看到tracker服务运行的22122端口正常被监听:

确认tracker正常启动后可以将tracker设置为开机启动,打开/etc/rc.d/rc.local并在其中加入以下配置:
service fdfs_trackerd start
如果重启后发现未能自动启动则通过命令ll /etc/rc.d/rc.local检查一下rc.local是否具备可执行权限,若是无可执行权限则通过chmod +x

/etc/rc.d/rc.local进行授权,如下图:

Tracker至此就配置好了,接下来就可以配置FastDFS的另一核心——Storage。
同理,步骤基本与配置Tracker一致,首先是创建Storage服务器的文件目录,需要注意的是同Tracker相比我多建了一个目录,因为Storage还需要一个文件存储路径,用于存放接收的文件:
mkdir /opt/fastdfs_storage
mkdir /opt/fastdfs_storage_data
接下来修改/etc/fdfs目录下的storage.conf配置文件,打开文件后依次做以下修改:
disabled=false#启用配置文件(默认启用)
group_name=group1#组名,根据实际情况修改
port=23000 #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
base_path=/opt/fastdfs_storage#设置storage数据文件和日志目录
store_path_count=1 #存储路径个数,需要和store_path个数匹配
store_path0=/opt/fastdfs_storage_data #实际文件存储路径
tracker_server=192.168.111.11:22122 #tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功(此处的ip是我的CentOS虚拟机ip)
http.server_port=8888#设置 http 端口号
配置完成后同样要为Storage服务器的启动脚本设置软引用:
ln -s /usr/bin/fdfs_storaged /usr/local/bin
接下来就可以启动Storage服务了:
service fdfs_storaged start

启动失败,使用推荐的命令查看失败详情
journalctl -xe

怀疑是安装时候报错导致文件不在,所以重新执行命令:
./make.sh
./make.sh install
执行./make.sh 命令时,发现以下错误:
fdfs_storaged.c:130: undefined reference to g_exe_name'
估计是因为你后来修改了编译参数,在这种情况下,要先执行 ./make.sh clean,然后再重新编译即可。
接下来就可以启动Storage服务了:
service fdfs_storaged start
命令执行后可以看到以下提示:

同理,如果启动成功,/opt/fastdfs_storage中就可以看到启动后新生成的data和logs目录,端口23000也应被正常监听,还有一点就是文件存储路径下会生成多级存储目录,那么接下来看看是否启动成功了:

如上图,貌似没成功啊,因为启动storage后文件都没生成,为了确认我们看一下storage的端口情况:

果然是没启动成功!端口目前还是只监听了一个,storage的23000端口并未被监听,那么我们只能去日志文件中找原因了,进入/opt/fastdfs_storage/logs目录下并打开storaged.log文件:

找到配置文件修改group name为:groupSmtHI(组名有长度限制:16位)后,再次重启storage服务,然后再看看data目录和实际存储文件的/opt/fastdfs_storage_data:

如上图,可以看到/opt/fastdfs_storage/data目录下生成好的pid文件和dat文件,那么再看一下实际文件存储路径下是否有创建好的多级目录呢:

如上图,没有任何问题,data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。那么最后我们再看一下storage服务的端口监听情况:

如上图,可以看到此时已经正常监听tracker的22122端口和storage的23000端口(注意防火墙也需要启动这两个端口,否则程序访问不了!!),至此storage服务器就已经配置完成,确定了storage服务器启动成功后,还有一项工作就是看看storage服务器是否已经登记到 tracker服务器(也可以理解为tracker与storage是否整合成功),运行以下命令:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

如上所示,看到192.168.111.11 ACTIVE 字样即可说明storage服务器已经成功登记到了tracker服务器,同理别忘了添加开机启动,打开/etc/rc.d/rc.local并将如下配置追加到文件中: service fdfs_storaged start
至此我们就已经完成了fastdfs的全部配置,此时也就可以用客户端工具进行文件上传下载的测试了。
测试时需要设置客户端的配置文件,编辑/etc/fdfs目录下的client.conf 文件,打开文件后依次做以下修改:
base_path=/opt/fastdfs_tracker#tracker服务器文件路径
tracker_server=192.168.111.11:22122#tracker服务器IP地址和端口号
http.tracker_server_port=6666# tracker 服务器的 http 端口号,必须和tracker的设置对应起来
配置完成后就可以模拟文件上传了,先给/opt目录下放一张图片

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /opt/st93.png
运行后可以发现给我们返回了一个路径:

这就表示我们的文件已经上传成功了,当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成,如下图:

同时在之前配置的storage服务器的实际文件存储路径中也可以根据返回的路径找到实际文件:

接下来尝试用浏览器发送HTTP请求访问一下文件:

此时发现并不能访问,因为FastDFS目前已不支持http协议,我们在FastDFS 4.0.5的版本更新日志中可以看到这样一条信息:

如上图,4.0.5版本开始移除了自带的HTTP支持(因为之前自带的HTTP服务较为简单,无法提供负载均衡等高性能服务),所以余大提供了nginx上使用FastDFS的模块fastdfs-nginx-module,下载地址如下:https://github.com/happyfish100/fastdfs-nginx-module,这样做最大的好处就是提供了HTTP服务并且解决了group中storage服务器的同步延迟问题,接下来就具体记录一下fastdfs-nginx-module的安装配置过程。
在余大的GitHub上下载好fastdfs-nginx-module上传到我们的CentOS中就可以开始安装了,在安装nginx之前需要先安装一些模块依赖的lib库,我在以前写的blog有做详细介绍(Linux CentOS 7 &; Tengine(Nginx)安装与配置),直接贴出安装代码:
yum -y install pcre pcre-devel yum -y install zlib zlib-devel yum -y install openssl openssl-devel
依次装好这些依赖之后就可以开始安装nginx了。
首先是为storage服务器安装nginx,首先将nginx和fastdfs-nginx-module的安装包上传至CentOS:
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.zip
wget http://nginx.org/download/nginx-1.15.6.tar.gz
首先分别进行解压:
tar -zxvf nginx-1.15.6.tar.gz
unzip V1.20.zip
解压成功后就可以编译安装nginx了,进入nginx目录并输入以下命令进行配置:
./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module-master/src
出现错误:

将fastdfs-nginx-module压缩包解压,并记录下它的路径,因为安装的时候要用到
./configure --add-module=/usr/local/fastdfs-nginx-module-master/src
(/usr/local/fastdfs-nginx-module-master/src根据自己的文件目录来配)
配置成功后会看到如下信息:

紧接着就可以进行编译安装了,依次执行以下命令:
make
make install
出现错误:

解决方法:fatal error: common_define.h: No such file or directory
修改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/"
然后重新configure make make install,就可以了.
安装完成后,我们在我们指定的目录/usr/local/nginx中就可以看到nginx的安装目录了:

接下来要修改一下nginx的配置文件,进入conf目录并打开nginx.conf文件加入以下配置:
listen 9999;location ~/group1/M00 { root /opt/fastdfs_storage_data/data; ngx_fastdfs_module; }
然后进入FastDFS的安装目录/usr/local/fastdfs-5.05目录下的conf目录,将http.conf和mime.types拷贝到/etc/fdfs目录下:
cp -r /usr/local/fastdfs-5.05/conf/http.conf /etc/fdfs/
cp -r /usr/local/fastdfs-5.05/conf/mime.types /etc/fdfs/
接下来还需要把fastdfs-nginx-module安装目录中src目录下的mod_fastdfs.conf也拷贝到/etc/fdfs目录下:
cp -r /usr/local/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
看一下/etc/fdfs目录下当前所有的配置文件:

没什么问题,接下来就需要编辑刚拷贝的这个mod_fastdfs.conf文件了,打开mod_fastdfs.conf并按顺序依次编译以下内容:
base_path=/opt/fastdfs_storage #保存日志目录
tracker_server=192.168.111.11:22122 #tracker服务器的IP地址以及端口号
storage_server_port=23000 #storage服务器的端口号
url_have_group_name = true #文件 url 中是否有 group 名
store_path0=/opt/fastdfs_storage_data # 存储路径
group_count = 3 #设置组的个数,事实上这次只使用了group1
注意下面的:[group1] [group2] [group3] 是固定格式[group(数字)]
设置了group_count = 3,接下来就需要在文件尾部追加这3个group setting:
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
接下来还需要建立 M00 至存储目录的符号连接:
ln -s /opt/fastdfs_storage_data/data /opt/fastdfs_storage_data/data/M00
最后启动nginx:
/usr/local/nginx/sbin/nginx
出现错误:

怀疑是 nginx.conf弄出问题了 又检查一下,上面应该是
在nginx.conf里面的server{里面添加location /M00……},添加下面的几行:
当配置多个组,且mod_fastdfs.conf 里面指定了url_have_group_name= true 时,配置方式:
location ~ /group([0-9]) /M00 {
root /home/ningqijun/fastdfs/data;
ngx_fastdfs_module;
}
显示如下信息说明nginx已启动成功:

虚拟机新开了9999端口,系统内部是显示开了的,但是外部不能访问端口。

storage服务器的nginx就已经安装完毕,接下来看一下tracker服务器的nginx安装。
同理,再装一个nginx,目录命名为nginx2,安装路径依旧放在/usr/local下,由于和之前一样,此处就不再做详细解释:
mkdir nginx2 cd nginx-1.8.1/ ./configure --prefix=/usr/local/nginx2 --add-module=/usr/local/fastdfs-nginx-module-master/src make make install
接下来依然是修改nginx2的配置文件,进入conf目录并打开nginx.conf文件加入以下配置,storage的nginx无需修改listen端口,即默认的80端口,并将upstream指向tracker的nginx地址(upstream位置应该放在http模块里面 但必须是在server模块的外面. ):
upstream fdfs_group1 { server 127.0.0.1:9999; }location /group1/M00 { proxy_pass http://fdfs_group1; }
此时访问nginx2的主页,由于没有修改端口,直接访问ip地址即可:

最后一步就是需要修改/etc/fdfs目录下的client.conf文件,打开该文件并加入以下配置:
base_path=/data/fastdfs_storage#日志存放路径
tracker_server=192.168.116.145:22122#tracker 服务器 IP 地址和端口号
http.tracker_server_port=6666# tracker 服务器的 http 端口号,必须和tracker的设置对应起来
至此关于fastdfs就已经全部配置完毕了,再一次进行测试看看是否能正常上传文件并通过http访问文件。
HTTP测试

查看进程号,杀死进程
ps -ef|grep nginx
kill -QUIT 1939

验证nginx配置文件是否正确
进入nginx安装目录sbin下,输入命令./nginx -t
看到如下显示
nginx.conf syntax is ok
nginx.conf test is successful
说明配置文件正确!
再刷新http://192.168.126.128/的时候发现也显示该错误,查看虚拟机IP,发现IP变了。
这个时候我们打开网卡的配置文件,命令是:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
netstat -rn

查看本机dns
cat /etc/resolv.conf

如下图所示,将配置修改为:
BOOTPROTO=static
表示使用静态固定IP。
onboot=yes
表示网卡随着系统启动而启动。
同时在最后加上需要配置的IP地址信息。如图中所示

配置完成后,我们使用命令:
systemctl restart network

由于"/etc/sysconfig/network-scripts/ifcfg-eth0"文件是空白的,启动读取的是"ifcfg-ens33"文件,所以把这文件弃用改为"ifcfg-eth0.bak"

重新执行命令systemctl restart network,启用成功
nginx fastdfs 配置后 上传成功 但访问报404 bad request,尝试修改(nginx或者nginx2)nginx.conf配置文件加上一行 user root

执行 nginx -s reload 重新加载配置文件生效,但提示:-bash: nginx: command not found
使用下面命令查看使用有nginx命令:
ps -ef|grep nginx

要使用完整路径命令才能执行成功
/usr/local/nginx/sbin/nginx -s reload

但重启另一个的时候提示错误:
使用以下命令进行修复:
/usr/local/nginx2/sbin/nginx -c /usr/local/nginx2/conf/nginx.conf

大概意思是 nginx listen的80后端口被占用,使用命令查看端口占用
netstat -lnp|grep 80
查找到之前的/usr/local/nginx/conf 配置文件,修改listen 80 为8088,再执行以下命令:
/usr/local/nginx2/sbin/nginx -s reload
虽然没报错,但也没起效。。。

重启虚拟机以后发现,可以访问了(注意区分O和0) 还有 /usr/local/nginx/logs/error.log 里面的报错信息很有用!!!

浙公网安备 33010602011771号