FastDFS介绍和配置过程

简介:

由于网站使用nfs共享方式保存用户上传的图片,附件等资料,然后通过apache下载的方式供用户访问,在网站架构初期,使用这种简单的方式实现了静态资源的读写分离,但随着网站数据量的增加,图片服务器渐渐成为整个网站的短板,缘次催生了使用fastfds的想法,故而先进行一番简单的测试!在开始之前还是先来看看fastfds的介绍信息:

FastDFS is an open source high performance distributed file system (DFS). It's major functions include: file storing, file syncing and file accessing, and design for high capacity and load balancing.

FastDFS is an open source high performance distributed file system. It's major functions include: file storing, file syncing and file accessing (file uploading and file downloading), and it can resolve the high capacity and load balancing problem. FastDFS should meet the requirement of the website whose service based on files such as photo sharing site and vidio sharing site.

FastDFS has two roles: tracker and storage. The tracker takes charge of scheduling and load balancing for file access. The storage store files and it's function is file management including: file storing, file syncing, providing file access interface. It also manage the meta data which are attributes representing as key value pair of the file. For example: width=1024, the key is "width" and the value is "1024".

The tracker and storage contain one or more servers. The servers in the tracker or storage cluster can be added to or removed from the cluster by any time without affecting the online services. The servers in the tracker cluster are peer to peer.

The storarge servers organizing by the file volume/group to obtain high capacity. The storage system contains one or more volumes whose files are independent among these volumes. The capacity of the whole storage system equals to the sum of all volumes' capacity. A file volume contains one or more storage servers whose files are same among these servers. The servers in a file volume backup each other, and all these servers are load balancing. When adding a storage server to a volume, files already existing in this volume are replicated to this new server automatically, and when this replication done, system will switch this server online to providing storage services. When the whole storage capacity is insufficiency, you can add one or more volumes to expand the storage capacity. To do this, you need to add one or more storage servers.

The identification of a file is composed of two parts: the volume name and the file name.

大意为:
fastdfs是一个开源的,高性能的的分布式文件系统,他主要的功能包括:文件存储,同步和访问,设计基于高可用和负载均衡,fastfd非常适用于基于文件服务的站点,例如图片分享和视频分享网站

fastfds有两个角色:跟踪服务和存储服务,跟踪服务控制,调度文件以负载均衡的方式访问;存储服务包括:文件存储,文件同步,提供文件访问接口,同时以key value的方式管理文件的元数据

跟踪和存储服务可以由1台或者多台服务器组成,同时可以动态的添加,删除跟踪和存储服务而不会对在线的服务产生影响,在集群中,tracker服务是对等的

存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。

下面几张图可以清楚的说明fastfds的架构和文件上传和下载流程等:

下面将介绍下fastdfs在rhel上的部署过程
tracker服务器:192.168.123.110/24
storage服务器:192.168.123.20/24

一:编译安装


 
 
  1. [root@db1 ~]# wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.14  
  2. -stable.tar.gz  
  3. [root@db1 ~]# tar -zxvpf libevent-2.0.14-stable.tar.gz   
  4. [root@db1 ~]# cd libevent-2.0.14-stable  
  5. [root@db1 libevent-2.0.14-stable]# ./configure --prefix=/usr/local/libevent-2.0.14 &&   
  6. make && make install  
  7. [root@db1 ~]# wget http://fastdfs.googlecode.com/files/FastDFS_v3.02.tar.gz  
  8. [root@db1 ~]# tar -zxvf FastDFS_v3.02.tar.gz   
  9. [root@db1 ~]# cd FastDFS  
  10. [root@db1 FastDFS]# grep -A 4 '/usr/local/FastDFS' make.sh   
  11. TARGET_PREFIX=/usr/local/FastDFS  
  12. TARGET_CONF_PATH=/etc/fdfs  
  13. WITH_HTTPD=1 
  14. WITH_LINUX_SERVICE=1 
  15. [root@db1 FastDFS]# ./make.sh C_INCLUDE_PATH=/usr/local/libevent-2.0.14/include    
  16. LIBRARY_PATH=/usr/local/libevent-2.0.14/lib  
  17. [root@db1 FastDFS]# ./make.sh install  
  18. [root@db1 FastDFS]# ls /etc/fdfs/  
  19. client.conf  http.conf  mime.types  storage.conf  tracker.conf 

二:tracker配置文件


 
 
  1. [root@db1 ~]# grep -v '^#' /etc/fdfs/tracker.conf |grep -v '^$'  
  2. disabled=false 
  3. bind_addr=192.168.123.110  
  4. port=22122 
  5. connect_timeout=30 
  6. network_timeout=60 
  7. base_path=/home/data/fastdfs  
  8. max_connections=256 
  9. work_threads=4 
  10. store_lookup=2 
  11. store_group=group2 
  12. store_server=0 
  13. store_path=0 
  14. download_server=0 
  15. reserved_storage_space = 4GB 
  16. log_level=info 
  17. run_by_group=  
  18. run_by_user=  
  19. allow_hosts=*  
  20. sync_log_buff_interval = 10 
  21. check_active_interval = 120 
  22. thread_stack_size = 64KB 
  23. storage_ip_changed_auto_adjust = true 
  24. storage_sync_file_max_delay = 86400 
  25. storage_sync_file_max_time = 300 
  26. use_trunk_file = false   
  27. slot_min_size = 256 
  28. slot_max_size = 16MB 
  29. trunk_file_size = 64MB 
  30. http.disabled=false 
  31. http.server_port=8080 
  32. http.check_alive_interval=30 
  33. http.check_alive_type=tcp 
  34. http.check_alive_uri=/status.html  
  35. http.need_find_content_type=true 
  36.  
  37. [root@db1 ~]# grep -v '^#' /etc/fdfs/http.conf  |grep -v '^$'  
  38. http.default_content_type = application/octet-stream  
  39. http.mime_types_filename=/etc/fdfs/mime.types  
  40. http.anti_steal.check_token=false 
  41. http.anti_steal.token_ttl=900 
  42. http.anti_steal.secret_key=FastDFS1234567890 
  43. http.anti_steal.token_check_fail=/home/data/fastdfs/conf/anti-steal.jpg 

三:启动tracker服务,需要注意tracker.conf文件最后一行为#include httpd.conf


 
 
  1. [root@db1 ~]# /usr/local/FastDFS/bin/fdfs_trackerd /etc/fdfs/tracker.conf   
  2. /usr/local/FastDFS/bin/fdfs_trackerd: error while loading shared libraries: libevent-  
  3. 2.0.so.5: cannot open shared object file: No such file or directory  
  4. [root@db1 ~]# echo '/usr/local/libevent-2.0.14/include/' >> /etc/ld.so.conf  
  5. [root@db1 ~]# echo '/usr/local/libevent-2.0.14/lib/' >> /etc/ld.so.conf  
  6. [root@db1 ~]# ldconfig  
  7. [root@db1 ~]# /usr/local/FastDFS/bin/fdfs_trackerd /etc/fdfs/tracker.conf   
  8. [2012-07-04 17:52:25] ERROR - file: tracker_func.c, line: 160, "/home/data/fastdfs"   
  9. can't be accessed, error info: No such file or directory  
  10. [root@db1 ~]# mkdir -p /home/data/fastdfs  
  11. [root@db1 ~]# /usr/local/FastDFS/bin/fdfs_trackerd /etc/fdfs/tracker.conf   
  12. [root@db1 ~]# echo $?  
  13. 22  
  14. [root@db1 ~]# cat  /home/data/fastdfs/logs/trackerd.log   
  15. [2012-07-04 17:52:50] ERROR - file: ../common/fdfs_http_shared.c, line: 128, param   
  16. "http.mime_types_filename" not exist or is empty  
  17. [root@db1 ~]# tail -1 /etc/fdfs/tracker.conf   
  18. #include http.conf  
  19. [root@db1 ~]# /usr/local/FastDFS/bin/fdfs_trackerd /etc/fdfs/tracker.conf   
  20. [root@db1 ~]# echo $?  
  21. 0  
  22. [root@db1 ~]# ps -ef |grep track  
  23. root      3535     1  0 15:47 ?        00:00:00 /usr/local/FastDFS/bin/fdfs_trackerd   
  24. /etc/fdfs/tracker.conf  
  25.  
  26. [root@db1 ~]# netstat -ntpl |grep fdfs  
  27. tcp        0      0 192.168.123.110:22122       0.0.0.0:*                   LISTEN        
  28. 3535/fdfs_trackerd    
  29. tcp        0      0 192.168.123.110:8080        0.0.0.0:*                   LISTEN        
  30. 3535/fdfs_trackerd  

四:storage配置文件


 
 
  1. [root@db2 ~]# grep -v '^#' /etc/fdfs/storage.conf |grep -v '^$'  
  2. disabled=false 
  3. group_name=group1 
  4. bind_addr=192.168.123.20  
  5. client_bind=true 
  6. port=23000 
  7. connect_timeout=30 
  8. network_timeout=60 
  9. heart_beat_interval=30 
  10. stat_report_interval=60 
  11. base_path=/home/data/fastdfs  
  12. max_connections=256 
  13. buff_size = 256KB 
  14. work_threads=4 
  15. disk_rw_separated = true 
  16. disk_rw_direct = false 
  17. disk_reader_threads = 1 
  18. disk_writer_threads = 1 
  19. sync_wait_msec=50 
  20. sync_interval=0 
  21. sync_start_time=00:00  
  22. sync_end_time=23:59  
  23. write_mark_file_freq=500 
  24. store_path_count=1 
  25. store_path0=/home/data/fastdfs  
  26. subdir_count_per_path=256 
  27. tracker_server=192.168.123.110:22122  
  28. log_level=info 
  29. run_by_group=  
  30. run_by_user=  
  31. allow_hosts=*  
  32. file_distribute_path_mode=0 
  33. file_distribute_rotate_count=100 
  34. fsync_after_written_bytes=0 
  35. sync_log_buff_interval=10 
  36. sync_binlog_buff_interval=10 
  37. sync_stat_file_interval=300 
  38. thread_stack_size=512KB 
  39. upload_priority=10 
  40. if_alias_prefix=  
  41. check_file_duplicate=0  
  42. key_namespace=FastDFS 
  43. keep_alive=0 
  44. http.disabled=false 
  45. httphttp.domain_name=  
  46. http.server_port=8888 
  47. http.trunk_size=256KB 
  48. http.need_find_content_type=true 
  49.  
  50. [root@db2 ~]# grep -v '^#' /etc/fdfs/client.conf  |grep -v '^$'  
  51. connect_timeout=30 
  52. network_timeout=60 
  53. base_path=/home/data/fastdfs  
  54. tracker_server=192.168.123.110:22122  
  55. log_level=info 
  56. http.tracker_server_port=8080 
  57.  
  58. [root@db2 ~]#  grep -v '^#' /etc/fdfs/http.conf |grep -v '^$'  
  59. http.default_content_type = application/octet-stream  
  60. http.mime_types_filename=mime.types  
  61. http.anti_steal.check_token=false 
  62. http.anti_steal.token_ttl=900 
  63. http.anti_steal.secret_key=FastDFS1234567890 
  64. http.anti_steal.token_check_fail=/home/data/fastdfs/conf/anti-steal.jpg 

五:启动storage,需要注意storage.conf文件最后一行为#include httpd.conf


 
 
  1. [root@db2 ~]# mkdir -p /home/data/fastdfs  
  2. [root@db2 ~]# echo '/usr/local/libevent-2.0.14/include/' >> /etc/ld.so.conf  
  3. [root@db2 ~]# echo '/usr/local/libevent-2.0.14/lib/' >> /etc/ld.so.conf  
  4. [root@db2 ~]# ldconfig  
  5.  
  6. [root@db2 ~]# tail -2 /etc/fdfs/storage.conf   
  7. #use "#include" directive to include HTTP other settings  
  8. #include http.conf  
  9.  
  10. [root@db2 ~]# /usr/local/FastFDS/bin/fdfs_storaged /etc/fdfs/storage.conf   
  11. mkdir data path: 00 ...  
  12. mkdir data path: 01 ...  
  13. mkdir data path: 02 ...  
  14. ———输出省略————  
  15. data path: /home/data/fastdfs/data, mkdir sub dir done.  
  16.  
  17. [root@db2 ~]# ps -ef |grep fdfs  
  18. root     14451     1  0 16:15 ?        00:00:00 /usr/local/FastFDS/bin/fdfs_storaged   
  19. /etc/fdfs/storage.conf  
  20. root     14468  8238  0 16:16 pts/1    00:00:00 grep fdfs  
  21.  
  22. [root@db2 ~]# netstat -ntpl |grep fdfs  
  23. tcp        0      0 192.168.123.20:8888         0.0.0.0:*                   LISTEN        
  24. 14451/fdfs_storaged   
  25. tcp        0      0 192.168.123.20:23000        0.0.0.0:*                   LISTEN        
  26. 14451/fdfs_storaged  

五:测试文件上传

 [root@db2 ~]# /usr/local/FastFDS/bin/fdfs_test /etc/fdfs/client.conf upload /etc/passwd
This is FastDFS client test program v3.02
Copyright (C) 2008, Happy Fish / YuQing
FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.csource.org/ 
for more detail.

[2012-07-30 16:25:59] INFO - base_path=/home/data/fastdfs, connect_timeout=30,

network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0 tracker_query_storage_store_list_without_group: 
server 1. group_name=group1, ip_addr=192.168.123.20, port=23000
 group_name=group1, ip_addr=192.168.123.20, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKh7FFAWRRfcMOGtAAAHKBGhZhE8065783
source ip address: 192.168.123.20
file timestamp=2012-07-30 16:25:59
file size=1832
file crc32=295790097
file url: 
http://192.168.123.110:8080/group1/M00/00/00/wKh7FFAWRRfcMOGtAAAHKBGhZhE8065783
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKh7FFAWRRfcMOGtAAAHKBGhZhE8065783_big
source ip address: 192.168.123.20
file timestamp=2012-07-30 16:25:59
file size=1832
file crc32=295790097
file url: 
http://192.168.123.110:8080/group1/M00/00/00/wKh7FFAWRRfcMOGtAAAHKBGhZhE8065783_big

[root@db2 ~]# /usr/local/FastFDS/bin/fdfs_test /etc/fdfs/client.conf upload 2.jpg 
This is FastDFS client test program v3.02
Copyright (C) 2008, Happy Fish / YuQing
FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.csource.org/ 
for more detail.

[2012-07-30 16:29:22] INFO - base_path=/home/data/fastdfs, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0 tracker_query_storage_store_list_without_group: 
server 1. group_name=group1, ip_addr=192.168.123.20, port=23000
 group_name=group1, ip_addr=192.168.123.20, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKh7FFAWReLzPs4sAAEYquSDGwc472.jpg
source ip address: 192.168.123.20
file timestamp=2012-07-30 16:29:22
file size=71850
file crc32=3833797383
file url: 
http://192.168.123.110:8080/group1/M00/00/00/wKh7FFAWReLzPs4sAAEYquSDGwc472.jpg
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKh7FFAWReLzPs4sAAEYquSDGwc472_big.jpg
source ip address: 192.168.123.20
file timestamp=2012-07-30 16:29:22
file size=71850
file crc32=3833797383
file url: 
http://192.168.123.110:8080/group1/M00/00/00/wKh7FFAWReLzPs4sAAEYquSDGwc472_big.jpg

 

本文转自斩月博客51CTO博客,原文链接http://blog.51cto.com/ylw6006/948729如需转载请自行联系原作者


ylw6006

相关文章
|
6月前
|
存储 人工智能 前端开发
2025年解析 AI 编程:当前水平与对程序员的影响-优雅草卓伊凡
2025年解析 AI 编程:当前水平与对程序员的影响-优雅草卓伊凡
176 8
2025年解析 AI 编程:当前水平与对程序员的影响-优雅草卓伊凡
|
12月前
|
机器学习/深度学习 自然语言处理 搜索推荐
深度学习的魔法:如何用神经网络解决复杂问题
在这篇文章中,我们将探讨深度学习的基本原理和它在各种领域中的应用。通过一些实际的例子,我们将看到深度学习如何帮助我们解决复杂的问题,如图像识别、自然语言处理和推荐系统等。我们还将讨论一些最新的研究成果和技术趋势,以及深度学习在未来可能面临的挑战和机遇。
|
11月前
|
存储 监控 安全
开发者的黄金时代:原生鸿蒙应用市场的全生命周期服务
2024年10月22日,华为发布了HarmonyOS NEXT,标志着鸿蒙生态进入商用发展阶段。原生鸿蒙应用市场全面焕新,不仅在UI设计、互动体验和隐私安全机制上进行了重塑,还为开发者和用户提供了从开发到分发的全生命周期服务。通过统一上架、多端分发、隐私合规保障等措施,原生鸿蒙应用市场助力开发者实现高效、安全的应用开发与分发,为全球数亿鸿蒙用户带来更流畅、更安全的使用体验。
|
7月前
|
Ubuntu 安全 Linux
ubuntu2404 Server扩展PV
通过以上步骤,你可以成功扩展Ubuntu 24.04 Server上的物理卷。该过程包括创建新分区、将其添加到现有PV、扩展逻辑卷和相应的文件系统。扩展完成后,服务器将能够使用新增的存储空间,确保系统运行更加高效和稳定。
291 77
|
人工智能 弹性计算 自然语言处理
快速部署 MaxKB 社区版
MaxKB = Max Knowledge Base,是一款基于 LLM 大语言模型的开源知识库问答系统,旨在成为企业的最强大脑。本文介绍如何使用计算巢快速部署 MaxKB 社区版。
快速部署 MaxKB 社区版
|
11月前
|
域名解析 网络协议 测试技术
IP、掩码、网关、DNS1、DNS2到底是什么东西,ping telnet测试
理解IP地址、子网掩码、默认网关和DNS服务器的概念是有效管理和配置网络的基础。通过使用ping和telnet命令,可以测试网络连通性和服务状态,快速诊断和解决网络问题。这些工具和概念是网络管理员和IT专业人员日常工作中不可或缺的部分。希望本文提供的详细解释和示例能够帮助您更好地理解和应用这些网络配置和测试工具。
5382 2
|
12月前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
303 2
|
缓存 编译器 程序员
C/C++编译器并行优化技术:并行优化针对多核处理器和多线程环境进行优化,以提高程序的并行度
C/C++编译器并行优化技术:并行优化针对多核处理器和多线程环境进行优化,以提高程序的并行度
995 0
|
人工智能 算法 自动驾驶
AI的伦理困境:我们如何应对?
随着人工智能(AI)的发展,其伦理问题也日益凸显。本文将探讨AI的伦理困境,包括数据隐私、算法偏见和AI决策的透明度等问题,并提出可能的解决方案。
list如何将自己实体的字段值赋给另外一个List实体中的相同字段
list如何将自己实体的字段值赋给另外一个List实体中的相同字段
532 0