【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端口,系统内部是显示开了的,但是外部不能访问端口。

1、firewalld的基本使用
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld 
开机禁用  : systemctl disable firewalld
开机启用  : systemctl enable firewalld
开启一个端口
添加
firewall-cmd --add-port=6379/tcp --permanent   (--permanent永久生效,没有此参数重启后失效)
重新载入
firewall-cmd --reload
查看
firewall-cmd --zone=public --query-port=80/tcp
删除
firewall-cmd --zone=public --remove-port=80/tcp --permanent
 
通过浏览器也可以看到nginx的主页: 

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
打开以后可以看到BOOTPROTO默认的配置就是dhcp,然后onboot=no,表示不会随着系统的启动而启动。我们需要修改这个配置。
 
linux查看本机gateway
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

但重启另一个的时候提示错误:

nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)

使用以下命令进行修复:

/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 里面的报错信息很有用!!!

 

posted @ 2018-12-07 09:58  FH1004322  阅读(98)  评论(0)    收藏  举报