一、FastDFS介绍
FastDFS开源地址:https://github.com/happyfish100
FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。
Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。
Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。
Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。
刚刚开始可能对group分组不太明白,当你配置好nginx后,在运行测试类就清楚了。
操作环境:CentOS7 X64,以下操作都是单机环境。集群研究好了在发。在此前有百度过不错的博文,在此推荐
http://blog.mayongfa.cn/192.html 同时自己也对这里面发现的一些小问题进行修改。
1.下载安装 libfastcommon ,这里是通过wget
下载。
libfastcommon是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库,基础环境,安装即可 。
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
tar -zxvf V1.0.7.tar.gz
cd libfastcommon-1.0.7
./make.sh
./make.sh install
显示这样的画面,就是安装 libfastcommon 成功啦。
2.下载安装 FastDFS,这里也是通过wget
下载。
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
tar -zxvf V5.05.tar.gz
cd fastdfs-5.05
./make.sh
./make.sh install
显示这样的画面,就是安装 FastDFS 成功啦。,版本不同或许会不一样。无所谓啦,只要make没报error就欧克。
上述安装成功后,在/etc/
目录下会有一个fdfs
的目录,进入它。会看到三个.sample
后缀的文件,这是作者给我们的示例文件,我们需要把其中的tracker.conf.sample
文件改为tracker.conf
配置文件并修改它。看命令:
cd /etc/fdfs
cp tracker.conf.sample tracker.conf
vi tracker.conf
这里是安装目录,直接复制有可以啦
打开tracker.conf
文件,只需要找到你只需要该这两个参数就可以了。
# the base path to store data and log files
base_path=/data/fastdfs //根目录下面如果没有data你得建一个
# HTTP port on this tracker server
http.server_port=80 //这里之所以是80 因为后面配置的nginx默认转发80, 我也是后面才想道。。。。。
//建立软连接
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
查看监听:netstat -unltp|grep fdfs
看到22122端口
正常被监听后,这时候就算 Tracker服务安装成功啦!
现在开始配置 Storage 服务,由于我这是单机器测试,你把 Storage 服务放在多台服务器也是可以的,它有 Group(组)
的概念,同一组内服务器互备同步,这里不再演示。直接开始配置,依然是进入/etc/fdfs
的目录操作,首先进入它。会看到三个.sample
后缀的文件,我们需要把其中的storage.conf.sample
文件改为storage.conf
配置文件并修改它。还看命令:
cd /etc/fdfs
cp storage.conf.sample storage.conf
vi 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 //这里记得新建文件夹
#store_path1=/home/yuqing/fastdfs2
# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
tracker_server=192.168.59.129:22122 //这是我虚拟机的ip,不过外网连不到,这里记得开端口,如果自己玩的话,关闭防火墙也可以。哈哈
这里还是使用ln -s
建立软链接:storaged
ln -s /usr/bin/fdfs_storaged /usr/local/bin
执行命令启动服务:
service fdfs_storaged start
启动成功,没有错误了。查看一下监听:
netstat -unltp|grep fdfs
很好,22122 和 23000
端口都在监听了,
应该是完成了。我们安装配置并启动了 Tracker 和 Storage 服务,也没有报错了。那他俩是不是在通信呢?我们可以监视一下:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
看到我红线处ACTIVE
这样就 ok 啦!
已经可以上传文件了,但是我没有上传测试,因为上传成功我看不了,所以,需要配合 Nginx 来进行文件的上传下载,这一篇就安装 Nginx 以及结合 fastdfs-nginx-module 模块使用。
一. gcc 安装
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:
yum install gcc-c++ //刚刚已经安装过了,不过这里在多说一句
二. PCRE pcre-devel 安装
PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:
yum install -y pcre pcre-devel
三. zlib 安装
zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。
yum install -y zlib zlib-devel
四. OpenSSL 安装
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。
yum install -y openssl openssl-devel
2.使用wget
命令下载(推荐)。
wget -c https://nginx.org/download/nginx-1.10.1.tar.gz
依然是直接命令:
tar -zxvf nginx-1.10.1.tar.gz
cd nginx-1.10.1
其实在 nginx-1.10.1 版本中你就不需要去配置相关东西,默认就可以了。当然,如果你要自己配置目录也是可以的。
1.使用默认配置
./configure
make
make install
查找安装路径:
whereis nginx
cd /usr/local/nginx/sbin/
./nginx
./nginx -s stop
./nginx -s quit
./nginx -s reload
查询nginx进程:
ps aux|grep nginx
即在rc.local
增加启动代码就可以了。
vi /etc/rc.local
/usr/local/nginx/sbin/nginx
设置执行权限:
chmod 755 rc.local
.下载 fastdfs-nginx-module ,这里是通过wget
下载(我喜欢这种方式)。
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
一定要下这一个,我上次下的是另外一个,死活安装不进nginx。弄了我几个小时才弄明白是版本的问题
解压 unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
重命名 mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1 fastdfs-nginx-module-master
停掉nginx服务
cd /usr/local/nginx/sbin
./nginx -s stop
进入解压包目录 # cd /nginx-1.10.1/
# 添加模块 # ./configure --add-module=../fastdfs-nginx-module/src
重新编译、安装
# make && make install
④ 查看Nginx的模块
# /usr/local/nginx/sbin/nginx -V
1.配置mod-fastdfs.conf
,并拷贝到/etc/fdfs
文件目录下。
cd /software/fastdfs-nginx-module-master/src/
vim mod_fastdfs.conf
cp mod_fastdfs.conf /etc/fdfs
修改mod-fastdfs.conf
配置只需要修改我标注的这三个地方就行了,其他不需要也不建议改变。
# FastDFS tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
# valid only when load_fdfs_parameters_from_tracker is true
tracker_server=192.168.59.129:22122 //老样子,自己的ip
# if the url / uri including the group name
# set to false when uri like /M00/00/00/xxx
# set to true when uri like ${group_name}/M00/00/00/xxx, such as group1/M00/xxx
# default value is false
url_have_group_name = true
# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
# must same as storage.conf
store_path0=/data/fastdfs/storage
接着我们需要把fastdfs-5.05
下面的配置中还没有存在/etc/fdfs
中的拷贝进去
cd /software/fastdfs-5.05/conf
cp anti-steal.jpg http.conf mime.types /etc/fdfs/
2.配置 Nginx。编辑nginx.conf
文件:
cd /usr/local/nginx/conf
vi nginx.conf
在配置文件中加入:
location /group1/M00 {
root /data/fastdfs/storage/;
ngx_fastdfs_module;
}
由于我们配置了group1/M00
的访问,我们需要建立一个group1
文件夹,并建立M00到data
的软链接。
mkdir /data/fastdfs/storage/data/group1
ln -s /data/fastdfs/storage/data /data/fastdfs/storage/data/group1/M00
启动 Nginx ,会打印出fastdfs模块的pid,看看日志是否报错,正常不会报错的
/usr/local/nginx/sbin/nginx
配置 client.conf
cd /etc/fdfs
cp client.conf.sample client.conf
vim client.conf
测试上传
新建一个文件 cd /usr/bin
vi test.txt (内容随意)
运行:
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /usr/bin/test.txt
后面的http的返回就是文件地址啦,可直接访问。
前面文件系统平台搭建好了,现在就要写客户端代码在系统中实现上传下载,这里只是简单的测试代码。
① 项目中使用maven进行依赖管理,可以在pom.xml中引入如下依赖即可:
net.oschina.zcx7878 fastdfs-client-java 1.27.0.0
新建文件
fdfs_client.conf
内容:
connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 9090
http.anti_steal_token = no
http.secret_key = FastDFS1234567890
tracker_server = 192.168.59.129:22122
java 代码 ,直接复制可用,路径需要修改