使用FastDFS搭建文件系统
FastDFS在之前的版本是支持http协议的,但随着版本的更新该功能已经被弃用。所以搭载FastDFS我们就需要借助fastdfs-nginx-module和nginx来实现http请求的访问,首先我们需要准备的工具如下:
Xshell和Xftp,如果没有这两个工具可以自行去官网下载(直接下载学生版或家庭就可以了)
我们需要下载的文件列表
- fastdfs-5.10.tar.gz
- fastdfs-nginx-module_v1.16.tar.gz
- libfastcommon-1.0.36.tar.gz
- Nginx
下载是结合Nginx配合使用的一些依赖库(我们可以直接在Liunx中使用 yum -y install + 依赖的名称下载,载安装的过程中我们可能会遇到版本问题,所以下面提供版本库的地址)
OpenSSL
pcre
zlib
下载好后我们利用XShell和Xftp将下载的文件传输到Liunx虚拟机中,我将所有的文件都放在了opt目录里面
然后我们开始安装:
首先我们安装libfastcommon
我们先解压libfastcommon,然后将它移动到/usr/local目录下
tar -xf libfastcommon-1.0.38.tar.gz && mv libfastcommon-1.0.38.tar.gz /usr/local
然后我们进入解压后的文件目录执行安装命令
cd /usr/local/libfastcommon-1.0.38
编译
./make.sh
待编译完成而且没有错误时,在进行安装
./make.sh install
然后我们再安装fastdfs,步骤与上面一致,下面我就只展示操作命令
tar -xf fastdfs-5.11.tar.gz && mv fastdfs-5.11 /usr/local/
cd /usr/local/fastdfs-5.11
./make.sh
./make.sh install
安装完成后我们进入home目录然后在里面建立FastDFS文件存储的目录
在配置文件中默认的仓库路径为:/home/yuqing/fastdfs 这里我建立的仓库路径为:/home/lizi/fastdfs
(一定要在tracker和storage启动之前创建好文件目录)
然后我们进入/etc/fdfs 会发现多出了几个配置文件,然后我们进入该目录然后将其重命名
cd /etc/fdfs/
重命名配置文件
mv 你要重命名的文件 命名之后的文件名;例如:mv tracker.conf.sample tracker.conf
然后我们再配置tracker.conf 和 storage.conf文件(这里建议用vim命令打开)
tracker.conf需要修改的配置为:
# 数据文件和日志文件存储的基路径
base_path=/home/lizi/fastdfs
# 指定文件上传到哪个group。当store_lookup设置为1时,必须指定这个group的名称。当store_lookup是其它值时该属性可以不设值
store_group=group1
其他配置默认即可
storage.conf需要修改的配置为:
# 所属group的名称,跟tracker中配置的组名要保持一致
group_name=group1
# 数据文件和日志文件存储的基路径
base_path=/home/lizi/fastdfs
# 文件存储的路径。如果有多个仓库则可以配置多个
store_path0=/home/lizi/fastdfs
#store_path1=/home/lizi/fastdfs1
其他配置默认既可
client.conf中的配置:
# 日志文件存储路径
base_path=/home/lizi/fastdfs
# tracker_server 的服务器地址,就是指虚拟机的ip和你在tracker.conf配置文件中设置的端口
tracker_server=192.168.193.128:22122
其他配置默认即可
设置storeage_ids.conf配置
# 这三个值分别为id(默认) 组名(你所设置的组名) 服务器地址(虚拟机的ip地址)
100001 group1 192.168.193.128
然后我们进入我们解压的fastdfs-5.11/conf目录,然后复制http.conf,mime.types到 /etc/fdfs目录
cd /usr/local/fastdfs-5.11/conf
cp http.conf mime.types /etc/fdfs
接下来我们再解压fastdfs-nginx-module,然后再修改mod_fastdfs.comf和config配置文件
tar -xf fastdfs-nginx-module_v1.16.tar.gz && mv fastdfs-nginx-module_v1.16 /usr/local
cd /usr/local/fastdfs-nginx-module_v1.16/src
修改config文件
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
修改这两行,其余配置文件默认
****************************************************************************
mod_fastdfs.conf文件中的配置
# 这个为你之前配置文件中设置的组名
group_name=group1
# 设置为true 则我们再地址栏中可以直接通过文件的路径 利用http链接访问到
url_have_group_name = true
# 应为storage.conf中配置的路径,如果有多个仓库则需配置多个仓库路径
store_path0=/home/lizi/fastdfs
#store_path1=/home/lizi/fastdfs1
# 这里为你所设置的组的数量
group_count = 1
# 如果有多个组则需要设置多组值
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/home/lizi/fastdfs
其余配置默认,修改后再移动该文件到/etc/fdfs目录,命令为:
cp mod_fastdfs.conf /etc/fdfs
然后我们开始安装Nginx
首先我们安装Nginx所需要的依赖
pcre 安装,先解压然后再进入目录再执行编译和安装命令
tar -xf pcre-8.40.tar.gz && cd pcre-8.40
./configure && make && make install
zlib 安装,步骤与上面相似
tar -xf zlib-1.2.11.tar.gz && cd zlib-1.2.11
./configure && make && make install
openssl 安装,步骤与上面相似
tar -xf openssl-0.9.8.tar.gz && cd openssl-0.9.8
./config && make && make install
具体的命令以你自己下载的依赖版本为主
接下来我们开始安装Nginx
我们先解压,然后进入根目录
tar -xf nginx-1.18.0.tar.gz && mv nginx-1.18.0 /usr/local && cd /usr/local/mv nginx-1.18.0
然后再执行编译命令
./configure --prefix=/usr/local/nginx-1.18.0 --add-module=/usr/local/fastdfs-nginx-module/src/
这里命令需要根据自己解压的nginx和fastdfs-nginx-module的相对物理路径来编写(--prefix=为你的nginx解压的路径 –add-module的路径需要改成你服务上上面配置好的fastdfs-nginx-module对应的路径。)
安装完成后我们再进入conf目录修改nginx.conf配置
server{
# 监听端口
listen 80;
# 服务器的地址
server_name 192.168.193.128;
location /group1/M00 {
# 仓库地址
root /home/lizi/fastdfs/data;
ngx_fastdfs_module;
}
}
到这里我们来检验我们的FastDFS是否安装成功。
在启动之前我们需要开放对应的端口或者直接关闭防火墙,下面展示直接关闭防火墙的命令
查看防火墙状态
systemctl status firewalld
关闭防火墙
systemctl stop firewalld.service
永久关闭防火墙
systemctl disable firewalld.service
如图则表示防火墙已经关闭
待防火墙关闭成功后我们就来启动一系列服务
启动tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
启动storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
启动Nginx
/usr/local/nginx/sbin/nginx
这里如果我们觉得这些启动步骤过于麻烦,我们可以直接写一个批处理文件,然后直接执行就好了
。命令如下:
cd ~ && vim start-fdfs.sh
然后将上面的三行命令复制进去,再保存退出。此时该批处理文件是无法执行的,因为它没有相应的权限,所以在保存退出后我们还应该加一个赋予其相应权限的命令;
chmod u+x start-fdfs.sh
以后我们直接开机就可以直接一条命令开启FastDFS,命令如下:
./start-fdfs.sh
在启动完成后我们可以使用 ps -ef | grep nginx 命令查看Nginx是否成功开启,如下图则表示成功开启:
如果没有worker进程我们可以尝试以下操作:
- 进入解压后的nginx/conf目录下的nginx.conf文件的配置配置上述安装的目录中的nginx的配置一样(此时目录下应该有两个nginx目录,一个为你解压后的目录,目录名为nginx-xx.xx.一个为你执行编译安装命令后的目录,目录名为nginx)
- 检查上述所有的配置文件,看仓库路径是否正确,服务器地址是否正确,端口号是否正确等等
- 待以上两个方法都试过后,我们可以将/etc/fdfs目录下的http.conf,mime.types两个文件删除然后重新从fastdfs-5.11/conf目录将这两个文件复制到该目录。
- 最重要的一个方法(我之前worker线程没有启动就是用这个方法解的 )。我们进入/usr/local/nginx/logs然后vim error.log打开后我们可以查看到具体的报错信息,然后我们在根据对应的错误信息去寻找解决方法。
在上述操作都完成以后,且Nginx也正确启动后我们接下来就开始测试文件的上传
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf 你的文件名 然后如果我们得到一串字符则表示FastDFS安装成功!!!
如下图则表示文件上传成功:
我们可以直接进入我们设置的文件仓库中访问到我们的上传进去的文件,如图:
接下来我们测试在java中上传图片并在浏览器中直接访问上传的图片
首先我们需要去下载一个java的控制中心的工具类fastdfs-client-java
然后我们打开Eclipse再右键导入工程(fastdfs-client-java为Maven工程)
导入后我们再在src/test/java创建一个Class(名字自己取,比如我就命名为TestFastDFS)并在该工程的pom.xml中加入单元测试的依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
然后在resource目录下创建一个配置文件client.conf 该文件中添加
然后在创建的TestFastDFS中添加如下代码
import org.csource.common.MyException;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.StorageServer;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;
import org.junit.Test;
public class TestFastDFS {
@Test
public void testFastDFS() throws Exception, MyException {
//这里的路径你是的项目的物理路径
ClientGlobal.init("D:\\MySource\\JAVA_test\\JeeText\\ebuy-manager-web\\src\\test\\resources\\client.conf");
// 2、创建一个TrackerClient对象
TrackerClient trackerClient = new TrackerClient();
// 3、使用阿哥TrackerClient对象创建连接,获得一个TrackerServer对象
TrackerServer trackerServer = trackerClient.getTrackerServer();
// 4、创建一个StorageServer的引用,值为null
StorageServer storageServer = null;
// 5、创建一个StorageClient对象,需要两个参数TrackerServer对象、Storage、Server的引用
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
// 6、使用StorageClient对象上传图片,扩展名不用带“.”
//如果是Windows7则直接在location那里自己的文件路径粘贴进去,Windows10则需要进行路径的转换
//Windows10
String str = "D:\\\\Download\\\\lizi.png";
String location = str.replace("\\\\", "/");
String[] strings = storageClient.upload_file(location, "png", null);
//Windows7
//String[] strings = storageClient.upload_file("D:\\Download\\lizi.png", "png", null);
for (String string : strings) {
System.out.println(string);
}
}
}
保存后我们右键Run As 然后Maven install
安装完成后我们在TestFastDFS类中右键Run As 开启单元测试
然后我们在控制台可以得到一个字符串
我们也可以直接在我们仓库中看到刚刚上传的图片
下面我们直接在浏览器中访问我们上传的图片(此时我们一定要检查我们的虚拟机的防火墙是否关闭,如果没有关闭我们则需要手动关闭防火墙):
如果我们在浏览器访问时提示404
则我们需要修改nginx.conf中的配置,我们需要在第一行添加 user root;
总结
为了记录在框架学习中所用到的技术,以便日后查阅。同时也为了防止其他小伙伴踩雷,所以就记录下FasfDFS的搭建过程,当我们发现错误时一定不要急躁,一步一步的去寻找问题的解决方法,不论多难的问题慢慢的总会解决的。小编也是第一次使用FastDFS搭载分布式文件系统,在上面的流程中难免会有些没有考虑到的地方,也能某些地方存在纰漏,如果有大佬发现,欢迎斧正!
最后感谢大家的支持,冲冲冲~