前言

  FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)三个部分组成,主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。

(1)每次上传文件后都会返回一个地址,用户需要自己保存此地址。
(2)为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。

 

配置环境:Centos7

tracker server:192.168.8.20

storage server:192.168.8.10

 安装

一、安装tracker 服务

 1.安装libfastcommon:公共函数库,基础环境

# 安装c的编译环境
yum -y install gcc-c++ libevent
cd /home
# 下载libfastcommon包
git clone https://github.com/happyfish100/libfastcommon.git
cd libfastcommon/
# 编译
./make.sh
# 安装
./make.sh install

安装完成

1 [root@localhost libfastcommon]# ./make.sh install
2 mkdir -p /usr/lib64
3 mkdir -p /usr/lib
4 mkdir -p /usr/include/fastcommon
5 install -m 755 libfastcommon.so /usr/lib64
6 install -m 644 common_define.h hash.h chain.h logger.h base64.h shared_func.h pthread_func.h ini_file_reader.h _os_define.h sockopt.h sched_thread.h http_func.h md5.h local_ip_func.h avl_tree.h ioevent.h ioevent_loop.h fast_task_queue.h fast_timer.h process_ctrl.h fast_mblock.h connection_pool.h fast_mpool.h fast_allocator.h fast_buffer.h skiplist.h multi_skiplist.h flat_skiplist.h skiplist_common.h system_info.h fast_blocked_queue.h php7_ext_wrapper.h id_generator.h char_converter.h char_convert_loader.h common_blocked_queue.h multi_socket_client.h skiplist_set.h fc_list.h json_parser.h /usr/include/fastcommon
7 if [ ! -e /usr/lib/libfastcommon.so ]; then ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so; fi

2.安装fastdfs

cd /home
# 下载fastdfs包
git clone https://github.com/happyfish100/fastdfs.git
cd fastdfs
# 编译
./make.sh
# 安装
./make.sh install

安装完成

 1 [root@localhost fastdfs]# ./make.sh install
 2 mkdir -p /usr/bin
 3 mkdir -p /etc/fdfs
 4 cp -f fdfs_trackerd /usr/bin
 5 if [ ! -f /etc/fdfs/tracker.conf.sample ]; then cp -f ../conf/tracker.conf /etc/fdfs/tracker.conf.sample; fi
 6 if [ ! -f /etc/fdfs/storage_ids.conf.sample ]; then cp -f ../conf/storage_ids.conf /etc/fdfs/storage_ids.conf.sample; fi
 7 mkdir -p /usr/bin
 8 mkdir -p /etc/fdfs
 9 cp -f fdfs_storaged  /usr/bin
10 if [ ! -f /etc/fdfs/storage.conf.sample ]; then cp -f ../conf/storage.conf /etc/fdfs/storage.conf.sample; fi
11 mkdir -p /usr/bin
12 mkdir -p /etc/fdfs
13 mkdir -p /usr/lib64
14 mkdir -p /usr/lib
15 cp -f fdfs_monitor fdfs_test fdfs_test1 fdfs_crc32 fdfs_upload_file fdfs_download_file fdfs_delete_file fdfs_file_info fdfs_appender_test fdfs_appender_test1 fdfs_append_file fdfs_upload_appender /usr/bin
16 if [ 0 -eq 1 ]; then cp -f libfdfsclient.a /usr/lib64; cp -f libfdfsclient.a /usr/lib/;fi
17 if [ 1 -eq 1 ]; then cp -f libfdfsclient.so /usr/lib64; cp -f libfdfsclient.so /usr/lib/;fi
18 mkdir -p /usr/include/fastdfs
19 cp -f ../common/fdfs_define.h ../common/fdfs_global.h ../common/mime_file_parser.h ../common/fdfs_http_shared.h ../tracker/tracker_types.h ../tracker/tracker_proto.h ../tracker/fdfs_shared_func.h ../storage/trunk_mgr/trunk_shared.h tracker_client.h storage_client.h storage_client1.h client_func.h client_global.h fdfs_client.h /usr/include/fastdfs
20 if [ ! -f /etc/fdfs/client.conf.sample ]; then cp -f ../conf/client.conf /etc/fdfs/client.conf.sample; fi

3.修改tracker server的配置文件

1 [root@localhost fastdfs]# cd /etc/fdfs/
2 [root@localhost fdfs]# ls -l
3 总用量 32
4 -rw-r--r--. 1 root root 1461 9月  20 12:55 client.conf.sample     #客户端上传配置文件
5 -rw-r--r--. 1 root root 7978 9月  20 12:55 storage.conf.sample    #文件存储服务器配置文件
6 -rw-r--r--. 1 root root  105 9月  20 12:55 storage_ids.conf.sample
7 -rw-r--r--. 1 root root 7446 9月  20 13:00 tracker.conf           #负载均衡调度服务器配置文件
8 -rw-r--r--. 1 root root 7443 9月  20 12:55 tracker.conf.sample

这里修改 tracker.conf

# 创建fastdfs的data数据文件
mkdir -p /data/fastdfs
# 修改tracker的配置文件
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
vi /etc/fdfs/tracker.conf
# 将tracker ip改为本机tracker 本机ip
bind_addr= 改为 bind_addr=192.168.8.20
# fdfs的数据文件路径
base_path=/home/yuqing/fastdfs 改为 base_path=/data/fastdfs
# tracker 的端口
http.server_port=8080 改为 http.server_port=80

4.启动tracker server

  • /etc/init.d/fdfs_trackerd start
1 # 启动tracker
2 [root@localhost fdfs]# /etc/init.d/fdfs_trackerd start
3 Starting fdfs_trackerd (via systemctl):                    [  确定  ]
4 [root@localhost fdfs]# ps -ef | grep fdfs
5 root     28619     1  0 13:07 ?        00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
6 root     28627 27151  0 13:07 pts/3    00:00:00 grep --color=auto fdfs
7 [root@localhost fdfs]# netstat -tunlp | grep fdfs
8 tcp        0      0 192.168.8.20:22122      0.0.0.0:*               LISTEN      28619/fdfs_trackerd 

5.设置开机自启

/sbin/chkconfig --add fdfs_trackerd
/sbin/chkconfig --level 2345 fdfs_trackerd on

二、安装storage服务

1.安装gcc编译环境

yum -y install gcc-c++ libevent

2.安装libfastcommon

cd /home
# 下载libfastcommon包
git clone https://github.com/happyfish100/libfastcommon.git
cd libfastcommon/
# 编译
./make.sh
# 安装
./make.sh install

3.安装fastdfs

cd /home
# 下载fastdfs包
git clone https://github.com/happyfish100/fastdfs.git
cd fastdfs
# 编译
./make.sh
# 安装
./make.sh install

4.修改storage server配置文件

# 创建数据目录
mkdir -p /data/fastdfs
#修改storage server的配置文件:
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
vi /etc/fdfs/storage.conf
bind_addr= 改为 bind_addr=192.168.8.10
#base_path需要和tracker部分的base_path保持一致,如果有修改过tracker的
base_path=/home/yuqing/fastdfs 改为 base_path=/data/fastdfs
#修改storage的资源存放路径
store_path0=/home/yuqing/fastdfs 改为 store_path0=/data/fastdfs
#如果有多个挂载磁盘则定义多个store_path,如下
#store_path1=......
#store_path2=......
修改storage的对应的tracker_server的ip地址和端口
tracker_server=192.168.209.121:22122 改为 tracker_server=192.168.8.20:22122
#如果有多个则配置多个tracker_server
#tracker_server=......
#tracker_server=......
# 端口我这里就不改了
http.server_port=8888

5.启动storage server

  • /etc/init.d/fdfs_storaged start
1 # 启动storage server
2 [root@localhost libfastcommon]# /etc/init.d/fdfs_storaged start
3 Reloading systemd:                                         [  确定  ]
4 Starting fdfs_storaged (via systemctl):                    [  确定  ]
5 # 查看进程
6 [root@localhost libfastcommon]# netstat -tunlp | grep fdfs
7 tcp        0      0 192.168.8.10:23000      0.0.0.0:*               LISTEN      26440/fdfs_storaged 

6.设置开机自启

/sbin/chkconfig --add fdfs_storaged
/sbin/chkconfig --level 2345 fdfs_storaged on

三、在tracker server服务器配置客户端测试文件上传

在tracker server服务器查看tracker与storage连接情况

1 [root@localhost home]# netstat -tnlpa|grep 22122
2 tcp        0      0 192.168.8.20:22122      0.0.0.0:*               LISTEN      28619/fdfs_trackerd 
3 tcp        0      0 192.168.8.20:22122      192.168.8.10:49982      ESTABLISHED 28619/fdfs_trackerd 

配置客户端

cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
vi /etc/fdfs/client.conf
#base_path需要和tracker部分的base_path保持一致
base_path=/home/yuqing/fastdfs 
改为 base_path=/data/fastdfs
tracker_server=192.168.0.197:22122
改为
tracker_server=192.168.8.20:22122

测试文件上传

 1 [root@localhost home]# /usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/1
 2 This is FastDFS client test program v5.12
 3 
 4 Copyright (C) 2008, Happy Fish / YuQing
 5 
 6 FastDFS may be copied only under the terms of the GNU General
 7 Public License V3, which may be found in the FastDFS source kit.
 8 Please visit the FastDFS Home Page http://www.csource.org/ 
 9 for more detail.
10 
11 [2019-09-20 13:39:11] DEBUG - base_path=/data/fastdfs, connect_timeout=10, 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
12 
13 tracker_query_storage_store_list_without_group: 
14     server 1. group_name=, ip_addr=192.168.8.10, port=23000
15 
16 group_name=group1, ip_addr=192.168.8.10, port=23000
17 storage_upload_by_filename
18 group_name=group1, remote_filename=M00/00/00/wKgICl2EZf-AXblfAAAAAAAAAAA6122370
19 source ip address: 192.168.8.10
20 file timestamp=2019-09-20 13:39:11
21 file size=0
22 file crc32=0
23 example file url: http://192.168.8.10/group1/M00/00/00/wKgICl2EZf-AXblfAAAAAAAAAAA6122370
24 storage_upload_slave_by_filename
25 group_name=group1, remote_filename=M00/00/00/wKgICl2EZf-AXblfAAAAAAAAAAA6122370_big
26 source ip address: 192.168.8.10
27 file timestamp=2019-09-20 13:39:11
28 file size=0
29 file crc32=0
30 example file url: http://192.168.8.10/group1/M00/00/00/wKgICl2EZf-AXblfAAAAAAAAAAA6122370_big

四、在storage server服务器配置nginx

安装nginx关于fastdfs集合的扩展模块

cd /home
wget http://nginx.org/download/nginx-1.15.5.tar.gz
#jemalloc 优化nginx,内存管理
wget https://github.com/jemalloc/jemalloc/releases/download/5.1.0/jemalloc-5.1.0.tar.bz2
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz
#nginx缓存清理模块
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
git clone https://github.com/happyfish100/fastdfs-nginx-module.git
yum -y install openssl openssl-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel
tar -jxvf jemalloc-5.1.0.tar.bz2
cd jemalloc-5.1.0
./configure --prefix=/usr/local/jemalloc --libdir=/usr/local/lib
make;make install
echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf
ldconfig
cd ../
/usr/sbin/groupadd www  
/usr/sbin/useradd -g www www -s /sbin/nologin
tar -zxvf pcre-8.42.tar.gz
tar -zxvf ngx_cache_purge-2.3.tar.gz
tar -zxvf nginx-1.15.5.tar.gz
cd nginx-1.15.5
./configure --prefix=/usr/local/nginx \ --with-pcre=/home/pcre-8.42 \ --user=www \ --group=www \ --with-http_stub_status_module \ --with-http_ssl_module \
--with-http_image_filter_module \ --with-http_flv_module \ --with-http_gzip_static_module \ --with-ld-opt="-ljemalloc" \ --with-http_realip_module \ --add-module=/home/fastdfs-nginx-module/src \ --add-module=/home/ngx_cache_purge-2.3
make;make install

修改mod_fastdfs配置文件

cp /home/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
cd /home/fastdfs/conf/     #进入fastdfs安装包文件夹
cp anti-steal.jpg http.conf mime.types /etc/fdfs/
vi /etc/fdfs/mod_fastdfs.conf
base_path=/tmp 改为 base_path=/data/fastdfs
tracker_server=tracker:22122 改为 tracker_server=192.168.8.20:22122
store_path0=/home/yuqing/fastdfs 改为 store_path0=/data/fastdfs
url_have_group_name = false 改为 true
http.server_port=801 #此端口为上传文件返回url中的端口号

修改nginx配置文件

  • vi /usr/local/nginx/conf/nginx.conf
server {
listen 801;
server_name 192.168.8.10;

  location ~ group1/M00/(.+)_([0-9]+)x([0-9]+)\.(jpg|gif|png|jpeg|bmp|tif|pcx|tga|exif|fpx|svg|psd|cdr|pcd) {
    alias /home/data/fastdfs/data;
    ngx_fastdfs_module;
    set $w $2;
    set $h $3;

    if ($w != “0”) {
      rewrite group1/M00(.+)_(\d+)x(\d+)\.(jpg|gif|png|jpeg|bmp|tif|pcx|tga|exif|fpx|svg|psd|cdr|pcd)$ group1/M00$1.$4 break;
    }

    if ($h != “0”) {
      rewrite group1/M00(.+)_(\d+)x(\d+)\.(jpg|gif|png|jpeg|bmp|tif|pcx|tga|exif|fpx|svg|psd|cdr|pcd)$ group1/M00$1.$4 break;
    }

    #根据给定的长宽生成缩略图
    image_filter resize $w $h;

    #原图最大2M,要裁剪的图片超过2M返回415错误,需要调节参数image_filter_buffer
    image_filter_buffer 100M;

    #try_files group1/M00$1.$4 $1.jpg;
  }

  location ~ group1/M00/(.+)\.?(.+){
    alias /home/data/fastdfs/data;
    ngx_fastdfs_module;
  }

}

智能判断是打开或者下载请参考:https://www.cnblogs.com/jxd283465/p/11506568.html

添加nginx的启动脚本

  • vi /etc/init.d/nginx
#! /bin/sh
ulimit -n 65535
# Description: Startup script for nginx
# chkconfig: 2345 55 25
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
CONFIGFILE=/usr/local/nginx/conf/$NAME.conf
PIDFILE=/usr/local/nginx/logs/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
 
set -e
[ -x "$DAEMON" ] || exit 0
do_start() {
 $DAEMON -c $CONFIGFILE || echo -n "nginx already running"
}
do_stop() {
 kill -INT `cat $PIDFILE` || echo -n "nginx not running"
}
do_reload() {
 kill -HUP `cat $PIDFILE` || echo -n "nginx can\'t reload"
} 
case "$1" in
 start)
 echo -n "Starting $DESC: $NAME"
 do_start
 echo "."
 ;;
 stop)
 echo -n "Stopping $DESC: $NAME"
 do_stop
 echo "."
 ;;
 reload|graceful)
 echo -n "Reloading $DESC configuration..."
 do_reload
 echo "."
 ;;
 restart)
 echo -n "Restarting $DESC: $NAME"
 do_stop
 do_start
 echo "."
 ;;
 *)
 echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2
 exit 3
 ;;
esac
exit 0

nginx添加到服务,开机自启

chmod 700 /etc/init.d/nginx
/sbin/chkconfig --add nginx
/sbin/chkconfig --level 2345 nginx on
#启动nginx
[root@storage72 opt]# /etc/init.d/nginx start
Starting nginx daemon: nginxngx_http_fastdfs_set pid=21702

五、在tracker server服务器上设置nginx反向代理

安装nginx

  • yum -y install nginx
  upstream fdfs_group1 {
    server 192.168.8.10:801 weight=1 max_fails=2 fail_timeout=30s;
  }
    server {
        listen       801;
        server_name  192.168.8.20;
        location /group1/M00 {
        proxy_pass http://fdfs_group1;
        }
    }

注意:如果想修改生成url的端口号

修改tracker server服务器的客户端配置文件

vi /etc/fdfs/client.conf 

版权声明:本文为jxd283465原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jxd283465/p/11556263.html