众客华禹

 找回密码
立即注册

QQ登录

只需一步,快速开始

查看: 507|回复: 0

Centos7部署FastDFS(V6.01)集群

[复制链接]

70

主题

70

帖子

378

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
378
发表于 2022-1-24 16:19:51 | 显示全部楼层 |阅读模式
一、FastDFS介绍
1、软件简介
       FastDFS是一个开源的分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

      FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。

      存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件meta data是文件属性列表,可以包含多个键值对。
2、FastDFS系统结构如下图所示:
       fastdfs%E5%9B%BE1.jpg
   
3、工作讲解
      跟踪器和存储节点都可以由一台多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。

       为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷 的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起 到了冗余备份和负载均衡的作用。

      在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。

     当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
     FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
      fastdfs%E5%9B%BE2.jpg
4、上传文件交互过程
    1)client询问tracker上传到的storage,不需要附加参数;
    2)tracker返回一台可用的storage;
    3)client直接和storage通讯完成文件上传。
       fastdfs%E5%9B%BE3.jpg

5、下载文件交互过程
     1)client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
     2)tracker返回一台可用的storage;
     3) client直接和storage通讯完成文件下载。

需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。
二、安装部署软件安装包下载:https://github.com/happyfish100/fastdfs/releases
fastdfs下载.png

如上图,由于FastDFS是纯C语言实现,只支持Linux、FreeBSD等UNIX系统,所以我们直接下载tar.gz的压缩包,同时FastDFS 5.0.5同以前版本相比将公共的一些函数等单独封装成了libfastcommon包,所以在安装FastDFS之前我们还必须安装libfastcommon,在余大的GitHub首页可以看到: https://github.com/happyfish100/libfastcommon/releases

libfastcommon下载.png
1、实验环境
  1.   IP地址                     系统               安装组件
  2. 192.168.0.82              Centos7.5            nginx、tracker、storage
  3. 192.168.0.84              Centos7.5            nginx、tracker、storage
  4. 192.168.0.147             Centos7.5            nginx、tracker、storage
复制代码
2、部署依赖公共组件
  1. yum install -y gcc gcc-c++ perl pcre pcre-devel zlib zlib-devel openssl openssl-devel libnl libnl-devel
复制代码
3、部署libfastcommon-master
  1. wget -O libfastcommon-master.zip https://codeload.github.com/happyfish100/libfastcommon/zip/master
  2. unzip libfastcommon-master.zip
  3. cd libfastcommon-master
  4. ./make.sh
  5. ./make.sh install
  6. ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so                        #检查下这个目录下有软连接没,没有则创建,正常安装成功是自动创建的
复制代码
4、部署FastDFS-V6.01版
  1. wget -O fastdfs-master.zip https://codeload.github.com/happyfish100/fastdfs/zip/master
  2. unzip fastdfs-master.zip
  3. cd fastdfs-master
  4. ./make.sh
  5. ./make.sh install
复制代码
三、配置FastDFS
1、三个节点配置tracker
  1. #创建tracker数据存储目录
  2. mkdir /data1/fdfs/tracker -p
  3. #ip地址根据实际修改
  4. mv /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
  5. sed -i 's/bind_addr=/bind_addr=192.168.0.82/g' /etc/fdfs/tracker.conf
  6. #修改base_path
  7. sed -i 's:base_path=/home/yuqing/fastdfs:base_path=/data1/fdfs/tracker:g' /etc/fdfs/tracker.conf
  8. #其他要修改的参数自行根据实际调整
复制代码
2、三个节点配置storage
  1. #创建storage数据存储目录
  2. mkdir /data1/fdfs/storage -p
  3. mkdir /data1/fdfs/storage -p
  4. #ip地址根据实际修改
  5. mv /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
  6. sed -i 's/bind_addr=/bind_addr=192.168.0.82/g' /etc/fdfs/storage.conf
  7. #修改base_path
  8. sed -i 's:base_path=/home/yuqing/fastdfs:base_path=/data1/fdfs/storage:g' /etc/fdfs/storage.conf
  9. #修改文件存储目录
  10. sed -i 's:store_path0=/home/yuqing/fastdfs:store_path0=/data1/fdfs/storage/data:g' /etc/fdfs/storage.conf
  11. #修改tracker地址
  12. sed -i 's/tracker_server=192.168.209.121:22122/tracker_server=192.168.0.82:22122/g' /etc/fdfs/storage.conf    集群有多少个就填多少个
  13. sed -i '/^tracker_server/atracker_server=192.168.0.84:22122' /etc/fdfs/storage.conf      
  14. sed -i '/^tracker_server/atracker_server=192.168.0.147:22122' /etc/fdfs/storage.conf        
  15. #若有n个存储数据目录(数据盘),需要增加store_path1,2,3,(n-1),并修改store_path_count=n
复制代码
3、启动服务
  1. fdfs_trackerd /etc/fdfs/tracker.conf start
  2. fdfs_storaged /etc/fdfs/storage.conf start
复制代码
四、测试验证
1、查看集群状态
  1. mv /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
  2. mkdir /data1/fdfs/client -p
  3. #修改base_path
  4. sed -i 's:base_path=/home/yuqing/fastdfs:base_path=/data1/fdfs/client:g' /etc/fdfs/client.conf
  5. #修改tracker地址
  6. sed -i 's/tracker_server=192.168.0.197:22122/tracker_server=192.168.0.82:22122/g' /etc/fdfs/client.conf
  7. #查看监控信息、查看storage的状态是否为ACTIVE
  8. fdfs_monitor /etc/fdfs/client.conf
复制代码
2、验证上传下载删除cd
  1. #上传后会返回一个以gropu开头的ID
  2. fdfs_upload_file /etc/fdfs/client.conf xxx.txt
  3. group1/M00/00/00/ChxS9l2gL5KAPQExAAAABKV9Avc785.txt
  4. #下载时指定ID,并可以指定下载后的文件名,例如:xxx1.txt
  5. fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/ChxS9l2gL5KAPQExAAAABKV9Avc785.txt xxx1.txt
  6. #删除时指定ID
  7. fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/ChxS9l2gL5KAPQExAAAABKV9Avc785.txt
  8. 注意:**若是通过程序直接读写文件,到此FastDFS集群部署完成。若是程序只负责写,需要通过Nginx以域名的方式访问文件,需要继续执行以下步骤。
复制代码
五、FastDFS与Nginx整合
1、下载并修改fastdfs-nginx-module
  1. wget -O fastdfs-nginx-module-master.zip https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/master
  2. unzip fastdfs-nginx-module-master.zip
  3. sed -i 's:/usr/local/include:/usr/include/fastdfs /usr/include/fastcommon:g' fastdfs-nginx-module-master/src/config
复制代码
2. 下载Nginx源码包并编译
  1. wget http://nginx.org/download/nginx-1.20.1.tar.gz
  2. tar xf nginx-1.20.1.tar.gz
  3. mkdir /usr/local/nginx
  4. #安装nginx依赖
  5. yum install zlib pcre pcre-devel openssl openssl-devel gd-devel -y
  6. #编译nginx
  7. ./configure --prefix=/usr/local/nginx --with-http_realip_module
  8. --with-http_sub_module --with-http_stub_status_module
  9. --with-http_gzip_static_module --with-http_image_filter_module
  10. --with-http_ssl_module --add-module=/usr/local/nginx/fastdfs-nginx-module-1.20/src/
  11. make -j 4
  12. make install

  13. 如果报错

  14. 修改/root/fastdfs-nginx-module-master/src/common.c第1245行
  15. 把(pContext-> range_count> 1 &&!g_http_params.support_multi_range))最后面的条件
  16. 去掉了改成(pContext-> range_count > 1))
  17. 重新make就好了
复制代码
3、配置mod_fastdfs
  1. #复制mod_fastdfs.conf
  2. cp fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
  3. cp fastdfs-master/conf/mime.types /etc/fdfs/
  4. cp fastdfs-master/conf/http.conf /etc/fdfs/
  5. #修改mod_fastdfs.conf配置
  6. mkdir /data1/fdfs/mod -p
  7. #修改base_path
  8. sed -i 's:base_path=/tmp:base_path=/data1/fdfs/mod:g' /etc/fdfs/mod_fastdfs.conf
  9. #修改tracker地址
  10. sed -i 's/tracker_server=tracker:22122/tracker_server=192.168.0.82:22122/g' /etc/fdfs/mod_fastdfs.conf
  11. sed -i '/^tracker_server/atracker_server=192.168.0.84:22122' /etc/fdfs/mod_fastdfs.conf
  12. #修改文件存储目录
  13. sed -i 's:store_path0=/home/yuqing/fastdfs:store_path0=/data1/fdfs/storage/data:g' /etc/fdfs/mod_fastdfs.conf
  14. #若有n个存储数据目录(数据盘),需要增加store_path1,2,3,(n-1),并修改store_path_count=n
  15. #若被访问的url中要包括上传文件后返回ID中的group,例如group0/M0/00/xx,则需要修改url_have_group_name = true
  16. sed -i 's/url_have_group_name = false/url_have_group_name = true/g' /etc/fdfs/mod_fastdfs.conf
  17. #当整个集群有多个group时(横向扩展时使用),需要修改group_count=n,n为group个数,并增加group对应的信息。例如:
  18. #[group1]
  19. #group_name=group1
  20. #storage_server_port=23000
  21. #store_path_count=2
  22. #store_path0=/home/yuqing/fastdfs
  23. #store_path1=/home/yuqing/fastdfs1
复制代码
4、创建nginx配置文件
  1. cat fdfs.conf
  2. server {
  3.         listen       8888;
  4.         server_name  localhost;

  5.         location ~/group([1-9])/M0([0-9])/{
  6.                 ngx_fastdfs_module;
  7.         }
  8. }
复制代码
5、验证
  1. curl localhost:8888/group1/M00/00/00/ChxS9l2gL5KAPQExAAAABKV9Avc785.txt
复制代码
6、配置域名反向代理到三个节点的nginx模块
  1. upstream fdfsfile {
  2.         server 192.168.0.82:8888 weight=1 max_fails=2 fail_timeout=10s;
  3.         server 192.168.0.84:8888 weight=1 max_fails=2 fail_timeout=10s;
  4.         server 192.168.0.147:8888 backup;
  5. }

  6. server {
  7.         listen       443 ssl;
  8.         server_name  file.xxxx.com;
  9.         ssl_certificate /usr/local/nginx/conf/ssl/xxxx.com.pem;
  10.         ssl_certificate_key /usr/local/nginx/conf/ssl/xxxx.com.key;
  11.         ssl_session_timeout 5m;
  12.         ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  13.         ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!LOW:!aNULL:!eNULL;
  14.         ssl_prefer_server_ciphers on;

  15.         location / {
  16.            valid_referers *.xxxx.com;
  17.            if ($invalid_referer) {
  18.                return 403;
  19.            }
  20.            proxy_pass http://fdfsfile;
  21.            proxy_redirect off;
  22.            proxy_set_header HOST $host;
  23.            proxy_set_header X-Real-IP $remote_addr;
  24.            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  25.            client_max_body_size 100m;
  26.            client_body_buffer_size 1024k;
  27.            proxy_connect_timeout 90;
  28.            proxy_send_timeout 90;
  29.            proxy_read_timeout 90;
  30.            proxy_buffer_size 32k;
  31.            proxy_buffers 4 32k;
  32.            proxy_busy_buffers_size 64k;
  33.            proxy_temp_file_write_size 64k;
  34.         }

  35.         error_page   500 502 503 504  /50x.html;
  36.         location = /50x.html {
  37.            root   html;
  38.         }
  39. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|众客华禹 ( 蜀ICP备2021016660号 )

GMT+8, 2022-5-17 08:49 , Processed in 0.051158 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表