分布式存储fastdfs

Posted on Posted in linux
Tips: 本文创建于2016年4月6日,已超过 2 年,内容或图片可能已经失效!

环境:centos 6.5

  1. tracker:192.168.36.139  
  2. storage:192.168.36.127  

用到的包

  1. fastdfs-nginx-module_v1.16.tar.gz  17,510   
  2. FastDFS_v5.08.tar.gz              344,620   
  3. libevent-2.0.22-stable.tar.gz     854,987   
  4. libfastcommon-master.zip          151,079   
  5. nginx-1.8.1.tar.gz                833,473   
  6. ngx_cache_purge-2.3.tar.gz         12,248   

1、文件夹初始化

tracker所需的base_path: /opt/fastdfs_tracker
storage所需的日志目录: /opt/fastdfs_storage_info。 备注: 这个目录是用来存储storage之间同步文件等日志的
storage所需的存储文件目录: /opt/fastdfs_storage_data。备注: 这个目录是用来存储文件的

2、安装libfastcommon

  1. unzip libfastcommon-master.zip  
  2. cd libfastcommon-master  
  3. ./make.sh && ./make.sh install  
  4.   
  5. #上述安装的路径在/usr/lib64/,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以需要创建软连接如下:   
  6.   
  7. ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so  
  8. ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so  
  9. ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so  
  10. ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so  

3、安装fastdfs

  1. tar zxvf FastDFS_v5.08.tar.gz   
  2. cd FastDFS  
  3. ./make.sh   
  4. ./make.sh install  

过程中没有报错,并且打开 /etc/fdfs 这个目录发现有配置文件存在,就说明安装成功了

4、配置tracker

  1. cd /etc/fdfs  
  2. cp tracker.conf.sample tracker.conf  
  3. vim tracker.conf  
  4. base_path=/opt/fastdfs_tracker   #设置tracker的数据文件和日志目录(预先创建)  

5、启动

  1. /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart  

6、检测

  1. [root@c1 fdfs]# netstat -lnput | grep fdfs  
  2. tcp        0      0 0.0.0.0:22122               0.0.0.0:*                   LISTEN      33524/fdfs_trackerd  
  3. [root@c1 fdfs]# tail -100f /opt/fastdfs_tracker/logs/trackerd.log  

7、配置storage

  1. [root@c2 fdfs]# cp storage.conf.sample storage.conf  
  2. [root@c2 fdfs]# vim storage.conf  
  3. group_name=group1  
  4. port=23001     #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致  
  5. base_path=/opt/fastdfs_storage_info    #设置storage的日志目录(需预先创建)  
  6. store_path_count=1   #存储路径个数,需要和store_path个数匹配  
  7. store_path0=/opt/fastdfs_storage_data   #存储路径  
  8. tracker_server=192.168.36.139:22122 #tracker服务器的IP地址和端口号  

8、启动storage

  1. [root@c2 fdfs]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart  

9、检测

  1. [root@c2 fdfs]# netstat -lnput | grep fdfs  
  2. tcp        0      0 0.0.0.0:23001               0.0.0.0:*                   LISTEN      77731/fdfs_storaged   
  3. [root@c2 fdfs]# tail -100f /opt/fastdfs_storage_info/logs/storaged.log  

10、查看状态

  1. [root@c2 fdfs]# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf  
  2. [2016-03-22 03:54:33] DEBUG - base_path=/opt/fastdfs_storage_info, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0  
  3.   
  4. server_count=1, server_index=0  
  5.   
  6. tracker server is 192.168.36.139:22122  
  7.   
  8. group count: 1  
  9.   
  10. Group 1:  
  11. group name = group1  
  12. disk total space = 17709 MB  
  13. disk free space = 14114 MB  
  14. trunk free space = 0 MB  
  15. storage server count = 1  
  16. active server count = 1  
  17. storage server port = 23001  
  18. storage HTTP port = 8888  
  19. store path count = 1  
  20. subdir count per path = 256  
  21. current write server index = 0  
  22. current trunk file id = 0  
  23.   
  24.     Storage 1:  
  25.         id = 192.168.36.127  
  26.         ip_addr = 192.168.36.127 (bogon)  ACTIVE  
  27.         http domain =   
  28.         version = 5.08  
  29.         join time = 2016-03-22 03:53:14  
  30.         up time = 2016-03-22 03:53:14  
  31.         total storage = 17709 MB  
  32.         free storage = 14114 MB  
  33.         upload priority = 10  
  34.         store_path_count = 1  
  35.         subdir_count_per_path = 256  
  36.         storage_port = 23001  
  37.         storage_http_port = 8888  
  38.         current_write_path = 0  
  39.         source storage id =   
  40.         if_trunk_server = 0  
  41.         connection.alloc_count = 256  
  42.         connection.current_count = 0  
  43.         connection.max_count = 0  
  44.         total_upload_count = 0  
  45.         success_upload_count = 0  
  46.         total_append_count = 0  
  47.         success_append_count = 0  
  48.         total_modify_count = 0  
  49.         success_modify_count = 0  
  50.         total_truncate_count = 0  
  51.         success_truncate_count = 0  
  52.         total_set_meta_count = 0  
  53.         success_set_meta_count = 0  
  54.         total_delete_count = 0  
  55.         success_delete_count = 0  
  56.         total_download_count = 0  
  57.         success_download_count = 0  
  58.         total_get_meta_count = 0  
  59.         success_get_meta_count = 0  
  60.         total_create_link_count = 0  
  61.         success_create_link_count = 0  
  62.         total_delete_link_count = 0  
  63.         success_delete_link_count = 0  
  64.         total_upload_bytes = 0  
  65.         success_upload_bytes = 0  
  66.         total_append_bytes = 0  
  67.         success_append_bytes = 0  
  68.         total_modify_bytes = 0  
  69.         success_modify_bytes = 0  
  70.         stotal_download_bytes = 0  
  71.         success_download_bytes = 0  
  72.         total_sync_in_bytes = 0  
  73.         success_sync_in_bytes = 0  
  74.         total_sync_out_bytes = 0  
  75.         success_sync_out_bytes = 0  
  76.         total_file_open_count = 0  
  77.         success_file_open_count = 0  
  78.         total_file_read_count = 0  
  79.         success_file_read_count = 0  
  80.         total_file_write_count = 0  
  81.         success_file_write_count = 0  
  82.         last_heart_beat_time = 2016-03-22 03:54:14  
  83.         last_source_update = 1970-01-01 08:00:00  
  84.         last_sync_update = 1970-01-01 08:00:00  
  85.         last_synced_timestamp = 1970-01-01 08:00:00   

##############################################################################

storage中安装nginx,主要是为了为提供http的访问服务,同时解决group中storage服务器的同步延迟问题。而tracker中安装nginx,主要是为了提供http访问的反向代理、负载均衡以及缓存服务

11、在storage中安装nginx

  1. tar zxvf nginx-1.8.1.tar.gz   
  2. tar zxvf fastdfs-nginx-module_v1.16.tar.gz  
  3. [root@c2 fastdfs-nginx-module]# vim src/config  
  4. #将路径中local全部去掉,变为CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"  
  5. CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"  
  6. [root@c2 nginx-1.8.1]# ./configure --prefix=/usr/local/nginx --add-module=/root/pkg/fastdfs-nginx-module/src  
  7.   
  8. [root@c2 nginx-1.8.1]# cd /usr/local/nginx/conf/  
  9. [root@c2 conf]# vim nginx.conf  
  10. #在server中增加  
  11. lacation ~/group1/M00 {  
  12.         root /fdfs/storage/data;  
  13.         ngx_fastdfs_module;  
  14. }  
  15.   
  16. #在fastdfs中的conf目录中  
  17. [root@c2 conf]# cp -rf http.conf mime.types /etc/fdfs/  
  18.   
  19. [root@c2 fastdfs-nginx-module]# cd src/  
  20. [root@c2 src]# cp -rf mod_fastdfs.conf /etc/fdfs/  
  21.   
  22.   
  23. [root@c2 src]# vim /etc/fdfs/mod_fastdfs.conf  
  24. tracker_server=192.168.36.139:22122     #tracker服务器的IP地址以及端口号  
  25. base_path=/opt/fastdfs_storage_info     #保存日志目录  
  26. storage_server_port=23001       #storage服务器的端口号  
  27. group_name=group1       #当前服务器的group名  
  28. url_have_group_name = true  #文件url中是否有group名  
  29. store_path_count=1      #存储路径个数,需要和store_path个数匹配  
  30. store_path0=/opt/fastdfs_storage_data    #存储路径  
  31. http.need_find_content_type=true     #从文件扩展名查找文件类型(nginx时为true)  注意:这个配置网上一般都会列出,但是在fastdfs5.05的版本中是没有的  
  32. group_count = 1     #设置组的个数  
  33.   
  34. [group1]  
  35. group_name=group1  
  36. storage_server_port=23001  
  37. store_path_count=2  
  38. store_path0=/opt/fastdfs_storage_data  
  39. store_path1=/opt/fastdfs_storage_data  

启动nginx,访问看到nginx的欢迎页面,OK

12、在tracker中安装nginx(操作文件与上一步相同,启动中的错误,参照11步)

  1. [root@c1 nginx-1.8.1]# mkdir /usr/local/nginx  
  2. # 别忘记更改11步的local  
  3. [root@c1 nginx-1.8.1]# ./configure --prefix=/usr/local/nginx --add-module=/root/pkg/fastdfs-nginx-module/src --add-module=/root/pkg/ngx_cache_purge-2.3  
  4.   
  5. [root@c1 nginx-1.8.1]# cd /usr/local/nginx/  
  6. [root@c1 nginx]# vim conf/nginx.conf  
  7.   
  8. #user  nobody;  
  9. worker_processes  1;  
  10.   
  11. #error_log  logs/error.log;  
  12. #error_log  logs/error.log  notice;  
  13. #error_log  logs/error.log  info;  
  14.   
  15. #pid        logs/nginx.pid;  
  16.   
  17.   
  18. events {  
  19.     worker_connections  1024;  
  20. }  
  21.   
  22.   
  23. http {  
  24.     include       mime.types;  
  25.     default_type  application/octet-stream;  
  26.   
  27.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
  28.     #                  '$status $body_bytes_sent "$http_referer" '  
  29.     #                  '"$http_user_agent" "$http_x_forwarded_for"';  
  30.   
  31.     #access_log  logs/access.log  main;  
  32.   
  33.     sendfile        on;  
  34.     tcp_nopush     on;  
  35.   
  36.     #keepalive_timeout  0;  
  37.     keepalive_timeout  65;  
  38.   
  39.     #gzip  on;  
  40.     server_names_hash_bucket_size 128;  
  41.     client_header_buffer_size 32k;  
  42.     large_client_header_buffers 4 32k;  
  43.   
  44.     client_max_body_size 300m;  
  45.   
  46.     proxy_redirect off;  
  47.     proxy_set_header Host $http_host;  
  48.     proxy_set_header X-Real-IP $remote_addr;  
  49.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
  50.   
  51.     proxy_connect_timeout 90;  
  52.     proxy_send_timeout 90;  
  53.     proxy_read_timeout 90;  
  54.   
  55.     proxy_buffer_size 16k;  
  56.     proxy_buffers 4 64k;  
  57.     proxy_busy_buffers_size 128k;  
  58.     proxy_temp_file_write_size 128k;  
  59.      
  60.     proxy_cache_path /opt/cache/nginx/proxy_cache levels=1:2   
  61.     keys_zone=http-cache:500m max_size=10g inactive=30d;  
  62.     proxy_temp_path /opt/cache/nginx/proxy_cache/tmp;  
  63.   
  64.     upstream fdfs_group1 {  
  65.          server 192.168.36.127:80 weight=1 max_fails=2 fail_timeout=30s;  
  66.     }  
  67.     server {  
  68.         listen       80;  
  69.         server_name  localhost;  
  70.   
  71.         #charset koi8-r;  
  72.   
  73.         #access_log  logs/host.access.log  main;  
  74.   
  75.         location / {  
  76.   &n
    bsp;         root   html;  
  77.             index  index.html index.htm;  
  78.         }  
  79.   
  80.         #error_page  404              /404.html;  
  81.   
  82.         # redirect server error pages to the static page /50x.html  
  83.         #  
  84.         error_page   500 502 503 504  /50x.html;  
  85.         location = /50x.html {  
  86.             root   html;  
  87.         }  
  88.     location /group1/M00 {  
  89.             proxy_next_upstream http_502 http_504 error timeout invalid_header;  
  90.             proxy_cache http-cache;  
  91.             proxy_cache_valid  200 304 12h;  
  92.             proxy_cache_key $uri$is_args$args;  
  93.             proxy_pass http://fdfs_group1;  
  94.             expires 30d;  
  95.         }  
  96.     location ~/purge(/.*) {  
  97.             allow 127.0.0.1;  
  98.             allow 192.168.224.0/24;  
  99.             deny all;  
  100.             proxy_cache_purge http-cache  $1$is_args$args;  
  101.         }       
  102.         # proxy the PHP scripts to Apache listening on 127.0.0.1:80  
  103.         #  
  104.         #location ~ \.php$ {  
  105.         #    proxy_pass   http://127.0.0.1;  
  106.         #}  
  107.   
  108.         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  
  109.         #  
  110.         #location ~ \.php$ {  
  111.         #    root           html;  
  112.         #    fastcgi_pass   127.0.0.1:9000;  
  113.         #    fastcgi_index  index.php;  
  114.         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  
  115.         #    include        fastcgi_params;  
  116.         #}  
  117.   
  118.         # deny access to .htaccess files, if Apache's document root  
  119.         # concurs with nginx's one  
  120.         #  
  121.         #location ~ /\.ht {  
  122.         #    deny  all;  
  123.         #}  
  124.     }  
  125.   
  126.   
  127.     # another virtual host using mix of IP-, name-, and port-based configuration  
  128.     #  
  129.     #server {  
  130.     #    listen       8000;  
  131.     #    listen       somename:8080;  
  132.     #    server_name  somename  alias  another.alias;  
  133.   
  134.     #    location / {  
  135.     #        root   html;  
  136.     #        index  index.html index.htm;  
  137.     #    }  
  138.     #}  
  139.   
  140.   
  141.     # HTTPS server  
  142.     #  
  143.     #server {  
  144.     #    listen       443 ssl;  
  145.     #    server_name  localhost;  
  146.   
  147.     #    ssl_certificate      cert.pem;  
  148.     #    ssl_certificate_key  cert.key;  
  149.   
  150.     #    ssl_session_cache    shared:SSL:1m;  
  151.     #    ssl_session_timeout  5m;  
  152.   
  153.     #    ssl_ciphers  HIGH:!aNULL:!MD5;  
  154.     #    ssl_prefer_server_ciphers  on;  
  155.   
  156.     #    location / {  
  157.     #        root   html;  
  158.     #        index  index.html index.htm;  
  159.     #    }  
  160.     #}  
  161.   
  162. }  

13、测试

  1. [root@c2 fdfs]# cat /etc/fdfs/client.conf  
  2. base_path=/opt/fastdfs_tracker      #存放路径  
  3. tracker_server=192.168.36.139:22122 #tracker服务器IP地址和端口号  
  4.   
  5. #模拟上传文件,执行如下命令:   
  6. [root@c2 fdfs]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/tmp/fdfs.txt  
  7. group1/M00/00/00/wKgkf1bwZvCACgyRAAAAEGSXl8k511.txt  
  8.   
  9. #访问tracker或storage的url  
  10. http://192.168.36.127/group1/M00/00/00/wKgkf1bwZvCACgyRAAAAEGSXl8k511.txt  

14、安装php扩展

  1. cd /usr/src/fastdfs/FastDFS/php_client  
  2. phpize  
  3. ./configure --with-php-config=/usr/local/php/bin/php-config   
  4. make  
  5. make install  
  6. cat fastdfs_client.ini >> /usr/local/php/etc/php.ini  
» 转载请注明来源:若我若鱼 » 分布式存储fastdfs

2 thoughts on “分布式存储fastdfs

  1. Firefox 34.0 Firefox 34.0 Windows 7 x64 Edition Windows 7 x64 Edition
    Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0

    Hi mates, good post and fastidious urging commented at this
    place, I am actually enjoying by these.

Leave a Reply

Your email address will not be published. Required fields are marked *

eleven − 4 =