1. FastDFS 介绍

FastDFS是一个开源的分布式文件系统,她对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。

存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件meta data是文件属性列表,可以包含多个键值对。

FastDFS系统结构如下图所示:

跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。

为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷 的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起 到了冗余备份和负载均衡的作用。

在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。

当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。

上传文件交互过程:

  1. client询问tracker上传到的storage,不需要附加参数;
  2. tracker返回一台可用的storage;
  3. client直接和storage通讯完成文件上传。

下载文件交互过程:

  1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
  2. tracker返回一台可用的storage;
  3. client直接和storage通讯完成文件下载。

需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。

2. FastDFS单机部署

2.1 准备

系统:
CentOS7

安装包:

[root@SUNQFASTDFS01 fastdfs]# pwd
/tmp/fastdfs
[root@SUNQFASTDFS01 fastdfs]# ll
total
-rw-r--r-- root root Dec : fastdfs-nginx-module-master.zip
-rw-r--r-- root root Dec : fastdfs-master.zip
-rw-r--r-- root root Dec : libfastcommon-master.zip
-rw-r--r-- root root Aug : nginx-1.13..tar.gz
[root@SUNQFASTDFS01 fastdfs]#
 

2.2 安装依赖包和开始工具

#安装依赖软件,安装FastDFS依赖libevent库
yum -y install gcc gcc-c++ libstdc++-devel pcre-devel zlib-devel wget make libevent 
 yum -y groupinstall 'Development Tools'

2.3 安装libfastcommon

cd /tmp/fastdfs/
unzip libfastcommon-master.zip
mv libfastcommon-master /usr/local/libfastcommon
cd /usr/local/libfastcommon
./make.sh
./make.sh install <font color=red>注意在编译这个步骤会出现一个错误</font>
输入:yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget
下载缺少的东西

安装后的截图:



libfastcommon安装好后会在/usr/lib64 目录下生成  libfastcommon.so 库文件;

  

  注意:由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下。

cp libfastcommon.so /usr/lib
 

2.4 安装fastdfs

cd /tmp/fastdfs
unzip fastdfs-master.zip
mv fastdfs-master /usr/local/fastdfs
./make.sh
./make.sh install
[root@SUNQFASTDFS01 fastdfs]# ls -l /etc/fdfs/
total
-rw-r--r-- root root Jan : client.conf.sample
-rw-r--r-- root root Jan : storage.conf.sample
-rw-r--r-- root root Jan : storage_ids.conf.sample
-rw-r--r-- root root Jan : tracker.conf.sample
[root@SUNQFASTDFS01 fastdfs]#

安装好之后,在/usr/bin目录下,可以看fdfs开头的命令工具

FastDFS安装完成之后,所有配置文件在/etc/fdfs目录下,
tracker需要tracker.conf配置文件,
storage需要storage.conf配置文件。

2.5 配置tracker

cd /etc/fdfs/
cp tracker.conf.sample tracker.conf
vim tracker.conf

修改base_path(文件存储路径)为/opt/fastdfs

# the base path to store data and log files
base_path=/opt/fastdfs
# 启用配置文件
disabled=false
# 设置tracker的端口号
port=22122
# 设置tracker的数据文件和日志目录(需手动创建)
base_path=/opt/fastdfs
# 设置http端口号
http.server_port=8080

使用fdfs_trackerd /etc/fdfs/tracker.conf start尝试启动tracker

检查是否启动

[root@SUNQFASTDFS01 fdfs]# fdfs_trackerd /etc/fdfs/tracker.conf start
[root@SUNQFASTDFS01 fdfs]# ps -ef|grep tracker.conf
root 3438 1 0 17:01 ? 00:00:00 fdfs_trackerd /etc/fdfs/tracker.conf start
root 3446 2670 0 17:01 pts/0 00:00:00 grep --color=auto tracker.conf
[root@SUNQFASTDFS01 fdfs]# netstat -pln|grep fdfs
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 3438/fdfs_trackerd
[root@SUNQFASTDFS01 fdfs]# tail /opt/fastdfs/logs/trackerd.log
[2018-01-08 17:01:08] INFO - FastDFS v5.12, base_path=/opt/fastdfs, run_by_group=, run_by_user=, connect_timeout=30s, network_timeout=60s, port=22122, bind_addr=, max_connections=256, accept_threads=1, work_threads=4, min_buff_size=8192, max_buff_size=131072, store_lookup=2, store_group=, store_server=0, store_path=0, reserved_storage_space=10.00%, download_server=0, allow_ip_count=-1, sync_log_buff_interval=10s, check_active_interval=120s, thread_stack_size=64 KB, storage_ip_changed_auto_adjust=1, storage_sync_file_max_delay=86400s, storage_sync_file_max_time=300s, use_trunk_file=0, slot_min_size=256, slot_max_size=16 MB, trunk_file_size=64 MB, trunk_create_file_advance=0, trunk_create_file_time_base=02:00, trunk_create_file_interval=86400, trunk_create_file_space_threshold=20 GB, trunk_init_check_occupying=0, trunk_init_reload_from_binlog=0, trunk_compress_binlog_min_interval=0, use_storage_id=0, id_type_in_filename=ip, storage_id_count=0, rotate_error_log=0, error_log_rotate_time=00:00, rotate_error_log_size=0, log_file_keep_days=0, store_slave_file_use_link=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s

2.6 配置storage

cd /etc/fdfs/
cp storage.conf.sample storage.conf
vim storage.conf

主要修改base_pathstore_path以及tracker的连接地址以及storage的http服务端口配置等。

group_name=group1                   # 组名(第一组为group1,第二组为group2,依次类推...)
base_path=/opt/fastdfs # 数据和日志文件存储根目录
store_path0=/opt/fastdfs # 第一个存储目录,第二个存储目录起名为:store_path1=xxx,其它存储目录名依次类推...
store_path_count=1 # 存储路径个数,需要和store_path个数匹配
tracker_server=172.30.47.156:22122 # tracker服务器IP和端口,有多个则添加多行

检查是否启动

[root@SUNQFASTDFS01 fdfs]# fdfs_storaged /etc/fdfs/storage.conf start
[root@SUNQFASTDFS01 fdfs]# netstat -unltp|grep fdfs
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 3438/fdfs_trackerd
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 4571/fdfs_storaged
[root@SUNQFASTDFS01 fdfs]# tail /opt/fastdfs/logs/storaged.log
mkdir data path: FA ...
mkdir data path: FB ...
mkdir data path: FC ...
mkdir data path: FD ...
mkdir data path: FE ...
mkdir data path: FF ...
data path: /opt/fastdfs/data, mkdir sub dir done.
[2018-01-09 10:15:08] INFO - file: storage_param_getter.c, line: 191, use_storage_id=0, id_type_in_filename=ip, storage_ip_changed_auto_adjust=1, store_path=0, reserved_storage_space=10.00%, use_trunk_file=0, slot_min_size=256, slot_max_size=16 MB, trunk_file_size=64 MB, trunk_create_file_advance=0, trunk_create_file_time_base=02:00, trunk_create_file_interval=86400, trunk_create_file_space_threshold=20 GB, trunk_init_check_occupying=0, trunk_init_reload_from_binlog=0, trunk_compress_binlog_min_interval=0, store_slave_file_use_link=0
[2018-01-09 10:15:08] INFO - file: storage_func.c, line: 257, tracker_client_ip: 172.30.47.156, my_server_id_str: 172.30.47.156, g_server_id_in_filename: -1674633556
[2018-01-09 10:15:08] INFO - file: tracker_client_thread.c, line: 310, successfully connect to tracker server 172.30.47.156:22122, as a tracker client, my ip is 172.30.47.156
[root@SUNQFASTDFS01 fdfs]#

在任一存储节点上使用如下命令查看集群的状态信息:
fdfs_monitor /etc/fdfs/storage.conf

如果出现ip_addr = Active, 则表明storage服务器已经登记到tracker服务器,如下:

server_count=1, server_index=0

tracker server is 172.30.47.156:22122

group count: 1

Group 1:
group name = group1
disk total space = 50871 MB
disk free space = 40771 MB
trunk free space = 0 MB
storage server count = 1
active server count = 1
storage server port = 23000
storage HTTP port = 8888
store path count = 1
subdir count per path = 256
current write server index = 0
current trunk file id = 0 Storage 1:
id = 172.30.47.156
ip_addr = 172.30.47.156 (SUNQFASTDFS01) ACTIVE

2.7 在storage上安装nginx

<font color="red">注意</font>:
fastdfs-nginx-module模块只需要安装到storage上。

cd /tmp/fastdfs
unzip fastdfs-nginx-module-master.zip
mv fastdfs-nginx-module-master /usr/local/fastdfs-nginx-module
tar -zxf nginx-1.13.4.tar.gz
cd nginx-1.13.4
./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module/src/

没有报错则执行下一步:

make
make install

如下结果则表示安装成功

[root@SUNQFASTDFS01 nginx-1.13.4]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.13.4
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
configure arguments: --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module/src/

2.8 配置client

cd /etc/fdfs/
cp client.conf.sample client.conf
vim client.conf
base_path=/opt/fastdfs              # 数据和日志文件存储根目录
tracker_server=172.30.47.156:22122 # tracker服务器IP和端口,有多个按行添加
http.tracker_server_port=8080 # 服务端IP和端口号
[root@SUNQFASTDFS01 data]# ls /tmp/test01.png
/tmp/test01.png
[root@SUNQFASTDFS01 data]# fdfs_upload_file /etc/fdfs/client.conf /tmp/test01.png
group1/M00/00/00/rB4vnFpUPN-Adut0AANMVnJruQg458.png

2.9 配置fastdfs-nginx-module和nginx

cd /etc/fdfs/
cp /usr/local/fastdfs-nginx-module/src/mod_fastdfs.conf .
vim mod_fastdfs.conf

一般只需改动以下几个参数即可:

base_path=/opt/fastdfs            # 保存日志目录
tracker_server=172.30.47.156:22122 # tracker服务器IP和端口,有多个按行添加
storage_server_port=23000 # storage服务器的端口号
group_name=group1 # 当前服务器的group名
url_have_group_name = true # 文件url中是否有group名
store_path_count=1 # 存储路径个数,需要和store_path个数匹配
store_path0=/opt/fastdfs # 存储路径
group_count = 0 # 设置组的个数,设置为0则为单组
cp /usr/local/fastdfs/conf/http.conf /usr/local/fastdfs/conf/mime.types /etc/fdfs/
vim /usr/local/nginx/conf/nginx.conf

内容:

# nginx.conf
user nobody;
worker_processes 8; error_log logs/info.log info; #pid logs/nginx.pid; events {
worker_connections 1024;
} http {
include mime.types;
default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on;
#tcp_nopush on; #keepalive_timeout 0;
keepalive_timeout 65; #设定请求缓冲
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 300m;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
client_body_buffer_size 512k;
proxy_connect_timeout 20;
proxy_send_timeout 60;
proxy_read_timeout 20;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m; gzip on; # 开启gzip,节省带宽
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain text/css application/x-javascript image/bmp application/javascript; output_buffers 1 32k;
postpone_output 1460; limit_rate_after 3m; # 限速模块,前3M下载时不限速
limit_rate 512k; # 限速模块 include vhost/*.conf; }
vim /usr/local/nginx/conf/vhost/storage.conf

内容:

# storage.conf
server {
listen 8080 ;
server_name 172.30.47.156 ; location / {
root html;
index index.html index.htm;
} location ~/group[0-9]/M00 {
alias /opt/fastdfs/data/;
ngx_fastdfs_module;
} }

启动nginx:

/usr/local/nginx/sbin/nginx

然后访问上文件中生成的字符串拼接的url:
http://172.30.47.156:8080/group1/M00/00/00/rB4vnFpUPN-Adut0AANMVnJruQg458.png

CentOS7搭建FastDFS+Nginx的更多相关文章

  1. CentOS7搭建FastDFS V5.11分布式文件系统及Java整合详细过程

    1.1 FastDFS的应用场景 FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片.视频.文档等文件.对于互联网应用,和其他分布式文件系统相比,优势非常明显.其中 ...

  2. CentOS7搭建FastDFS V5.11分布式文件系统-第一篇

    1.绪论 最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的过程中遇到过很多的问题,为了能帮忙到以后搭建FastDFS的同学,少走弯路,与大家分享一下.FastDFS的作者淘宝资深架 ...

  3. CentOS7搭建FastDFS V5.11分布式文件系统(一)

    1.绪论 最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的过程中遇到过很多的问题,为了能帮忙到以后搭建FastDFS的同学,少走弯路,与大家分享一下.FastDFS的作者淘宝资深架 ...

  4. 虚拟机上图片服务器搭建(FastDFS+nginx)

    文件服务器 0.提前建好需要的文件夹(/home/fastdfs) /home/fastdfs/tracker /home/fastdfs/storage /home/fastdfs/storage/ ...

  5. CentOS7搭建FastDFS V5.11分布式文件系统-第二篇

    1.CentOS7 FastDFS搭建 前面已下载好了要用到的工具集,下面就可以开始安装了: 如果安装过程中出现问题,可以下载我提供的,当前测试可以通过的工具包: 点这里点这里 1.1 安装libfa ...

  6. 阿里云centos7搭建php+nginx环境

    阿里云Centos搭建lnmp(php7.1+nginx+mysql5.7) https://jingyan.baidu.com/article/215817f7a10bfb1eda14238b.ht ...

  7. CentOS7搭建FastDFS V5.11分布式文件系统(二)

    1.CentOS7 FastDFS搭建 前面已下载好了要用到的工具集,下面就可以开始安装了: 如果安装过程中出现问题,可以下载我提供的,当前测试可以通过的工具包: 点这里点这里 1.1 安装libfa ...

  8. 详细说明-CentOS7部署FastDFS+nginx模块(包含集群方式)

    软件下载 # 已经事先把所需软件下载好并上传到/usr/local/src目录了 https://github.com/happyfish100/libfastcommon/archive/V1.0. ...

  9. CentOS7搭建FastDFS V5.11分布式文件系统-第三篇

    1.测试 前面两篇博文已对FastDFS的安装和配置,做了比较详细的讲解.FastDFS的基础模块都搭好了,现在开始测试下载. 1.1 配置客户端 同样的,需要修改客户端的配置文件: /etc/fdf ...

随机推荐

  1. final修饰的类,其属性和方法默认是被final修饰的吗?

    在论坛上,看到一个问题,当然,各位聪明的客官想必已经知道问题是什么了,嘿嘿,没错就是文章的标题:final修饰的类,其属性和方法默认是被final修饰的吗? 老实说,刚开始看到这个问题的时候,有点懵. ...

  2. Jmeter 设置连接oracle数据库

    一.添加需要数据库驱动jar包 方式1:直接将jar包复制到jmeter的lib目录,或lib/ext目录:(亲测两个目录都可以使用) 方式2:使用jmeter的Test Plan引入相应的jar包: ...

  3. Mysql 创建函数出现This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA

    This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary mys ...

  4. 1450:【例 3】Knight Moves

    1450:[例 3]Knight Moves  题解 这道题可以用双向宽度搜索优化(总介绍在  BFS ) 给定了起始状态和结束状态,求最少步数,显然是用BFS,为了节省时间,选择双向BFS. 双向B ...

  5. RequestMapping 注解的解析、匹配、注册

    RequestMapping 注解的解析.匹配.注册 1)创建 RequestMappingHandlerMapping 实例时会触发 afterPropertiesSet 调用. 2)读取容器中所有 ...

  6. NFS服务和DHCP服务讲解

    1.NFS服务端概述 NFS,是Network File System的简写,即网络文件系统.网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS: NFS允许一个系统在网络上与他人共享 ...

  7. 本机添加DNS映射

    开发项目时本地进行代码编写测试,需要与服务器主机进行DNS映射. 本地主机添加DNS映射步骤 一:复制备份hosts文件 找到C:\Windows\System32\drivers\etc下的host ...

  8. 一个JSON解析器

    来源 <JavaScript语言精粹(修订版)> 代码 <!DOCTYPE html> <html> <head> <meta charset=& ...

  9. 【css】子元素浮动到了父元素外,父元素没有随子元素自适应高度,如何解决?

    正常情况 如果子元素没有设置浮动(float),父元素的高度会随着子元素高度的改变而改变的. 设置浮动以后 父元素的高度不会随着子元素的高度而变化. 例如:在一个ul中定义若干个li,并设置float ...

  10. /etc/syscofig/network 修改主机名

    [root@mysql ~]# cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=mysql