FastDFS集群部署及JAVA客户端调用

FastDFS 安装分为 tracker 和 storage(tracker、storage不要安装在同一台服务器下),下面分别讲述一下:
一、tracker 安装
1、安装 libfastcommon

cd /usr/local/src
## 安装unzip 命令(如果还没安装过的话)
yum install -y unzip zip
## 解压libfastcommon
unzip libfastcommon-master.zip
cd libfastcommon-master
## 编译,然后安装
./make.sh
./make.sh install

2、安装 FastDFS

cd /usr/local/src
## 解压
tar -xzvf FastDFS_v5.08.tar.gz
cd FastDFS
## 编译,然后安装
./make.sh
./make.sh install

3、复制并重命名 tracker 的 sample 文件

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

4、修改 tracker 配置文件

vi /etc/fdfs/tracker.conf
## 修改内容如下
disabled=false # 启用配置文件
port=22122 # tracker服务器端口(默认22122)
base_path=/fastdfs/tracker  # 存储日志和数据的根目录
store_lookup=2 # 上传组(卷) 的方式 0:轮询方式 1: 指定组 2: 平衡负载(选择最大剩余空间的组(卷)上传)

其它参数保留默认配置, 具体配置解释可参考官方文档说明:http://bbs.chinaunix.net/thread-1941456-1-1.html

5、创建 base_path 指定的目录,即根目录

mkdir -p /fastdfs/tracker

6、关闭防火墙(生产环境建议开通相关策略)

## 关闭防火墙
service iptables stop
## 查看防火墙状态
service iptables status

7、启动 tracker

## tracker启动命令
/etc/init.d/fdfs_trackerd start
## 初次启动,会在/fastdfs/tracker目录下生成logs、data两个目录
## 查看是否启动成功
ps aux|grep fdfs_trackerd

注意:多个 tracker 可能出现以下报错而导致 tracker 启动失败:

[2019-03-23 13:49:13] INFO - file: tracker_mem.c, line: 4213, sys files loaded from tracker server 192.168.10.78:22122
[2019-03-23 13:49:13] ERROR - file: tracker_mem.c, line: 596, in the file "/fastdfs/tracker/data/storage_groups_new.dat", item "group_count" is not found
[2019-03-23 13:49:13] ERROR - file: tracker_mem.c, line: 4297, get sys files from other trackers fail, errno: 2
[2019-03-23 13:49:19] ERROR - file: tracker_proto.c, line: 48, server: 192.168.10.78:22122, response status 5 != 0
[2019-03-23 13:49:19] INFO - file: tracker_mem.c, line: 4213, sys files loaded from tracker server 192.168.10.78:22122
[2019-03-23 13:49:19] ERROR - file: tracker_mem.c, line: 596, in the file "/fastdfs/tracker/data/storage_groups_new.dat", item "group_count" is not found
[2019-03-23 13:49:19] ERROR - file: tracker_mem.c, line: 4297, get sys files from other trackers fail, errno: 2
[2019-03-23 13:49:20] ERROR - file: tracker_proto.c, line: 48, server: 192.168.10.78:22122, response status 5 != 0
[2019-03-23 13:49:20] INFO - file: tracker_mem.c, line: 4213, sys files loaded from tracker server 192.168.10.78:22122
[2019-03-23 13:49:20] ERROR - file: tracker_mem.c, line: 596, in the file "/fastdfs/tracker/data/storage_groups_new.dat", item "group_count" is not found
[2019-03-23 13:49:20] ERROR - file: tracker_mem.c, line: 4297, get sys files from other trackers fail, errno: 2

出现该错误的原因是:多个 tracker 的根目录下的 data 目录(即/fastdfs/tracker/data/)数据不一致
解决办法:删除新 tracker 节点 /fastdfs/tracker/data/ 中的数据(保留.pid),再将Leader tracker节点 /fastdfs/tracker/data/ 中的数据拷贝过去(不要拷贝.pid)

二、storage 安装
1、安装 libfastcommon

cd /usr/local/src
## 安装unzip 命令(如果还没安装过的话)
yum install -y unzip zip
## 解压libfastcommon
unzip libfastcommon-master.zip
cd libfastcommon-master
## 编译,然后安装
./make.sh
./make.sh install

2、安装 FastDFS

cd /usr/local/src
## 解压
tar -xzvf FastDFS_v5.08.tar.gz
cd FastDFS
## 编译,然后安装
./make.sh
./make.sh install

3、复制并重命名 storage 的 sample 文件

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

4、修改 storage 配置文件

vi /etc/fdfs/storage.conf
## 修改内容如下
disabled=false # 启用配置文件
port=23000 # storage服务端口
base_path=/fastdfs/storage          # 数据和日志文件存储根目录
store_path0=/fastdfs/storage/m0        # 第一个存储目录
tracker_server=10.224.201.100:22122 # tracker服务器
tracker_server=10.224.201.101:22122 #tracker服务器
http.server_port=80 # http访问文件的端口
group_name=group1

5、创建基础数据目录

mkdir -p /fastdfs/storage/m0

6、关闭防火墙(生产环境建议开通相关策略)

## 关闭防火墙
service iptables stop
## 查看防火墙状态
service iptables status

7、启动 storage

## storage 启动命令
/etc/init.d/fdfs_storaged start
## 初次启动,会在 /fastdfs/storage 目录下生成logs、data两个目录
## 查看是否启动成功命令
ps aux|grep fdfs_storaged

8、使用FastDFS客户端测试文件上传,查看 /fastdfs/storage/m0 目录下是否有对应的文件

三、在所有storage节点安装 fastdfs-nginx-module
1、fastdfs-nginx-module 作用说明
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。假设Tracker服务器将文件上传到了ip01,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件同步到同组存储ip02,在文件还没有复制完成的情况下,客户端如果用这个文件ID在ip02上取文件,就会出现文件无法访问的错误。而fastdfs-nginx-module可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。(解压后的fastdfs-nginx-module在nginx安装时使用)

2、安装 nginx 所需要的依赖

## 安装openssl
cd /usr/local/src
tar -zxvf openssl-fips-2.0.10.tar.gz
cd openssl-fips-2.0.10
./config && make && make install

## 安装pcre
tar -zxvf pcre-8.40.tar.gz
cd pcre-8.40
./configure && make && make install

## 安装zlib
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure && make && make install

3、解压 fastdfs-nginx-module_v1.16.tar.gz

cd /usr/local/src
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz

4、修改 fastdfs-nginx-module 配置文件
将 fastdfs-nginx-module/src 下 config 的内容替换如下:

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

5、复制 fastdfs-nginx-module 源码中的配置文件到 /etc/fdfs 目录,并修改

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

修改以下配置:

connect_timeout=10
base_path=/fastdfs/storage
tracker_server=10.224.201.100:22122 # tracker服务器
tracker_server=10.224.201.101:22122 #tracker服务器
group_name=group1                 #当前服务器的group名
url_have_group_name=true #url中包含group名称
store_path0=/fastdfs/storage/m0        # 存储路径
group_count=0                   #设置组的个数,单组必须设置为0

#在最后添加 
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/fastdfs/storage/m0

6、复制 FastDFS 的部分配置文件到 /etc/fdfs 目录

cd /usr/local/src/FastDFS/conf
cp http.conf mime.types /etc/fdfs/

7、安装 nginx

cd /usr/local/src
tar -zxvf nginx-1.12.1.tar.gz
cd nginx-1.12.1
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --add-module=/usr/local/src/fastdfs-nginx-module/src
make && make install

## 安装完毕检查nginx是否安装了fastdfs-nginx模块
/usr/local/nginx/sbin/nginx -V

8、修改 nginx 配置文件

cd /usr/local/nginx/conf
vi nginx.conf
## 修改内容如下
user  root; # 表示nginx使用root用户权限
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  localhost;
        client_max_body_size 100m;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location /group1/M00 {
                root /fastdfs/storage/m0/data;
                ngx_fastdfs_module;
        }
    }

9、启动 nginx

## 检查配置文件是否有正确
/usr/local/nginx/sbin/nginx -t
## 启动nginx
/usr/local/nginx/sbin/nginx

10、验证:通过浏览器访问测试时上传的文件
http://10.224.201.200/group1/M00/00/00/CuDISl1RLQaAePG_AAMqGCA8q00339.jpg
http://10.224.201.201/group1/M00/00/00/CuDISl1RLQaAePG_AAMqGCA8q00339.jpg

三、配置 nginx 负载均衡策略
到我们暴露外网的域名服务器配置 storage 负载均衡策略,配置如下:

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}


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

    sendfile        on;

    keepalive_timeout  65;

    #gzip  on;

    #设置group1的服务器
    upstream fdfs_group1 {
        server 10.224.201.200;
        server 10.224.201.201;
    }
    #设置group2的服务器
    #upstream fdfs_group2 {
    #    server 192.100.139.125:8888 weight=1 max_fails=2 fail_timeout=30s;
    #    server 192.100.139.126:8888 weight=1 max_fails=2 fail_timeout=30s;
    #}

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #设置group1的负载均衡参数
        location /group1/M00 {
            proxy_pass http://fdfs_group1;
        }
        #设置group2的负载均衡参数
        #location /group2/M00 {
        #    proxy_pass http://fdfs_group2;
        #}

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

}

启动 nginx

/usr/local/nginx/sbin/nginx -t
## 启动nginx
/usr/local/nginx/sbin/nginx

并用域名访问上传的文件:
http://uat.aaa.com/group1/M00/00/00/CuDISl1RLQaAePG_AAMqGCA8q00339.jpg

四、JAVA-API客户端配置
1、springboot 的 libs 文件夹引入 fastdfs-client-java.jar,并编译
2、在 src/java/resources 目录下创建文件 fdfs_client.conf,并加入如下配置:

connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 8080
http.anti_steal_token = no
http.secret_key = FastDFS1234567890

tracker_server = 10.224.201.100:22122
tracker_server = 10.224.201.101:22122

3、程序中对文件进行上传代码

private String conf_filename = "fdfs_client.conf";

@Override
public String uploadFile1(MultipartFile multipartFile) throws Exception {
	String result = "";
	TrackerServer trackerServer = null;
	try {
		ClientGlobal.init(conf_filename);
        TrackerClient tracker = new TrackerClient();
        trackerServer = tracker.getConnection();
        StorageServer storageServer = null;
        StorageClient1 client = new StorageClient1(trackerServer, storageServer);
        
        String typename = getExtensionName(multipartFile.getOriginalFilename());
        result = client.upload_file1(multipartFile.getBytes(), typename, null);
	} catch (Exception e) {
		throw e;
	} finally {
		if(trackerServer != null) {
			trackerServer.close();
		}
	}
	//返回的是文件上传ID,即group1/M00/00/00/CuDISl1RLQaAePG_AAMqGCA8q00339.jpg,全路径的话需要自己拼装
	return result;
}

JAVA客户端还可以通过properties等方式,详情参照:https://github.com/happyfish100/fastdfs-client-java

参考:https://www.jianshu.com/p/171d3169aaeb

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值