最近需要搭建一台上传下载的服务器,所以没办法硬着头皮就是干吧。本文讲述的步骤完全就是一步血泪史,当然如果你按照我得步骤走,我保证你不会出现错误,因为这一天零2个小时,完全就是我的试错史,当然也感谢
MrCao杰罗尔德 (https://blog.csdn.net/m0_37797991/article/details/73385161)
,好了废话不多说开始教程。
1. 首先声明:本文不介绍Nginx和FastDfs的来源及应用场景,如果遇到错误请加QQ群:104208963 @为实现中国梦加油。博主会为你解答问题。
fastdfs 5.11版本对照:Version 5.11对应的fastdfs-nginx-module的Version 1.20
fastdfs 5.10版本对照:Version 5.10对应的fastdfs-nginx-module的Version 1.19
如果版本不对应,后期安装会报错!!!
1.1 安装FastDfs
作者的GitHub地址:https://github.com/happyfish100(本次所需的工具大部分都可以找到)
首先搭建需要用到的所有工具截图
在此直接公布下载地址,毕竟时间宝贵!
fastdfs 5.11 - 点击如下图即可,完成下载。
=========================================================
https://github.com/happyfish100/fastdfs/releases
=========================================================
fastdfs-client-java-master - 点击如下图即可,完成下载。
=========================================================
https://github.com/happyfish100/fastdfs-client-java
=========================================================
fastdfs-nginx-module-master - 点击如下图即可,完成下载。
=========================================================
https://github.com/happyfish100/fastdfs-nginx-module
=========================================================
libfastcommon-master - 点击如下图即可,完成下载。
=========================================================
https://github.com/happyfish100/libfastcommon
=========================================================
nginx-1.12.0.tar - 点击如下图即可,完成下载。
=========================================================
http://nginx.org/download/
=========================================================
到此,所需要的工具已经下载完毕。
下面开始搭建,因为我的Linux是mini的所以以下对应自己的有一些关于linux的工具下载可以跳过。
首先下载 所需全部工具运行命令
yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget
等待下载完成 然后安装rz 命令
yum install lrzsz -y
通过rz命令 或者sftp上传到/home目录下自己新建一个目录(根据个人习惯)
cd /home
mkdir muyou
ls
cd muyou
rz
上图是我全部安装完成的截图
2.1 安装libfastcommon
解压刚才上传的文件,然后进入解压完成的文件目录
unzip libfastcommon-master.zip
cd libfastcommon-master
ll
我们会看到
开始安装 执行
./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
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
2.2 安装FastDfs
然后回到/muyou(或者你创建的文件下)
解压fastdfs
unzip fastdfs-5.11.zip
解压完成进入fastdfs5.11
cd fastdfs-5.11
./make.sh
./make.sh install
如果没有报错那么,万里长征第一步已经成功,如果报错,请去群里找博主
成功之后查看目录
[root@localhost muyou]# cd /etc/fdfs/
[root@localhost fdfs]# ll
-rw-r--r-- 1 root root 1461 Jun 8 21:56 client.conf.sample
-rw-r--r-- 1 root root 7927 Jun 8 21:56 storage.conf.sample
-rw-r--r-- 1 root root 7389 Jun 8 21:56 tracker.conf.sample
我们需要把这三个实例文件服务一份,去掉sample
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
到此~FastDFS安装结束。
3.1 安装tracker
· 创建tarcker工作目录
这个目录可以自定义,用来保存tracker的data和log
根据个人习惯创建下面的目录:
[root@localhost ~]# cd /usr/
[root@localhost usr]# mkdir muyou
[root@localhost usr]# cd muyou
[root@localhost muyou]# mkdir dev
[root@localhost muyou]# cd dev/
[root@localhost dev]# mkdir fastdfs
[root@localhost muyou]# cd fastdfs/
[root@localhost dev]# mkdir fastdfs_tracker
[root@localhost fastdfs]# cd fastdfs_tracker/
[root@localhost fastdfs_tracker]# pwd
/usr/muyou/dev/fastdfs/fastdfs_tracker #这个是我最终创建的目录
[root@localhost fastdfs_tracker]#
· 配置tracker
cd /etc/fdfs
vi tracker.conf
打开后找到下面4处然后修改即可(点点111)
1.disabled=false #默认开启
2.port=22122 #默认端口号
3.base_path=/usr/muyou/dev/fastdfs/fastdfs_tracker #刚刚创建的目录
4.http.server_port=6666 #默认端口是8080
保存修改文件
启动 tracker 命令如下。
service fdfs_trackerd start
如果不能成功启动,可以通systemctl命令
systemctl start fdfs_trackerd
成功之后可以看见
[root@localhost fdfs]# service fdfs_trackerd start
Starting fdfs_trackerd (via systemctl): [ OK ]
进入 (点点111) 创建的tracker目录。发现目录多了data和log两个目录
[root@localhost fdfs]# cd /usr/muyou/dev/fastdfs/fastdfs_tracker/
[root@localhost fastdfs_tracker]# ll
total 0
drwxr-xr-x 2 root root 178 Jun 16 21:19 data
drwxr-xr-x 2 root root 26 Jun 13 22:01 logs
然后 我们不能每次都这么启动tracker,我们需要给tracker加入开机启动
首先需要给执行权限,
chmod +x /etc/rc.d/rc.local
然后开始修改rc.local
vi /etc/rc.d/rc.local
在配置文件最后加下最后一句话即可
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
service fdfs_trackerd start
保存,然后 查看tracker端口监听情况
[root@localhost fastdfs_tracker]# netstat -unltp|grep fdfs
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 2233/fdfs_trackerd
到此22122端口监听成功。
3.2 安装storage
为storage配置工作目录,由于storage还需要一个目录用来存储数据,所以我另外多建了一个fasdfs_storage_data
[root@localhost fastdfs]# ls
fastdfs_storage fastdfs_storage_data fastdfs_tracker
修改storage配置文件
修改storage.conf
vi /etc/fdfs/storage.conf
找到如下几处地方修改即可
1.disabled=false
2.group_name=group1 #组名,根据实际情况修改
3.port=23000 #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
4.base_path=/usr/muyou/dev/fastdfs/fastdfs_storage #设置storage数据文件和日志目录
5.store_path_count=1 #存储路径个数,需要和store_path个数匹配
6.#base_path0=/usr/muyou/dev/fastdfs/fastdfs_storage_data #实际文件存储路径
6.store_path0=/usr/muyou/dev/fastdfs/fastdfs_storage_data
7.tracker_server=192.168.150.132:22122 #我CentOS7的ip地址
8.http.server_port=8888 #设置 http 端口号
保存之后 创建软引用
ln -s /usr/bin/fdfs_storaged /usr/local/bin
启动storage
service fdfs_storaged start
同理 如果不能启动可以用下述命令
systemctl start fdfs_storaged
成功应该是如下
[root@localhost fdfs]# service fdfs_stroaged start
Starting fdfs_storaged (via systemctl): [ OK ]
同样设置开机启动
修改rc.local
vim /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
service fdfs_trackerd start
service fdfs_storaged start
同样查看服务是否启动
[root@localhost fastdfs]# netstat -unltp | grep fdfs
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 2233/fdfs_trackerd
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 2323/fdfs_storaged
服务启动,到此fastdfs已经配置完成了。最后我们再确认一下,storage是否注册到了tracker中去。
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
成功后可以看到:
ip_addr = 192.168.150.132 (localhost.localdomain) ACTIVE 的字样
ok,修改客户端配置文件
vi /etc/fdfs/client.conf
base_path=/usr/muyou/dev/fastdfs/fastdfs_tracker #tracker服务器文件路径
tracker_server=192.168.150.132:22122 #tracker服务器IP地址和端口号
http.tracker_server_port=6666 # tracker 服务器的 http端口号,必须和tracker的设置对应起来
接下来上传图片到centos7为测试
rz 命令选择一张照片 上传到随便一个目录但是 一定要复制出来
接下来
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/测试1.png #你上传的图片路径(linux上的)
成功之后会返回图片的路径
group1/M00/00/00/wKiWhFrdeCeAC_vCAABqgowGIFg399.png
我们去刚才上传的路径查看是否上传成功~~~
cd /usr/muyou/dev/fastdfs/fastdfs_storage_data/data
ls
0 0D 1A 27 34 41 4E 5B 68 75 82 8F 9C A9 B6 C3 D0 DD EA F7
01 0E 1B 28 35 42 4F 5C 69 76 83 90 9D AA B7 C4 D1 DE EB F8
02 0F 1C 29 36 43 50 5D 6A 77 84 91 9E AB B8 C5 D2 DF EC F9
03 10 1D 2A 37 44 51 5E 6B 78 85 92 9F AC B9 C6 D3 E0 ED FA
04 11 1E 2B 38 45 52 5F 6C 79 86 93 A0 AD BA C7 D4 E1 EE FB
05 12 1F 2C 39 46 53 60 6D 7A 87 94 A1 AE BB C8 D5 E2 EF FC
06 13 20 2D 3A 47 54 61 6E 7B 88 95 A2 AF BC C9 D6 E3 F0 FD
07 14 21 2E 3B 48 55 62 6F 7C 89 96 A3 B0 BD CA D7 E4 F1 FE
08 15 22 2F 3C 49 56 63 70 7D 8A 97 A4 B1 BE CB D8 E5 F2 FF
09 16 23 30 3D 4A 57 64 71 7E 8B 98 A5 B2 BF CC D9 E6 F3 M00
0A 17 24 31 3E 4B 58 65 72 7F 8C 99 A6 B3 C0 CD DA E7 F4
0B 18 25 32 3F 4C 59 66 73 80 8D 9A A7 B4 C1 CE DB E8 F5
0C 19 26 33 40 4D 5A 67 74 81 8E 9B A8 B5 C2 CF DC E9 F6
[root@localhost data]# cd 00
[root@localhost 00]# ls
00 0D 1A 27 34 41 4E 5B 68 75 82 8F 9C A9 B6 C3 D0 DD EA F7
01 0E 1B 28 35 42 4F 5C 69 76 83 90 9D AA B7 C4 D1 DE EB F8
02 0F 1C 29 36 43 50 5D 6A 77 84 91 9E AB B8 C5 D2 DF EC F9
03 10 1D 2A 37 44 51 5E 6B 78 85 92 9F AC B9 C6 D3 E0 ED FA
04 11 1E 2B 38 45 52 5F 6C 79 86 93 A0 AD BA C7 D4 E1 EE FB
05 12 1F 2C 39 46 53 60 6D 7A 87 94 A1 AE BB C8 D5 E2 EF FC
06 13 20 2D 3A 47 54 61 6E 7B 88 95 A2 AF BC C9 D6 E3 F0 FD
07 14 21 2E 3B 48 55 62 6F 7C 89 96 A3 B0 BD CA D7 E4 F1 FE
08 15 22 2F 3C 49 56 63 70 7D 8A 97 A4 B1 BE CB D8 E5 F2 FF
09 16 23 30 3D 4A 57 64 71 7E 8B 98 A5 B2 BF CC D9 E6 F3
0A 17 24 31 3E 4B 58 65 72 7F 8C 99 A6 B3 C0 CD DA E7 F4
0B 18 25 32 3F 4C 59 66 73 80 8D 9A A7 B4 C1 CE DB E8 F5
0C 19 26 33 40 4D 5A 67 74 81 8E 9B A8 B5 C2 CF DC E9 F6
[root@localhost 00]# cd 00
[root@localhost 00]# ls
wKiWhFrdeCeAC_vCAABqgowGIFg399.png
果然我们找到了图片了。
data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。
然后我们HTTP访问文件
http://192.168.150.132:9999/group1/M00/00/00/wKiWhFrdeCeAC_vCAABqgowGIFg399.png
、
我们发现,http不能直接访问到图片。这是为什么呢。
原来早在4.05的时候,就remove embed HTTP support
Version 4.05 2012-12-30
* client/fdfs_upload_file.c can specify storage ip port and store path index
* add connection pool
* client load storage ids config
* common/ini_file_reader.c does NOT call chdir
* keep the mtime of file same
* use g_current_time instead of call time function
* remove embed HTTP support
HTTP请求不能访问文件的原因
我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传、下载、删除等操作。同时通过FastDFS的HTTP服务器来提供HTTP服务。但是FastDFS的HTTP服务较为简单,无法提供负载均衡等高性能的服务,所以FastDFS的开发者——淘宝的架构师余庆同学,为我们提供了Nginx上使用的FastDFS模块(也可以叫FastDFS的Nginx模块)。
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组之间的服务器需要复制文件,有延迟的问题.假设Tracker服务器将文件上传到了192.168.128.131,文件ID已经返回客户端,这时,后台会将这个文件复制到192.168.128.131,如果复制没有完成,客户端就用这个ID在192.168.128.131取文件,肯定会出现错误。这个fastdfs-nginx-module可以重定向连接到源服务器取文件,避免客户端由于复制延迟的问题,出现错误。
正是这样,FastDFS需要结合nginx,所以取消原来对HTTP的直接支持。
FastDFS的nginx模块安装
准备nginx安装
cd /home/muyou
在安装nginx之前要安装nginx所需的依赖lib:
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
安装nginx并添加fastdfs-nginx-module
解压nginx,和fastdfs-nginx-module:
tar -zxvf nginx-1.12.0.tar.gz
unzip fastdfs-nginx-module-master.zip
然后进入nginx安装目录,添加fastdfs-nginx-module:
./configure --prefix=/usr/local/nginx --add-module=/usr/muyou/dev/nginx/fastdfs-nginx-module-master/src #解压后fastdfs-nginx-module所在的位置
如果没有错误信息,开始安装
make
make install
nginx的默认目录是/usr/local/nginx 开始 配置storage nginx
root@localhost nginx-1.12.0]# cd /usr/local/nginx
[root@localhost nginx]# ll
修改nginx.conf:
[root@localhost nginx]# cd conf/
[root@localhost conf]# ls fastcgi.conf koi-win scgi_params fastcgi.conf.default mime.types scgi_params.default fastcgi_params mime.types.default uwsgi_params fastcgi_params.default nginx.conf uwsgi_params.default koi-utf nginx.conf.default win-utf
[root@localhost conf]# vi nginx.conf
修改listen 9999.然后 新增本地location
server {
listen 9999;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location /group1/M00 {
root /usr/muyou/dev/fastdfs/fastdfs_storage_data/data;
ngx_fastdfs_module;
}
然后进入FastDFS安装时的解压过的目录,将http.conf和mime.types拷贝到/etc/fdfs目录下:
[root@localhost fastdfs-5.11]# cd /usr/muyou/fastdfs-5.11/conf/
[root@localhost conf]# ls
anti-steal.jpg http.conf storage.conf tracker.conf
client.conf mime.types storage_ids.conf
cp http.conf /etc/fdfs/
cp mime.types /etc/fdfs/
另外还需要把fastdfs-nginx-module安装目录中src目录下的mod_fastdfs.conf也拷贝到/etc/fdfs目录下:
cp /usr/muyou/dev/nginx/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
对刚刚拷贝的mod_fastdfs.conf文件进行修改:
vi /etc/fdfs/mod_fastdfs.conf
base_path=/usr/muyou/dev/fastdfs/fastdfs_storage #保存日志目录
tracker_server=192.168.150.132:22122 #tracker服务器的IP地址以及端口号
storage_server_port=23000 #storage服务器的端口号
url_have_group_name = true #文件 url 中是否有 group 名
store_path0=/usr/muyou/dev/fastdfs/fastdfs_storage_data #存储路径
group_count = 3 #设置组的个数,事实上这次只使用了group1
在文件的最后,设置group
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/usr/muyou/dev/fastdfs/fastdfs_storage_data
store_path1=/usr/muyou/dev/fastdfs/fastdfs_storage_data
# group settings for group #2
# since v1.14
# when support multi-group, uncomment following section as neccessary
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/usr/muyou/dev/fastdfs/fastdfs_storage_data
[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/usr/muyou/dev/fastdfs/fastdfs_storage_data
创建M00至storage存储目录的符号连接:
ln -s /usr/muyou/dev/fastdfs/fastdfs_storage_data/data/ /usr/muyou/dev/fastdfs/fastdfs_storage_data/data/M00
启动nginx:
/usr/local/nginx/sbin/nginx
成功启动:
[root@localhost conf]# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=1231
恭喜你,storage的nginx已配置成功。接下来,我们还要继续配置tracker的nginx。
配置tracker nginx
再解压一个nginx:
cd /home/muyou 工作下再建了一个nginx2,把原来的nginx-1.12.0.tar.gz又解压了一份到里面
[root@localhost root]# cd /usr/muyou/dev/nginx2/nginx-1.12.0/
[root@localhost nginx-1.12.0]# ls
auto CHANGES.ru configure html Makefile objs src
CHANGES conf contrib LICENSE man README
./configure --prefix=/usr/local/nginx2 --add-module=/usr/muyou/dev/nginx/fastdfs-nginx-module-master/src #解压后fastdfs-nginx-module所在的位置
编译
make
make install
接下来,一样的还是修改nginx.conf,端口号可以不改,用80的。需将upstream指向tracker的nginx地址。
vi /usr/local/nginx2/conf/nginx.conf
upstream fdfs_group1 {
server 127.0.0.1:9999;
}
server {
listen 9989;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location /group1/M00 {
proxy_pass http://fdfs_group1;
}
启动nginx:
/usr/local/nginx/sbin/nginx2
如果 访问不了 那就修改防火墙吧
firewall-cmd --zone=public --add-port=23000/tcp --permanent #开户端口号
或者
systemctl enable firewalld.service #开启防火墙
systemctl stop firewalld.service #关闭防火墙(开机会仍会启动)
systemctl disable firewalld.service #禁用防火墙(开机后不再启动)
然后在找刚才那个路径 测试
OK , 到此已经结束。下篇会讲解怎么配合java。~