呕心沥血 整理 出FastDfs图片服务器 的 搭建

FastDfs图片服务器 的 搭建和介绍

1.什么是fastDFS

1.1.1fastDSF介绍

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

这里只演示单台机器的安装 也就是将tracker storage nginx 整合到一个服务器

为什么要使用fastDFS呢?

NFS、GFS都是通用的分布式文件系统,通用的分布式文件系统的优点的是开发体验好,但是系统复杂
性高、性能一般,而专用的分布式文件系统虽然开发体验性差,但是系统复杂性低并且性能高。fastDFS非常适合

存储图片等那些小文件,fastDFS不对文件进行分块,所以它就没有分块合并的开销,fastDFS网络通信采用 socket,通信速度很快。

1.1.2fastDSF工作原理

fastDSF架构

FastDFS架构包括 Tracker server和Storageserver。客户端请求Tracker server进行文件上传、下载,通过Tracker
server调度最终由Storage server完成文件上传和下载

在这里插入图片描述

1)Tracker

Tracker Server作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提
供文件上传服务。可以将tracker称为追踪服务器或调度服务器。
FastDFS集群中的Tracker server可以有多台,Tracker server之间是相互平等关系同时提供服务,Tracker server
不存在单点故障。客户端请求Tracker server采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。

2)Storage

Storage Server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己
的文件系统而是使用操作系统的文件系统来管理文件。可以将storage称为存储服务器。

Storage集群采用了分组存储方式。storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容
量之和。一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系,不同组的Storage server
之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步,从而保证同组内每个storage上的文件
完全一致的。一个组的存储容量为该组内的存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最
好是一致的。
采用分组存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组也可以由
tracker进行调度选择。一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向
扩容)。当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。

3)Storage状态收集

Storage server会连接集群中所有的Tracker server,定时向他们报告自己的状态,包括磁盘剩余空间、文件同步
状况、文件上传下载次数等统计信息。

1.1.4文件上传流程

在这里插入图片描述

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

在这里插入图片描述

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

虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

1.1.5文件下载流程

在这里插入图片描述

tracker根据请求的文件路径即文件ID 来快速定义文件。
比如请求下边的文件:
在这里插入图片描述

1.通过组名tracker能够很快的定位到客户端需要访问的存储服务器组是group1,并选择合适的存储服务器提供客
户端访问。
2.存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到
客户端需要访问的文件。

FastDfs服务器的搭建

这里只演示单台机器的安装 也就是将tracker storage nginx 整合到一个服务器

FastDfs—tracker 的安装

1.2.1 下载
tracker 和 storage 使用相同的安装包,下载地址:
https://github.com/happyfish100/FastDFS
本教程下载:FastDFS_v5.05.tar.gz

1.2.2 FastDFS环境的安装

FastDFS 是 C 语言开发,建议在 linux 上运行,本教程使用 Centos7 作为安
装环境。
安装 FastDFS 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果
没有 gcc 环境,需要安装 gcc:yum install gcc-c++

1.2.3 安装 libevent

FastDFS 依赖 libevent 库,需要安装:
yum -y install libevent

1.2.4 安装 libfastcommon

libfastcommon 是 FastDFS 官方提供的,libfastcommon 包含了 FastDFS 运行所需
要的一些基础库。

安装包自己准备 获取去网上下载

将 libfastcommonV1.0.7.tar.gz 拷贝至/usr/local/下
cd /usr/local
tar -zxvf libfastcommonV1.0.7.tar.gz
cd libfastcommon-1.0.7
./make.sh
./make.sh install

注意:libfastcommon 安装好后会自动将库文件拷贝至/usr/lib64 下,由于 FastDFS 程
序引用 usr/lib 目录所以需要将/usr/lib64 下的库文件拷贝至/usr/lib 下。
要拷贝的文件如下:

在这里插入图片描述

1.2.5 tracker 编译安装

将 FastDFS_v5.05.tar.gz 拷贝至/usr/local/下
tar -zxvf FastDFS_v5.05.tar.gz
cd FastDFS
./make.sh 编译
./make.sh install 安装

安装成功将安装目录下的 conf 下的文件拷贝到/etc/fdfs/下。

1.2.6 配置

安装成功后进入/etc/fdfs 目录:

新建一个copy文件夹 将所有配置文件copy一份放进去防止改坏了不知怎么恢复

修改 tracker.conf

建议下载到windows平台上用高级记事本进行编辑vi 编辑器看起来眼疼 花到看不见

base_path=/home/yuqing/FastDFS
改为:
base_path=/home/FastDFS

port=22122 端口号可以改 但是要 保持 一致所有用到tracker 的地方都得是这个端口号

建议不改默认端口号22122配置 http 端口:

http.server_port=80

1.2.7启动tracker

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

启动的日志显示先停止 某某 进程 再启动,如下图

在这里插入图片描述

1.3 FastDFS–storage 安装

这里也只安装一台和Tracker安装在同一台机器

因为是同一台机器,并且tracker和Storage是同一个安装包所以

这里直接进行配置

如果不是同一台机器

那么则需要先想安装tracker一样安装 环境安装libevent安装libfastcommon,然后编译安装FastDFS

so 我们直接进行配置

1.3.2 配置Storage

进入/etc/fdfs 目录:

修改 storage.conf

base_path=/home/yuqing/FastDFS 改为:base_path=/home/ fastdfs

store_path0=/home/yuqing/FastDFS
改为:store_path0=/home/fastdfs/fdfs_storage

#如果有多个挂载磁盘则定义多个 store_path,如下
#store_path1=…
#store_path2=…

#配置 tracker 服务器:IP 这个不要照抄 是你自己的tracker 的ip和端口号

tracker_server=192.168.101.3:22122
#如果有多个则配置多个 tracker
tracker_server=192.168.101.4:22122

#配置 http 端口
http.server_port=80

一定注意 配置文件不要写错不要写错 写错了 启动的时候命令会卡在那不动

要是命令真卡在那不动了可以按ctrlc 退出来然后去检查log文件看哪里错了

log文件在/home/fdfs/logs里

1.3.5 启动

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

启动的样子和tracker一样

1.4 上传图片测试

1.4.1 通过 fdfs_test 程序

FastDFS 安装成功可通过/usr/bin/fdfs_test 程序来测试上传、下载等操作。

修改/etc/fdfs/client.conf

base_path=/home/fastdfs
tracker_server=192.168.101.3:22122
tracker_server=192.168.101.4:22122

注意改成你自己的 ip和端口号

使用格式:

/usr/bin/fdfs_test 客户端配置文件地址 upload 上传文件

比如将/home 下的图片上传到 FastDFS 中:
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/tomcat.png

打印如下日志:

This is FastDFS client test program v5.05
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.
[2015-05-18 02:07:10] DEBUG - base_path=/home/FastDFS, 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
tracker_query_storage_store_list_without_group: 
server 1. group_name=, ip_addr=192.168.101.5, port=23000
server 2. group_name=, ip_addr=192.168.101.6, port=23000
group_name=group1, ip_addr=192.168.101.5, port=23000
storage_upload_by_filename
group_name=group1, 
remote_filename=M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485.png
source ip address: 192.168.101.5
file timestamp=2015-05-18 02:07:11
file size=5103file crc32=3979441827
example file url: 
http://192.168.101.5/group1/M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485.
png
storage_upload_slave_by_filename
group_name=group1, 
remote_filename=M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png
source ip address: 192.168.101.5
file timestamp=2015-05-18 02:07:11
file size=5103
file crc32=3979441827
example file url: 
http://192.168.101.5/group1/M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_
big.png

http://192.168.101.5/group1/M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_
big.png 就是文件的下载路径。
对应 storage 服务器上的
/home/fastdfs/fdfs_storage/data/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_b
ig.png 文件

由于现在还没有和 nginx 整合无法使用 http 下载

1.5 FastDFS 和 nginx 整合

1.5.1 nginx 代理

单独安装 nginx 代理服务,它的作用是代理访问 storage 上的文件,实现负载均衡。
nginx 的安装细节参考 nginx 文档,这里使用单机 nginx,也可以使用两台 nginx 组成高
可用或者采用 lvs+nginx 访问 Storage 上的 nginx

1.5.2安装FastDFS-nginx-module

安装文件自己去下载

将 FastDFS-nginx-module_v1.16.tar.gz 传 至 fastDFS 的 storage 服 务 器 的
/usr/local/下(这里是本机的这个地方),执行如下命令:
cd /usr/local
tar -zxvf FastDFS-nginx-module_v1.16.tar.gz
cd FastDFS-nginx-module/src

修改 config 将里面的所有/usr/local/路径改为/usr/

将 fastdfs-nginx-module/src 下的 mod_fastdfs.conf 拷贝至/etc/fdfs/下
cp mod_fastdfs.conf /etc/fdfs/

(注意这里路径上的大小写还可能会是这样 ==》 FastDFS-nginx-module/src mod_FastDFS ) 注意解压出来是什么样就是什么样自己看着改

并修改 mod_fastdfs.conf 的内容:

最好下载到windows编辑后上传覆盖 说过了vi编辑器看不清容易出错

base_path=/home/FastDFS

tracker_server=192.168.101.3:22122
tracker_server=192.168.101.4:22122
url_have_group_name=true #url 中包含 group 名称
store_path0=/home/fastdfs/fdfs_storage #指定文件存储路径
#如果有多个
将 libfdfsclient.so 拷贝至/usr/lib 下
cp /usr/lib64/libfdfsclient.so /usr/lib/
创建 nginx/client 目录
mkdir -p /var/temp/nginx/client

1.5.2.2 nginx 安装

将 nginx-1.8.0.tar.gz 拷贝到/usr/local 下
解压 nginx-1.8.0.tar.gz
进入 nginx-1.8.0 目录,执行如下配置命令:(注意fastdfs的大小写要和安装FastDFS-nginx-module时生成的目录一致)

./configure \--add-module=/usr/local/fastdfs-nginx-module/src

表示添加 fastdfs-nginx-module 模块

有网上说是如下配置

./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=/usr/local/fastdfs-nginx-module/src

注意这里只是对比 不是叫运行这个代码

但是我运行之后 没有log文件并且 启动之后 无法访问storage 访问链接一直转圈 并且nginx没有log文件夹 根本看不看不出哪里错了,经过我的试错,发现,只添加最后一项配置也是可以的 所以

继续正文

之后就

make

make install

然后 /usr/local/下就会生成一个nginx文件夹

cd /usr/local/nginx/sbin

然后先启动nginx 看是否能访问nginx主页面 如果访问到那么成功一大半了

访问不到 就删了nginx 文件夹删之前 先停止进程不然 你会后悔的

然后重新进行1.5.2.2 nginx 安装 这一步

当我们成功访问了nginx主页之后我们就可以进行接下来的配置了

1.5.2.3 nginx 配置文件

cd /usr/local/nginx/conf

如果你是Storage群组那么最好创建一个单独的配置文件

nginx-fdfs.conf

#storage 群 group1 组
upstream storage_server_group1{
 server 192.168.101.5:80 weight=10;
server 192.168.101.6:80 weight=10;
 }
 #storage 群 group2 组
upstream storage_server_group2{
 server 192.168.101.7:80 weight=10;
server 192.168.101.8:80 weight=10;
 }


server {
listen 80;
server_name ccc.test.com;
location /group1{
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://storage_server_group1;
}
location /group2{
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://storage_server_group2;
}
}

说明:
server_name 指定本机 ip
location /group1/M00/:group1 为 nginx 服务 FastDFS 的分组名称,M00 是 FastDFS
自动生成编号,对应 store_path0=/home/FastDFS/fdfs_storage,如果 FastDFS 定义
store_path1,这里就是 M01

然后启动nginx的时候 指定配置文件运行

/usr/local/nginx/sbin/nginx -c nginx-fdfs.conf 

如果不是 请继续

如果不是群组 只是本机 那么只需修改 nginx.conf

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;
        server_name  47.97.163.171;#这里是你的ip

        location /group1/M00/ {
            root  /home/FastDFS/fdfs_storage/data;
            ngx_fastdfs_module;#注意大小写
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

1.5.3 测试

到这里就该启动见证奇迹的时候了

启动nginx 用你测试生成的文件id在浏览器访问 访问到图片就成功了 访问不到 那你还得研究研究

   location /group1/M00/ {
            root  /home/FastDFS/fdfs_storage/data;
            ngx_fastdfs_module;#注意大小写
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

1.5.3 测试

到这里就该启动见证奇迹的时候了

启动nginx 用你测试生成的文件id在浏览器访问 访问到图片就成功了 访问不到 那你还得研究研究

告辞!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值