博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图片服务器(FastDFS)的搭建
阅读量:4537 次
发布时间:2019-06-08

本文共 12617 字,大约阅读时间需要 42 分钟。

1.1 什么是FastDFS

FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

1.2 文件上传流程

1.3 文件下载流程

1.4 上传文件的文件名

客户端上传文件后存储服务器文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。

n 虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。

n 数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。

文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

1.5 FastDFS搭建

可以使用一台虚拟机来模拟,只有一个Tracker、一个Storage服务。

配置nginx访问图片。

1.5.1 搭建步骤

第一步:把fastDFS都上传到linux系统。

第二步:安装FastDFS之前,先安装libevent工具包。

yum -y install libevent

第三步:安装libfastcommonV1.0.7工具包。

1、解压缩

2、./make.sh

3、./make.sh install

4、/usr/lib64/libfastcommon.so文件向/usr/lib/下复制一份

第四步:安装Tracker服务。

1、解压缩

2、./make.sh

3、./make.sh install

安装后在/usr/bin/目录下有以fdfs开头的文件都是编译出来的。

配置文件都放到/etc/fdfs文件夹

4、/root/FastDFS/conf目录下的所有的配置文件都复制到/etc/fdfs下。

5、配置tracker服务。修改/root/FastDFS/conf/tracker.conf文件。

6、启动tracker/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

重启使用命令:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

第五步:安装storage服务。

1、如果是在不同的服务器安装,第四步的1~4需要重新执行。

2、配置storage服务。修改/root/FastDFS/conf/storage.conf文件

 

3、启动storage服务。

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

第六步:测试服务。

1、修改配置文件/etc/fdfs/client.conf

2、测试

/usr/bin/fdfs_test /etc/fdfs/client.conf upload anti-steal.jpg

第七步:搭建nginx提供http服务。

可以使用官方提供的nginx插件。要使用nginx插件需要重新编译。

fastdfs-nginx-module_v1.16.tar.gz

1、解压插件压缩包

2、修改/root/fastdfs-nginx-module/src/config文件,把其中的local去掉。

 

3、nginx重新config

./configure \

--prefix=/usr/local/nginx \

--pid-path=/var/run/nginx/nginx.pid \

--lock-path=/var/lock/nginx.lock \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--with-http_gzip_static_module \

--http-client-body-temp-path=/var/temp/nginx/client \

--http-proxy-temp-path=/var/temp/nginx/proxy \

--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \

--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \

--http-scgi-temp-path=/var/temp/nginx/scgi \

--add-module=/root/fastdfs-nginx-module/src

2、make

3、make install

4、/root/fastdfs-nginx-module/src/mod_fastdfs.conf文件复制到/etc/fdfs目录下。编辑:

 

 

1、nginx的配置

nginx的配置文件中添加一个Server

server {

        listen       80;

        server_name  192.168.101.3;

 

        location /group1/M00/{

                #root /home/FastDFS/fdfs_storage/data;

                ngx_fastdfs_module;

        }

}

2、libfdfsclient.so拷贝至/usr/lib

cp /usr/lib64/libfdfsclient.so /usr/lib/

3、启动nginx

nginx 400 Bad Request,详情可参考以下链接:

[root@web2 ~]# vim /etc/fdfs/mod_fastdfs.conf url_have_group_name = false 改为 true      #关于啥意思,配置文件中有解释
解决方法

 http://www.it165.net/admin/html/201308/1628.html

1 fdfs_upload_file   2 Usage: fdfs_upload_file 
[storage_ip:port] [store_path_index] 3 4 上传文件: 5 [root@gmxfjr-dev17 ~]# fdfs_upload_file /etc/fdfs/client.conf /etc/passwd 6 group1/M00/00/00/Co91HFlbq2WAQvMDAAAImyi5gXI5136722 7 8 下载文件: 9 [root@gmxfjr-dev17 ~]# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/Co91HFlbq2WAQvMDAAAImyi5gXI5136722 10 11 显示文件信息 12 [root@gmxfjr-dev17 ~]# fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/Co91HFlbq2WAQvMDAAAImyi5gXI5136722 13 source storage id: 0 14 source ip address: 10.143.117.28 15 file create timestamp: 2017-07-04 22:51:17 16 file size: 2203 17 file crc32: 683245938 (0x28B98172) 18 19 删除文件: 20 [root@gmxfjr-dev17 ~]# fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/Co91HFlbq2WAQvMDAAAImyi5gXI5136722 21 22 文件追加 23 [root@gmxfjr-dev17 ~]# echo "hello" >> append.txt 24 [root@gmxfjr-dev17 ~]# echo "world" >> append2.txt 25 [root@gmxfjr-dev17 ~]# fdfs_upload_appender /etc/fdfs/client.conf append.txt 26 group1/M00/00/00/Co91G1lbrbGEL3ShAAAAAHcc3SA110.txt 27 [root@gmxfjr-dev17 ~]# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/Co91G1lbrbGEL3ShAAAAAHcc3SA110.txt 28 [root@gmxfjr-dev17 ~]# cat Co91G1lbrbGEL3ShAAAAAHcc3SA110.txt 29 hello 30 [root@gmxfjr-dev17 ~]# fdfs_append_file /etc/fdfs/client.conf group1/M00/00/00/Co91G1lbrbGEL3ShAAAAAHcc3SA110.txt append2.txt 31 [root@gmxfjr-dev17 ~]# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/Co91G1lbrbGEL3ShAAAAAHcc3SA110.txt 32 [root@gmxfjr-dev17 ~]# cat Co91G1lbrbGEL3ShAAAAAHcc3SA110.txt 33 hello 34 world 35 [root@gmxfjr-dev17 ~]# 36 37 健康状况 38 [root@gmxfjr-dev17 ~]# fdfs_monitor 39 Usage: fdfs_monitor
[-h
] [list|delete|set_trunk_server
[storage_id]] 40 [root@gmxfjr-dev17 ~]# fdfs_monitor /etc/fdfs/client.conf 41 [2017-07-04 23:06:07] DEBUG - base_path=/data/fastdfs/fastdfs/client, connect_timeout=30, network_timeout=60, tracker_server_count=2, 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 42 43 server_count=2, server_index=1 44 45 tracker server is 10.143.117.28:22122 46 47 group count: 1 48 49 Group 1: 50 group name = group1 51 disk total space = 80505 MB 52 disk free space = 54857 MB 53 trunk free space = 0 MB 54 storage server count = 2 55 active server count = 2 56 storage server port = 23000 57 storage HTTP port = 8888 58 store path count = 1 59 subdir count per path = 256 60 current write server index = 0 61 current trunk file id = 0 62 63 Storage 1: 64 id = 10.143.117.27 65 ip_addr = 10.143.117.27 (localhost) ACTIVE 66 http domain = 67 version = 5.08 68 join time = 2017-06-25 10:40:23 69 up time = 2017-06-25 22:26:21 70 total storage = 80505 MB 71 free storage = 54857 MB 72 upload priority = 10 73 store_path_count = 1 74 subdir_count_per_path = 256 75 storage_port = 23000 76 storage_http_port = 8888 77 current_write_path = 0 78 source storage id = 79 if_trunk_server = 0 80 connection.alloc_count = 256 81 connection.current_count = 1 82 connection.max_count = 2 83 total_upload_count = 8 84 success_upload_count = 8 85 total_append_count = 1 86 success_append_count = 1 87 total_modify_count = 0 88 success_modify_count = 0 89 total_truncate_count = 0 90 success_truncate_count = 0 91 total_set_meta_count = 6 92 success_set_meta_count = 6 93 total_delete_count = 1 94 success_delete_count = 1 95 total_download_count = 3 96 success_download_count = 3 97 total_get_meta_count = 0 98 success_get_meta_count = 0 99 total_create_link_count = 0100 success_create_link_count = 0101 total_delete_link_count = 0102 success_delete_link_count = 0103 total_upload_bytes = 102166104 success_upload_bytes = 102166105 total_append_bytes = 6106 success_append_bytes = 6107 total_modify_bytes = 0108 success_modify_bytes = 0109 stotal_download_bytes = 1994110 success_download_bytes = 1994111 total_sync_in_bytes = 2215112 success_sync_in_bytes = 2215113 total_sync_out_bytes = 0114 success_sync_out_bytes = 0115 total_file_open_count = 15116 success_file_open_count = 15117 total_file_read_count = 3118 success_file_read_count = 3119 total_file_write_count = 12120 success_file_write_count = 12121 last_heart_beat_time = 2017-07-04 23:05:56122 last_source_update = 2017-07-04 23:03:29123 last_sync_update = 2017-07-04 22:59:48124 last_synced_timestamp = 2017-07-04 22:59:40 (0s delay)125 Storage 2:126 id = 10.143.117.28127 ip_addr = 10.143.117.28 ACTIVE128 http domain = 129 version = 5.08130 join time = 2017-06-25 22:22:24131 up time = 2017-06-25 23:00:18132 total storage = 80505 MB133 free storage = 70629 MB134 upload priority = 10135 store_path_count = 1136 subdir_count_per_path = 256137 storage_port = 23000138 storage_http_port = 8888139 current_write_path = 0140 source storage id = 10.143.117.27141 if_trunk_server = 0142 connection.alloc_count = 256143 connection.current_count = 1144 connection.max_count = 2145 total_upload_count = 2146 success_upload_count = 2147 total_append_count = 1148 success_append_count = 1149 total_modify_count = 0150 success_modify_count = 0151 total_truncate_count = 0152 success_truncate_count = 0153 total_set_meta_count = 0154 success_set_meta_count = 0155 total_delete_count = 1156 success_delete_count = 1157 total_download_count = 4158 success_download_count = 4159 total_get_meta_count = 0160 success_get_meta_count = 0161 total_create_link_count = 0162 success_create_link_count = 0163 total_delete_link_count = 0164 success_delete_link_count = 0165 total_upload_bytes = 2209166 success_upload_bytes = 2209167 total_append_bytes = 6168 success_append_bytes = 6169 total_modify_bytes = 0170 success_modify_bytes = 0171 stotal_download_bytes = 4197172 success_download_bytes = 4197173 total_sync_in_bytes = 127563174 success_sync_in_bytes = 102466175 total_sync_out_bytes = 0176 success_sync_out_bytes = 0177 total_file_open_count = 22178 success_file_open_count = 22179 total_file_read_count = 4180 success_file_read_count = 4181 total_file_write_count = 18182 success_file_write_count = 18183 last_heart_beat_time = 2017-07-04 23:05:54184 last_source_update = 2017-07-04 22:59:40185 last_sync_update = 2017-07-04 23:03:30186 last_synced_timestamp = 2017-07-04 23:03:30 (-1s delay)187 [root@gmxfjr-dev17 ~]#188 摘除storage:189 1)先删除节点190 [root@gmxfjr-dev17 ~]# fdfs_monitor /etc/fdfs/client.conf delete group1 10.143.117.28191 [2017-07-04 23:09:06] DEBUG - base_path=/data/fastdfs/fastdfs/client, connect_timeout=30, network_timeout=60, tracker_server_count=2, 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: 0192 193 server_count=2, server_index=0194 195 tracker server is 10.143.117.27:22122196 197 delete storage server group1::10.143.117.28 fail, error no: 16, error info: Device or resource busy198 2)停止服务199 [root@gmxfjr-dev18 ~]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop200 waiting for pid [10500] exit ...201 pid [10500] exit.202 [root@gmxfjr-dev18 ~]# 203 204 last_synced_timestamp = 2017-07-04 22:59:40 (0s delay)205 Storage 2:206 id = 10.143.117.28207 ip_addr = 10.143.117.28 OFFLINE208 http domain = 209 version = 5.08210 join time = 2017-06-25 22:22:24211 up time = 212 total storage = 80505 MB
client基本使用命令

 

整合php:

[root@gmxfjr-dev17 php-5.6.11]# yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libdn libdn-devel openssl openssl-devel openssldap openldap-devel nss_ldap openldap-clients

/data/fastdfs/FastDFS/php_client

测试php和fastdfs的融合

/usr/local/php/bin/php fastdfs_test.php /data/fastdfs/FastDFS/php_client

 

查看php安装路径:

[root@gmxfjr-dev17 php_client]# /usr/local/php/bin/php -i |grep php.ini
Configuration File (php.ini) Path => /usr/local/php/lib
Loaded Configuration File => /usr/local/php/etc/php.ini
PHP Warning: Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in Unknown on line 0

学习代码地址:

https://github.com/happyfish100

fastdfs+nginx的整合
https://github.com/happyfish100/fastdfs-nginx-module

Nginx整合

[root@gmxfjr-dev17 nginx-1.8.1]# ./configure --prefix=/usr/local/nginx1.8 --user=www --group=www --with-http_ssl_module --with=pcre=/usr/local/src/pcre-8.36 --add-module=/usr/local/src/fastdfs-nginx-module/src/

转载于:https://www.cnblogs.com/liyongsan/p/7076875.html

你可能感兴趣的文章
Android Studio 智能感知无效
查看>>
javascript 日常
查看>>
让插件帮你优化代码
查看>>
ng 动态的生成option。
查看>>
ORACLE-12C-RAC INSTALL
查看>>
自定义引用类型的Enumerable.Union调用(原创)
查看>>
抽象类实例
查看>>
react context prop-types
查看>>
Java之路——Java初接触
查看>>
2018.12.27学习JavaScript
查看>>
Cocoa编程开发者手册
查看>>
C++框架_之Qt的开始部分_概述_安装_创建项目_快捷键等一系列注意细节
查看>>
理工之 A+B Problem III
查看>>
SalesForce自定义按钮(javascript执行),点击按钮更新Filed
查看>>
软件工程第一次作业
查看>>
【Android 界面效果24】Intent和PendingIntent的区别
查看>>
node学习之搭建服务器并加装静态资源
查看>>
android 按menu键解锁功能的开关
查看>>
wpf 自定义窗口,最大化时覆盖任务栏解决方案
查看>>
Linux 下的dd命令使用详解
查看>>