zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    react redux
    react 路由 react-router@3.2.1
    react 生命周期
    重载 UINavigationController 设置左侧返回按钮的文字为图片
    使用 SQLiteManager 操作 sqlite3 数据库
    使用 DES 算法对数据加密
    使用 Reachability 获取网络状态
    NSPredicate 的使用(持续更新)
    使用开源库 SDWebImage 异步下载缓存图片(持续更新)
    Grand Central Dispatch (GCD)
  • 原文地址:https://www.cnblogs.com/breg/p/3242563.html
Copyright © 2011-2022 走看看