FastDFS部署流程

一、单机部署

1、FastDFS 安装

1.1 环境/依赖安装

(1) 由于 FastDFS 采用 C 语言开发,需要先安装 gcc 环境,

yum install gcc-c++

(2) 安装 FastDFS 依赖 libevent 库:

yum -y install libevent

(3) 安装 FastDFS 依赖 libfastcommon 库,其中包含了 FastDFS 运行所需要的一些基础库:

wget https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz

(4) 下载好的 libfastcommon 拷贝至 /usr/local/ 目录下,然后依次执行如下命令:

cd /usr/local
tar -zxvf V1.0.43.tar.gz
cd libfastcommon-1.0.43/
./make.sh
./make.sh install

(5) FastDFS安装包下载至 /usr/local/ 目录下(Tracker 和 Storage 是相同的安装包),安装命令如下:

wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz
tar -zxvf V6.06.tar.gz
cd fastdfs-6.06/
./make.sh
./make.sh install

(6) 安装成功后,将安装目录内 conf 目录下的配置文件拷贝到 /etc/fdfs 目录下:

cd /usr/local/fastdfs-6.06/conf
cp ./* /etc/fdfs/

1.2 tracker 配置

(1) 进入 /etc/fdfs/ 目录配置,打开 tracker.conf 文件

vi tracker.conf

(2) 修改如下配置:

#默认端口,根据实际需求修改
port = 22122 

#数据和日志目录地址,自己创建
base_path = /home/face/fastdfs 

(3) Tracker 启动,停止,重启命令

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

1.3 storage 配置

(1) 进入到 /etc/fdfs 目录下,配置 Storage:

vi storage.conf

(2) 修改如下配置:

# 指定此 storage server 所在 组(卷)
group_name = group1

#服务端口,根据需求更改
port = 23000  

# Storage 数据和日志目录地址,自己创建
base_path = /home/face/fastdfs

# 指向一个存储路径,没有配置store_path,就使用base_path的路径
store_path0 = /home/face/fastdfs

# 有多个 tracker server 时,每个 tracker server 写一行
tracker_server =192.168.0.44:22122
#tracker_server = 192.168.209.122:22122

# 和nignx监听端口设置一致
http.server_port = 80

(3) Storage 启动,停止,重启命令:

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

2、Nginx 配置

2.1 Nginx 安装

(1) 首先下载 /解压 Nginx,目录 /usr/local/

wget http://nginx.org/download/nginx-1.17.0.tar.gz
tar -zxvf nginx-1.17.0.tar.gz

(2) 安装编译依赖:

yum -y install pcre-devel
yum -y install openssl openssl-devel

(3) 进入解压目录,进行编译

cd  nginx-1.17.0
./configure
make
make install

(4) 启动命令,,重新加载

/usr/local/nginx/sbin/nginx

#或者进入安装好的nginx/sbin目录
./nginx

#修改配置之后重新加载
./nginx -s reload

#关闭
./nginx -s stop

2.2 fastdfs-nginx-module配置

(1) 首先下载,解压 fastdfs-nginx-module,目录 /usr/local/

wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz

tar -zxvf V1.22.tar.gz

(2) mod_fastdfs.conf 文件复制到 /etc/fdfs/

cd fastdfs-nginx-module-1.22/src
cp mod_fastdfs.conf /etc/fdfs/

(3) 进入/etc/fdfs/ ,修改mod_fastdfs.conf

vi /etc/fdfs/mod_fastdfs.conf
#  Tracker Server
tracker_server=192.168.0.44:22122

#  StorageServer 默认端口
storage_server_port=23000

# 本服务对应的组名
group_name=group1

# 如果文件ID的uri中包含/group**,则要设置为true
url_have_group_name = true

#Storage 配置的store_path0路径,必须和storage.conf中的一致
store_path0=/home/face/fastdfs

(4) 重新配置编译安装nginx

cd  nginx-1.17.0
./configure --add-module=/usr/local/fastdfs-nginx-module-1.22/src
make
make install

(5) 修改 nginx 的配置文件,重启nginx

vi /usr/local/nginx/conf/nginx.conf
 server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main
      
      #添加下面这句话,将/group1/M00 映射到 /home/face/fastdfs/data
        location ~/group([0-9])/M00 {
   	     ngx_fastdfs_module;
         }

3、 客户端测试

(1) 首先添加maven依赖

<dependency>
    <groupId>net.oschina.zcx7878</groupId>
    <artifactId>fastdfs-client-java</artifactId>
    <version>1.27.0.0</version>
</dependency>

(2) 在项目的 resources 目录下添加 FastDFS 的配置文件 fastdfs-client.properties:

fastdfs.connect_timeout_in_seconds = 5
fastdfs.network_timeout_in_seconds = 30

fastdfs.charset = UTF-8

fastdfs.http_anti_steal_token = false
fastdfs.http_secret_key = FastDFS1234567890

fastdfs.http_tracker_http_port = 80

fastdfs.tracker_servers = 192.168.0.163:22122

(3) 文件上传测试

@Test
void testUpload() {
    try {
        ClientGlobal.initByProperties("fastdfs-client.properties");
        TrackerClient tracker = new TrackerClient();
        TrackerServer trackerServer = tracker.getConnection();
        StorageServer storageServer = null;
        StorageClient1 client = new StorageClient1(trackerServer, storageServer);
        //添加基本的元数据,添加name,date,length
        NameValuePair nvp[] = null;
        //上传到文件系统
        String fileId = client.upload_file1("‪D:\\Works\\1.png", "png",
                nvp);
        log.info(fileId);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

浏览器输入ip加上打印的地址,能够预览图片:

http://192.168.0.44/group2/M00/00/00/wKgALF5uz3GASF7xAAdzw9FfMec793.png

(4) 文件下载测试

@Test
void testDownload() {
    try {
        ClientGlobal.initByProperties("fastdfs-client.properties");
        TrackerClient tracker = new TrackerClient();
        TrackerServer trackerServer = tracker.getConnection();
        StorageServer storageServer = null;
        StorageClient1 client = new StorageClient1(trackerServer, storageServer);
        byte[] bytes = client.download_file1("group1/M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png");
        FileOutputStream fos = new FileOutputStream(new File("‪D:\\Works\\666.png"));
        fos.write(bytes);
        fos.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

4、权限设置(防盗链)

4.1 服务端开启token验证

(1) 修改http.conf配置文件

 vim /etc/fdfs/http.conf
# 设置为true表示开启token验证
http.anti_steal.check_token=true

# 设置token失效的时间单位为秒(s)
http.anti_steal.token_ttl=1800

# 密钥,跟客户端配置文件的fastdfs.http_secret_key保持一致
http.anti_steal.secret_key=FASTDFS1234567890

# 如果token检查失败,返回的页面
http.anti_steal.token_check_fail=/home/face/page/403.html

(2) 配置完成重启服务端

cd  /usr/local/nginx/sbin
./nginx -s stop
./nginx

4.2 客户端生成token

(1) 客户端参数配置

# 开启防盗链功能
fastdfs.http_anti_steal_token=true
# 密钥和服务器保持一致
fastdfs.http_secret_key=FASTDFS1234567890

(2) 生成token

@Test
public void getToken() throws Exception {
    int ts = (int) Instant.now().getEpochSecond();
    //地址里边不包含 group信息
    String token = ProtoCommon.getToken("M00/00/00/wKgALF5uz3GASF7xAAdzw9FfMec793.png", ts, "FastDFS1234567890");
    StringBuilder sb = new StringBuilder();
    sb.append("?token=").append(token);
    sb.append("&ts=").append(ts);
    System.out.println(sb.toString());
}

浏览器输入地址加token可以访问,不加token会访问失败:

http://192.168.0.44/group2/M00/00/00/wKgALF5uz3GASF7xAAdzw9FfMec793.png?token=d3911e92b5360b6569fa51153e4c0eed&ts=1584320377

二、集群部署

1、服务器规划

IP地址 主机角色(主机名)
192.168.0.44 跟踪服务器1(Tracker-01)+ 存储服务器1(Storage-group1-01)
192.168.0.163 跟踪服务器2(Tracker-02)+存储服务器2(Storage-group2-01)
192.168.0.164 存储服务器3(Storage-group1-02)
192.168.0.165 存储服务器4(Storage-group2-02)

2、FastDFS安装

2.1 环境/依赖安装

安装和单机部署一模一样,不一样的就是配置文件。详情参考[FastDFS安装](#1.1 环境/依赖安装)

2.2 tracker配置

和单机部署一致,详情参考[1.2 tracker 配置](#1.2 tracker 配置)

2.3 storage配置

vim /etc/fdfs/storage.conf

其他配置一致,下面三个不同:

# 192.168.0.44/192.168.0.164属于group1,192.168.0.163/192.168.0.165属于group2
group_name = group1  

# storage的端口号,同一个组(group)的 storage 端口号必须相同
port = 23000    

# 有多个 tracker server 时,每个 tracker server 写一行
tracker_server =192.168.0.44:22122
tracker_server = 192.168.0.163:22122   

Notes:group名是否对应和tracker_server需要多条添加!

2.4 启动服务

#启动tracker服务(只在tracker服务器上面执行也就是192.168.0.44和192.168.0.163)
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf  

#启动storaged服务(所有服务器都执行)
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start 

3、Nginx 配置

和单机部署一致,详情参考[2、Nginx 配置](#2、Nginx 配置)。

三、扩容

1、基于group模式的文件存储扩容(不推荐)

原理: 扩充group的存储空间,配置多个存储文件目录地址,增加sotre_path数量

(1) 修改 storage.conf

vi /etc/fdfs/storage.conf
# 默认是1,增加磁盘,修改字段
store_path_count = 2

# store_path0默认是base_path,添加磁盘增加对应路径store_pathX
store_path0 = /home/face/fastdfs
store_path1 = /home/face/fastdfs2

(2) 修改 mod_fastdfs.conf(修改内容和storage一致)

# 默认是1,增加磁盘,修改字段
store_path_count = 2

# store_path0默认是base_path,添加磁盘增加对应路径store_pathX
store_path0 = /home/face/fastdfs
store_path1 = /home/face/fastdfs2

(3) 修改修改nginx/conf/nginx.conf配置文件


 location ~/group([0-9])/M00 {
   #增加store_path1的访问代理
  root /home/face/fastdfs2/data;
   	     ngx_fastdfs_module;
 }

2、单台服务器一个tracker多个storage

Notes::没有扩容作用,只有多分组作用。

(1) 创建新的storagex.conf

cp /etc/fdfs/storage.conf /etc/fdfs/storage2.conf

(2) 修改toragex.conf配置文件

详情参考[1.3 storage 配置](#1.3 storage 配置),注意port、group、base_path、store_path0区分。

(3) 修改mod_fastdfs.conf配置文件

# 修改组名,多个用/区分开
group_name=group1/group2

# 设置组个数
group_count = 2

# 设置每一组信息
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/home/face/fastdfs

[group2]
group_name=group2
storage_server_port=23002
store_path_count=1
store_path0=/home/face2/fastdfs

3、基于storage模式的文件存储扩容

原理: 新增一台服务器,创建新的storage与原来存在的storage不属于同一个组,设置为同一个组并不能扩容,只是备份的效果。

(1) 安装步骤参考单机部署[FastDFS安装](#1.1 环境/依赖安装)

(2) storage配置参考集群配置[2.3 storage配置](#2.3 storage配置)

(3) 启动服务

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

(4) Nginx 配置和单机部署一致,详情参考[2、Nginx 配置](#2、Nginx 配置)。

四、注意

1、所有修改配置的操作,都需要重启对应的服务器

2、错误信息可以查看日志,有storaged.log和trackerd.log,对应路径是设置的存储路径(/home/face/fastdfs/logs)

3、tracker配置文件相关扩展

 #工作线程数,最好和cpu核数保持一致
 work_threads=4
 #选择上传文件模式 0代表group轮询 1指定特定group 2选择空间最大的group
 store_lookup=0    
  #上传文件组,如果模式为1,则必须设置成核特定group一致的组名
 #store_group=      
 #选择存储服务器上传文件 0代表轮询,1根据通过IP第的顺序 2通过优先级
 store_server=0       
 #选择哪块存储盘上传文件 0代表轮询,2代表优先最大存储空间盘(路径)
 store_path=0    
 #选择哪台存储服务器下载文件0代表轮询,1代表当前文件上传的源服务器
 download_server=0 

参考文章:
FastDFS 构建分布式文件管理系统
FastDFS集群部署

发布了132 篇原创文章 · 获赞 150 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_35988274/article/details/104925927