设为首页 收藏本站
查看: 1049|回复: 0

[经验分享] FastDFS 学习笔记

[复制链接]

尚未签到

发表于 2019-1-31 12:57:28 | 显示全部楼层 |阅读模式
  一、理论基础
  FastDFS比较适合以中小文件为载体的在线服务,比如跟NGINX(APACHE)配合搭建图片服务器。
  分布式文件系统FastDFS
  FastDFS是纯C语言实现,只支持Linux、FreeBSD等UNIX系统。
  FastDFS的两个核心概念分别是:Tracker(跟踪器)、Storage(存储节点)
  

    跟踪器Tracker主要做调度工作,相当于mvc中的controller的角色,在访问上起负载均衡的作用。跟踪器和存储节点都可以由一台或多台服务器构成,跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务,其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。  

  跟踪器Tracker负责管理所有的Storage和group,每个Storage在启动后会连接Tracker,
  

  告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,
  建立group==>[storage server list]的映射表,Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。
  

    存储节点Storage采用了分卷[Volume](或分组[group])的组织方式,存储系统由一个或多个组组成,组与组之间的文件是相互独立的,所有组的文件容量累加就是整个存储系统中的文件容量。  

  一个卷[Volume](组[group])可以由一台或多台存储服务器组成,一个组中的存储服务器中的文件都是相同的,组中的多台存储服务器起到了冗余备份和负载均衡的作用,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。
  二、安装环境

  操作系统版本:  CentOS>  提前安装相关操作系统包
  yum install unzip zip  gcc-c++
  创建一个文件夹/opt/dfspackages/,用来保存相关软件
  源码地址首页:https://github.com/happyfish100
  源码作者:资深架构师   余庆
  公共函数库:libfastcommon-master.zip
  下载地址:
  https://codeload.github.com/happyfish100/libfastcommon/zip/master
  主程序:fastdfs-5.10.tar.gz
  下载地址:https://github.com/happyfish100/fastdfs
  https://codeload.github.com/happyfish100/fastdfs/zip/master
  NGINX与DFS链接模块: fastdfs-nginx-module_v1.16.tar.gz
  https://github.com/happyfish100/fastdfs-nginx-module
  https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/master
  下载完之后通过WinScp,SECURET 等工具直接传送到服务器
  接下来FastDFS的安装过程步骤如下:
  三、安置步骤
  3.1 libfastcommon包安装
  FastDFS 将以前版本的公共的一些函数单独封装成了libfastcommon包,所以在安装FastDFS之前我们还必须安装libfastcommon。
  3.1.1 解压缩
  unzip libfastcommon-master.zip
  执行编译步骤:./make.sh
  执行安装步骤:./make.sh install
  libfastcommon.so 默认安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,
  所以此处需要重新设置软链接(类似于Windows的快捷方式):
  ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
  ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
  ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
  3.2 FastDFS 安装
  unzip fastdfs-master.zip
  cd fastdfs-master
  ./make.sh
  ./mae.sh install
  cd /etc/fdfs/
  ll -lh
  对三个配置文件进行拷贝,后面有用
  cp client.conf.sample client.conf
  cp storage.conf.sample storage.conf
  cp tracker.conf.sample tracker.conf
  3.3Tracker 安装
  创建Tracker服务器的文件路径,即用于存储Tracker的数据文件和日志文件等:
  mkdir /opt/fastdfs_tracker
  编辑上/etc/fdfs/tracker.conf 配置文件,打开文件后依次做以下修改:
  vim /etc/fdfs/tracker.conf
  #启用配置文件(默认false)
  disabled=false
  #设置tracker的端口号,通常采用22122这个默认端口
  port=22122
  #设置tracker的数据文件和日志目录
  base_path=/opt/fastdfs_tracker
  #设置http端口号,初始值为8080
  http.server_port=6666
  为启动脚本创建软引用,因为fdfs_trackerd等命令在/usr/local/bin中并没有,而是在/usr/bin路径下:
  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
  最后通过命令启动Tracker服务器:
  service fdfs_trackerd start
  如果启动命令执行成功,那么同时在刚才创建的tracker文件目录/opt/fastdfs_tracker中就可以看到启动后新生成的data和logs目录,tracker服务的端口也应当被正常监听,最后再通过netstat命令查看一下端口监听情况:
  netstat -unltp|grep fdfs
  服务运行的22122端口正常
  3.4 Storage安装
  创建Storage服务器的文件目录,注意同Tracker相比要多建一个目录,因为Storage还需要一个文件存储路径,用于存放接收的文件:
  mkdir /opt/fastdfs_storage
  mkdir /opt/fastdfs_storage_data
  接下来修改/etc/fdfs/storage.conf配置文件,打开文件后依次做以下修改:
  #设置storage端口号,默认是23000,同一个组的storage端口号必须一致
  port=23000
  #设置storage数据文件和日志目录
  base_path=/opt/fastdfs_storage
  #实际文件存储路径
  store_path0=/opt/fastdfs_storage_data
  #存储路径个数,需要和store_path个数匹配
  store_path_count=1
  #tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功
  tracker_server=117.27.1.11 :22122
  #设置 http 端口号
  http.server_port=8888
  配置完成后同样要为Storage服务器的启动脚本设置软引用:
  ln -s /usr/bin/fdfs_storaged /usr/local/bin
  接下来就可以启动Storage服务了:
  service fdfs_storaged start
  验证成功启动的方法:
  netstat -unltp|grep fdfs
  查看是否有23000,22122,两个端口在
  成功的话,/opt/fastdfs_storage/data目录下生成好的文件夹,data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件夹。
  新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。那么最后我们再看一下storage服务的端口监听情况:
  查看:storage服务器是否已经登记到 tracker服务器,运行以下命令:
  /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
  看到117.27.1.11 ACTIVE 字样即可说明storage服务器已经成功登记到了tracker服务器
  至此我们就已经完成了fastdfs的全部配置,此时也就可以用客户端工具进行文件上传下载的测试了。
  3.5初步 测试
  从https://github.com/happyfish100/fastdfs-client-java下载测试代码
  本次测试从本地F盘传1.JPG
  配置fdfs_client.conf文件
  tracker_server = 117.27.1.11:22122
  运行Test.java
  上传到group1/M00/00/00/dRuYfFjwefOAaADcAAjuDOhJdt4482.jpg
  对应服务器上的位置:/opt/fastdfs_storage_data/data/00/00
  这个是服务器上面的显示位置
  3.6 fastdfs-nginx-module
  FastDFS目前已不支持http协议
  余大提供了nginx上使用FastDFS的模块fastdfs-nginx-module,
  这样做最大的好处就是提供了HTTP服务并且解决了group中storage服务器的同步延迟问题,
  安nginx模块依赖lib库
  yum -y install pcre pcre-devel
  yum -y install zlib zlib-devel
  yum -y install openssl openssl-devel
  前提要先安装好nginx等
  接下来就具体记录一下fastdfs-nginx-module的安装配置过程
  代码下载地址:https://github.com/happyfish100/fastdfs-nginx-module
  进入源码nginx安装文件夹
  解压成功后就可以编译安装nginx了,进入nginx目录并输入以下命令进行配置:
  ./configure --prefix=/usr/local/nginx  --add-module=/opt/dfspackages/fastdfs-nginx-module-master/src
  make
  make install
  或则是全新安装NGINX
  ./configure --prefix=/opt/dfsNginx  --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module  --with-http_stub_status_module  --add-module=/opt/dfspackages/fastdfs-nginx-module-master/src  --http-client-body-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi
  make && make install
  groupadd -f nginx
  useradd -g nginx nginx
  配置nginx.conf文件,加入server{ }中
  listen       9999;
  location ~/group1/M00 {
  root /opt/fastdfs_storage_data/data;
  ngx_fastdfs_module;
  }
  cp /opt/dfspackages/fastdfs-master/conf/http.conf      /etc/fdfs/
  cp /opt/dfspackages/fastdfs-master/conf/mime.types  /etc/fdfs/
  cp /opt/dfspackages/fastdfs-nginx-module-master/src/mod_fastdfs.conf  /etc/fdfs/
  编辑mod_fastdfs.conf文件,vim /etc/fdfs/mod_fastdfs.conf:
  #保存日志目录
  base_path=/opt/fastdfs_storage
  #tracker服务器的IP地址以及端口号
  tracker_server=192.168.111.11:22122
  #storage服务器的端口号
  storage_server_port=23000
  #文件 url 中是否有 group 名
  url_have_group_name = true

存储路径
  store_path0=/opt/fastdfs_storage_data
  #设置组的个数,事实上这次只使用了group1
  group_count = 3
  设置了group_count = 3,接下来就需要在文件尾部追加这3个group setting:
  [group1]
  group_name=group1
  storage_server_port=23000
  store_path_count=1
  store_path0=/opt/fastdfs_storage_data
  [group2]
  group_name=group2
  storage_server_port=23000
  store_path_count=1
  store_path0=/opt/fastdfs_storage_data
  [group3]
  group_name=group3
  storage_server_port=23000
  store_path_count=1
  store_path0=/opt/fastdfs_storage_data
  接下来还需要建立 M00 至存储目录的符号连接:
  ln  -s  /opt/fastdfs_storage_data/data  /opt/fastdfs_storage_data/data/00
  最后启动nginx:
  /usr/local/nginx/sbin/nginx
  浏览器也可以看到nginx的主页



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-670072-1-1.html 上篇帖子: fastdfs上传测试 下篇帖子: FastDFS 的安装与配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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