006_FastDFS文件上传

1. 文件上传流程图

2. 选择tracker server: 当集群中不止一个tracker server时, 由于tracker之间是完全对等的关系, 客户端在upload文件时可以任意选择一个trakcer。

3. 选择存储的group: 当tracker接收到upload file的请求时, 会为该文件分配一个可以存储该文件的group。支持如下选择group的规则:

3.1. Round robin, 所有的group间轮询。

3.2. Specified group, 指定某一个确定的group。

3.3. Load balance, 剩余存储空间多的group优先。

4. 选择storage server: 当选定group后, tracker会在group内选择一个storage server给客户端。支持如下选择storage的规则:

4.1. Round robin, 在group内的所有storage间轮询。

4.2. First server ordered by ip, 按ip排序。

4.3. First server ordered by priority, 按优先级排序(优先级在storage上配置)。

5. 选择storage path: 当分配好storage server后, 客户端将向storage发送写文件请求, storage将会为文件分配一个数据存储目录, 支持如下规则:

5.1. Round robin,多个存储目录间轮询。

5.2. 剩余存储空间最多的优先。

6. 生成Fileid: 选定存储目录之后, storage会为文件生一个Fileid。规则:

6.1. 由storage server ip、文件创建时间、文件大小、文件crc32和一个随机数拼接而成, 然后将这个二进制串进行base64编码, 转换为可打印的字符串。

7. 选择两级目录: 每个存储目录下有两级256*256的子目录,storage会按文件fileid进行两次hash(猜测), 路由到其中一个子目录, 然后将文件以fileid为文件名存储到该子目录下。

8. 客户端upload file成功后, 会拿到一个storage生成的文件名, 接下来客户端根据这个文件名即可访问到该文件。

`ngx_http_fastdfs_module.so` 是 FastDFS 与 Nginx 结合的模块,用于让 Nginx 服务器能够访问 FastDFS 文件系统。 ### 功能 `ngx_http_fastdfs_module.so` 模块主要功能是提供 Nginx 服务器对 FastDFS 文件系统的访问能力,使得 Nginx 可以处理来自客户端的文件访问请求,并将这些请求转发到 FastDFS 存储服务器上,实现文件的高效存储和快速访问 [^3]。 ### 安装配置 1. **配置 Nginx 添加模块** 在 Nginx 源码目录下执行配置命令,添加 `fastdfs-nginx-module` 模块: ```bash [root@localhost nginx-1.18.0]# ./configure --add-module=/opt/fastdfs-nginx-module_v1.16/src/ ``` 这样在编译 Nginx 时就会包含 `ngx_http_fastdfs_module.so` 模块 [^1]。 2. **修改相关文件内容** 对部分文件进行修改,修改后的内容如下: ```bash ngx_addon_name=ngx_http_fastdfs_module if test -n "${ngx_module_link}"; then ngx_module_type=HTTP ngx_module_name=$ngx_addon_name ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/" ngx_module_libs="-lfastcommon -lfdfsclient" ngx_module_srcs="$ngx_addon_dir/ngx_http_fastdfs_module.c" ngx_module_deps= CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'" . auto/module else HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module" NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c" CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/" CORE_LIBS="$CORE_LIBS -lfastcommon -lfdfsclient" CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'" fi ``` 这些配置确保模块能够正确链接和使用 FastDFS 的库和头文件 [^2]。 3. **处理可能出现的错误** 在重新编译 Nginx 安装 `fastdfs-nginx-module` 时可能会出现错误,如找不到 `fdfs_define.h` 文件。另外,有时需要添加软链接来解决库文件找不到的问题: ```bash sudo ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so sudo ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so ``` 添加软链接后再启动 Nginx: ```bash lxj@Lenovo:/opt/nginx/sbin$ ./nginx ``` ### 使用方法 配置好并启动 Nginx 后,即可通过 Nginx 访问 FastDFS 文件系统中的文件。用户可以通过浏览器或其他客户端工具向 Nginx 服务器发送文件访问请求,Nginx 会借助 `ngx_http_fastdfs_module.so` 模块将请求转发到 FastDFS 存储服务器上,实现文件的上传、下载等操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值