目录
一、FastDFS简介
二、FastDFS单服务器搭建
三、FastDFS扩容,多服务器
四、利用java上传文件
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。----来自百度百科。
FastDFS主要分为Tracker(追踪器)和Storage(存储器)。Tracker主要作用是负载均衡,Storage就是用来存储文件。当用户上传文件时先发送请求到追踪器(Tracker)。追踪器接收到请求后查询下各个存储器节点的状态,将较空闲的存储器节点的地址返回给用户,然后用户拿到这个地址后就将文件上传到该存储节点。下载的时候用户请下载地址发送到追踪器,追踪器根据地址找到存放该文件的存储节点,将节点返回给客户端,客户端再跟该节点交互完成下载。
虚拟机1的ip:192.168.152.137,用来当作追踪器和存储节点组1。
虚拟机2的ip:192.168.152.140,用来做存储节点组2。
ip | 作用 | 组 |
---|---|---|
192.168.152.137:22122 | 追踪器(Tracker) | |
192.168.152.137:23000 | 储存器(Storage) | group1 |
192.168.152.140:23000 | 储存器(Storage) | group2 |
yum -y install gcc-c++
yum -y install libevent
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
解压libfastcommonV1.0.7.tar.gz并安装
cd /usr/local/software/
tar -zvxf libfastcommonV1.0.7.tar.gz
cd libfastcommon-1.0.7/
# 编译
./make.sh
# 安装
./make.sh install
cd /usr/local/software/
tar -zvxf FastDFS_v5.0.5.tar.gz
# 进到解压后的FastDFS文件夹
cd FastDFS
# 编译
./make.sh
# 安装
./make.sh install
# 安装后会在/etc/下生成一个fdfs文件夹。将FastDFS/conf/文件夹下的所有配置文件复制到/etc/fdfs/文件夹下。
cp /usr/local/software/FastDFS/conf/* /etc/fdfs/
修改/etc/fdfs/tracker.conf
vim /etc/fdfs/tracker.conf
修改base_base的路径,将路径改为/usr/local/software/FastDFS/tracker。用来存放追踪器运行的日志信息。可自定义路径。
启动Tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
查看进程,如下图所示则启动成功。
修改存储器的配置文件/etc/fdfs/storage.conf
vim /etc/fdfs/storage.conf
修改以下几个地方:
vim /etc/fdfs/client.conf
修改base_path和tracker_server
放一张图片到/home/下。用命令测试上传。
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/test.png
查看结果,可以看到返回的文件路径即上传成功。存放的路径在/usr/local/software/FastDFS/storage/data/下。
fastdfs不提供web服务,要访问上传的图片要通过nginx代理才能获取图片。
安装nginx插件
cd /usr/local/software/
tar -zvxf fastdfs-nginx-module_v1.16.tar.gz
cd fastdfs-nginx-module/src/
# 修改config文件,在vim串口通过执行:0,$s/\/local//g命令将local全换为空。
将cp mod_fastdfs.conf 拷贝到/etc/fdfs/
cp mod_fastdfs.conf /etc/fdfs/
# 修改配置文件
vim /etc/fdfs/mod_fastdfs.conf
修改tracker_server为追踪器的地址。
将url_hava_group_name改为true。
修改store_path0为存储器的路径
安装nginx
cd /usr/local/software
tar -zxf nginx-1.8.1.tar.gz
cd nginx-1.8.1
./configure --add-module=/usr/local/software/fastdfs-nginx-module/src/
make
make install
# nginx安装后的目录地址/usr/local/nginx/
修改nginx的配置文件开启代理。
vim /usr/local/nginx/conf/nginx.conf
# 修改location
location /group1/M00/ {
ngx_fastdfs_module;
}
启动nginx
/usr/local/nginx/sbin/nginx
# 查看进程 要有work进程才算成功
ps _ aux | grep nginx
开放80端口用于nginx代理,22122端口为追踪器的访问端口,23000为存储器的端口。
centos6开放端口方式:
vim /etc/sysconfig/iptables
# 添加以下内容
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
# 保存后重启网络
service iptables restart
# 查看端口状态
netstat -ntlp
centos7开放端口方式
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=22122/tcp --permanent
firewall-cmd --zone=public --add-port=23000/tcp --permanent
# 重启防火墙
firewall-cmd --reload
# 查看端口状态
firewall-cmd --zone=public --query-port=80/tcp
再上传一次图片获取地址
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/test.png
将获取到的地址用浏览器打开。
测试成功。
现在图片服务器就搭建好了,不过现在只有一台服务器一个组一个storage。接下来就开始扩容。通过新增一台服务器新增组的方式扩容。
新增一台服务器,搭建fdstdfs步骤与第一台一样,只是配置文件稍有修改。因为使用同一个追踪器,所以第二台服务器就不需要开启tracker,直接将ip指向tracker所在的ip即可。
首先跟第一台安装的方式一样,先配置依赖环境。接着可以跳过tracker的安装,直接使用第一台的tracker即可。然后storage的配置文件跟前面一样,需要修改的是group_name,改成group2。然后tracker_server的ip填第一个tracker地址即可,即192.168.152.137:22122。
接着直接启动storage不需要再启动tracker,当然你第一台的服务器tracker还是要开启的。
# 启动storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
接着就可以跳过安装客户端那一段,只是测试用的。直接到nginx这一步,安装过程一样,mod_fastdfs.conf 的配置要变化以下。tracker_server还是填原来的tracker地址,group_name同样的改为group2其他的和原来的配置一样。
接下来nginx的安装步骤一模一样。只需要将配置文件的group1改为group2即可。然后启动nginx。
接下来回到第一台服务器。修改第一台服务器的tracker.conf文件。将store_lookup改为0,表示轮询上传。方便后面的测试。同时将use_storage_id改为true
接着修改storage_ids.conf 文件。
vim /etc/fdfs/storage_ids.conf
将group1和group2的ip配进来。
然后接着修改/storage.conf
vim /etc/fdfs/storage.conf
将use_storage_id 改为true。将group_count改为2,表示有两个组。然后将两个组的信息写上。
最后修改ngxin的配置文件,新增一个group2监听。或者直接将原来的改为group([0-9])表是匹配group0到group9。
vim /usr/local/nginx/nginx.conf
到此配置就全部配好了,然后将第一台服务器的tracker、storage、nginx全部关闭并重新开启。先开tracker再开storage最后开nginx。
重启后打开监控看一下就可以看到当前有两组存储器。
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
然后再进行多次的上传测试,可以发现将文件上传到不同组的服务器了。
导入fastdfs的jar包
maven坐标
<dependency>
<groupId>net.oschina.zcx7878groupId>
<artifactId>fastdfs-client-javaartifactId>
<version>1.27.0.0version>
dependency>
创建配置文件fdfs_client.conf
connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 8080
http.anti_steal_token = no
http.secret_key = FastDFS1234567890
# 追踪器地址
tracker_server = 192.168.152.137:22122
编码
@Test
public void upload() throws Exception {
//配置文件的路径
String confPath = this.getClass().getClassLoader().getResource("fdfs_client.conf").getPath();
StorageServer storageServer= null;
//初始化客户端
ClientGlobal.init(confPath);
TrackerClient trackerClient = new TrackerClient();
//获取与追踪器的连接
TrackerServer trackerServer = trackerClient.getConnection();
//获取客户端对象
StorageClient client =new StorageClient(trackerServer, storageServer);
//要上传的文件路径
String filePath=this.getClass().getClassLoader().getResource("aaa.txt").getPath();
//开始上传
String[] result = client.upload_file(filePath, "txt", null);
System.out.println("上传后的路径为:"+result[0]+result[1]);
}
结果
上传后的路径为:group1M00/00/00/wKiYiVv5FluAHmpwAAAALsoeKsg378.txt
Process finished with exit code 0
如果要访问需要再返回的文件路径前加上tracker的ip地址。