[FastDFS]安装配置
[FastDFS]安装配置
艾恩凝
2021/5/14
Introduction
今天上午花了一个多小时,下午两个多小时,说实话第一次搞某样东西真心难搞,配置这个国产大佬的东西真心难,没配好的话,现在想写现在的东西都不可能了,安装步骤是挺少的,可是自己遇到的问题和教程或者视频并不一样,个人觉的看作者github上的安装教程最好,但也是最简洁的,现在我又变强了,虽然啥也不懂,这个算是java项目中的一部分吧,毕竟打算用fastdfs存储数据,哈哈哈。
FastDFS
注:此介绍来源于网络,如果侵权速与我联系
FastDFS是一个开源的分布式文件系统,她对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件meta data是文件属性列表,可以包含多个键值对。
FastDFS系统结构如下图所示:
跟踪器和存储节点都可以由一台多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷 的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起 到了冗余备份和负载均衡的作用。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
上传文件交互过程:
- client询问tracker上传到的storage,不需要附加参数;
- tracker返回一台可用的storage;
- client直接和storage通讯完成文件上传。
下载文件交互过程:
- client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
- tracker返回一台可用的storage;
- client直接和storage通讯完成文件下载。
需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。
FastDFS安装
服务器centos
tracker和storage在一个服务器
编译环境
首先安装程序所需要的
1yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y
2
下载安装包
安装包最好去github上下载,最新的真的很好用,网上的教程参差不齐,有很多步骤不需要去做
1git clone https://github.com/happyfish100/libfastcommon.git --depth 1
2git clone https://github.com/happyfish100/fastdfs.git --depth 1
3git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1
4#我使用的服务器本身就有Nginx,并且还运行着项目
5wget http://nginx.org/download/nginx-1.15.4.tar.gz #下载nginx压缩包
上面就是所需要的安装包
安装libfastcommon
1cd libfastcommon/
2./make.sh &&
3./make.sh install #编译安装
上面就是安装成功了,安装这个其他的根本不用动,这就ok
安装FastDFS
1cd fastdfs/
2./make.sh
3./make.sh install #编译安装
安装完成后,配置文件在 /etc/fdfs/
中,最新的安装包,原始配置已经在里面了,备份的话可以全部加个.sample后缀,之后因为需要配置Nginx,所以拷贝Nginx需要的
1cp /home/fastdfs/packages/fastdfs/conf/http.conf /etc/fdfs/ #供nginx访问使用
2cp /home/fastdfs/packages/fastdfs/conf/mime.types /etc/fdfs/ #供nginx访问使用
注意,上面的路径是自己安装包的路径
Tracker配置
1vim /etc/fdfs/tracker.conf
主要修改这个,这个路径自己可以创建一个,保存退出,就可以运行了
1/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf #运行tracker
Storage配置
主要修改下面几个
上图tracker_server 修改为自己的ip,port可以不用修改,因为我的8888端口被别的项目占用了,保存并退出即可
1/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
注意:用的端口必须打开,自己用的是阿里云服务器,需要配置规则,打开端口
Client配置
这个配置很简单和上面一样就是把 base_path
这个改成自己的路径就可以了,这个自己设定
1base_path=/home/dfs
2tracker_server=192.168.52.1:22122 #tracker服务器IP和端口
测试
1fdfs_upload_file /etc/fdfs/client.conf /home/test.html
上传文件,成功后会返回一个路径
配置Nginx
安装fastdfs-nginx-module
首先进入下载的目录下,文件很少,进入src文件夹下,打开config这个文件,修改如下。把local去掉
最后把这个文件拷贝到配置文件夹那
1 cp /home/fastdfs/packages/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
2
打开这个文件修改 vim mod_fastdfs.conf
主要修改图上三处,注意这个路径就是,之前配置storage的路径
Nginx配置
因为服务器本身已经运行了Nginx,这也是为什么花了两个多小时,才把这个搞定的原因,坑有点多,把之前好的Nginx覆盖安装了,配置文件删除了,证书删除了,遇到的问题比较多,在这个环节上如果是第一次配置nginx会很简单,主要nginx用的服务不少,为了同时可以运行花费了不少功夫
之前安装Nginx的安装包还在,就用以前的版本,进入到该目录下
1 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=/home/fastdfs/packages/fastdfs-nginx-module/src
2make
执行上面的,make以后就可以了,一定不要make install,从这开始坑就开始了,花了挺长时间,现在到objs文件夹下找到新的Nginx,拷贝到 /usr/local/nginx/sbin
就是注意备份,这个自己也没想到要备份,出现的问题比较多,不多说了
停掉原先的Nginx,运行现在重新编译的Nginx
修改Nginx下conf中的nginx.conf
1#配置nginx.config
2vim /usr/local/nginx/conf/nginx.conf
3#添加如下配置
4server {
5 listen 9999; ## 该端口为storage.conf中的http.server_port相同
6 server_name localhost;
7 location ~/group[0-9]/ {
8 ngx_fastdfs_module;
9 }
10 error_page 500 502 503 504 /50x.html;
11 location = /50x.html {
12 root html;
13 }
14}
重新运行,这样就可以了,终于可以测试了,虽然最后说的简单,但遇到的问题却挺多
升级https
这里就是纯nginx配置了,轻车熟路,修改nginx.conf
1server {
2 listen 80;
3 server_name file.aeneag.xyz;
4
5 rewrite ^/(.*)$ https://file.aeneag.xyz/$1 permanent;
6 }
7upstream myfile{
8 server localhost:9999;
9 }
10 server {
11 add_header Strict-Transport-Security "max-age=31536000";
12 listen 443 ssl;
13 server_name file.aeneag.xyz;
14 root html;
15 index index.html index.htm;
16 ssl_certificate ../cert/file.aeneag.xyz.pem;
17 ssl_certificate_key ../cert/file.aeneag.xyz.key;
18 ssl_session_timeout 5m;
19 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
20 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
21 ssl_prefer_server_ciphers on;
22
23 location ~/group[0-9]/ {
24 #root html;
25 #index index.html index.htm;
26 #proxy_pass http://myfile$request_uri;
27 #proxy_set_header Host $host:$server_port;
28 #3proxy_set_header X-Real-IP $remote_addr;
29 #client_max_body_size 10m;
30 ngx_fastdfs_module;
31 }
32 }
这就ok了
Conclusion
只知道fastdfs挺好用,但是配置真心劝退,感谢网络上的大佬们
则移山填海之难,
终有成功之日!
——孙文