阅读 258

FastDFS学习笔记-FastDFS这一篇就够了

1. FastDFS简介

1.1 分布式文档系统对比

常见分布式文件系统有GFS,HDFS,FastDFS,TFS,GridFS(GridDS),Ceph等,其实均是类GFS的文件系统。
文档系统 GFS HDFS FastDFS GridFS TFS Ceph
开发语言 Java C C++/MongoDB C++ C++
开源协议 Apache GPL V3 GPL V2 LGPL
数据存储方式 文件 文件/块 文件 对象/文件/块
集群节点通讯协议 TCP TCP TCP 私有协议(TCP)
专用元数据存储点 占用MDS 占用NS 占用MDS
在线扩容 支持 支持 支持 支持
冗余备份 支持 支持 支持 支持
单点故障 存在 不存在 存在 存在
跨集群同步 不支持 部分支持 支持 不支持
易用性 安装简单文档专业 安装简单社区活跃 安装复杂文档偏少 安装简单文档专业尚不成熟(btrfs)
适用场景 MapReduce使用的文件存储 单集群的中小文件 跨集群的<1M的小文件 单集群大中小文件
FUSE挂载 支持 不支持 未知 支持
访问接口 不支持POSIX 不支持POSIX 不支持POSIX POSIX

可前往开源中国获取更多详细信息。

1.2 FastDFS简介

FastDFS([官方地址](https://github.com/happyfish100/libfastcommon/releases))是一款用C语言开发的,轻量级的类似google FS 的分布式文件系统,属于应用级文件系统,不是通用的文件系统,只能通过专有API访问。功能主要包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了文件大容量存储和高性能访问的问题。FastDFS特别适合以文件为载体的在线服务,如图片、视频、文档等等。FastDFS可以看做是基于文件的`key-value`存储系统,`key`为文件`ID`,`value`为文件内容,因此称作分布式文件存储服务更为合适。

1.2.1 架构

img

如图所示,存在3个重要节点:Client,Tracker,Storage

1.2.1.1 Client

客户端,业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。

1.2.1.2 Tracker

跟踪器,主要做调度工作,管理集群,在访问上起到负载均衡的作用。 `tracker`也可以实现集群。每个`tracker`节点地位平等。

作用:引导客户端去哪台服务器存储数据,实际上是客户端与存储服务器直接进行通信的,并不需要通过`Tracker`进行中转。

1.2.1.3 Storage

存储节点,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的`metadata`进行管理。需要连接`tracker`端,定期报告自己的情况(是否活着,剩余容量,负载情况)分为多个组,每个组之间保存的文件是不同的。每个组内部可以有多个成员,组成员内部保存的内容是一样的,组成员的地位是一致的,没有主从的概念。

`Storage`是可以实现横向扩容的,向里面添加组服务器,且同一个组里面的文件是一样的,一台服务器挂了,还有别的服务器可以提供访问。(实现高可用)一台服务器很忙,可以将访问分配给其他服务器,实现负载均衡。

1.2.2 FastDFS文件上传时序图

image-20210416152333547

上传文件交互过程

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

1.2.3 FastDFS文件下载时序图

image-20210416173453388

下载文件交互过程

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

1.3 FastDFS特点

1)分组存储,简单灵活;

2)对等结构,不存在单点;

3)文件ID由FastDFS生成,作为文件访问凭证。FastDFS不需要传统的nameservermetaserver

4)大、中、小文件均可以很好支持,可以存储海量小文件;

5)一台storage支持多块磁盘,支持单盘数据恢复;

6)提供了nginx扩展模块,可以和nginx无缝衔接;

7)支持多线程方式上传和下载文件,支持断点续传;

8)存储服务器上可以保存文件附加属性。

1.4 FastDFS缺点

握草,太完美了,以至于还在找缺点。

2. FastDFS 安装部署

2.1 安装基础依赖库

# 2.1.1安装编译工具gcc  
yum install -y gcc gcc-c++

# 2.1.2安装libevent(非桌面版不需要)  
yum install -y libevent

# 2.1.3安装 prel
yum -y install perl perl-devel

# 2.1.4安装FastDFS基础库(libfastcommon),建议使用官方最新的二进制安装包
# 2.1.4.1.下载
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.41.tar.gz

# 2.1.4.2.解压  
tar -zxvf V1.0.41.tar.gz  && cd libfastcommon-1.0.41

# 2.1.4.3.编译安装进入目录,执行
./make.sh && ./make.sh install
#安装完成提示libfastcommon安装在了如下两个位置
#/usr/lib/libfastcommon.so
#/usr/lib64/libfastcommon.so
#可分别进入这两个目录并查看
cd /usr/lib && ls | grep libfastcommon.so 
cd /usr/lib64 && ls | grep libfastcommon.so
#由于FastDFS主程序设置的目录为/usr/local/lib/,所以我们需要创建/usr/lib64/下的一些核心执行程序的软连接文件,执行以下命令
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so \
&& ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so \
&& ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so \
&& ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
#如果是fastdfs5.0.8,上述创建软连接,可能会提示已经存在,但是为了保证没有漏掉,建议还是都执行一遍 

2.2 部署单机版FastDFS

2.2.1 安装

#1.下载
wget https://github.com/happyfish100/fastdfs/archive/V6.03.tar.gz 

#2.解压到指定目录
tar -zxvf V6.03.tar.gz -C /usr/local/

#3.进入所在目录,执行编译并安装
cd /usr/local/fastdfs-6.03 && ./make.sh && ./make.sh install

#4.验证  
cd /etc/fdfs && ll #查看配置文件列表
cd /etc/init.d && ll |grep fdfs #查看服务脚本
cd /usr/bin && ll |grep fdfs #查看执行脚本

#5.全局替换执行脚本目录(5.0.8及以后的版本就不需要执行这一步了) 
vim /etc/init.d/fdfs_storaged #编辑fdfs_storaged文件,执行全局替换
:%s+/usr/local/bin+/usr/bin #(键盘输入才有效)
vim /etc/init.d/fdfs_trackerd #编辑fdfs_trackerd文件,执行全局替换
:%s+/usr/local/bin+/usr/bin #(键盘输入才有效)

2.2.2 配置

#1. 复制配置文件并重命名
cd /etc/fdfs/ \
&& cp storage.conf.sample storage.conf \
&& cp client.conf.sample client.conf \
&& cp tracker.conf.sample tracker.conf

#2. 配置Tracker
vim tracker.conf
#修改以下属性 
base_path = /opt/fastdfs(必须存在的路径,需提前手动创建mkdir -p /opt/fastdfs) 

#2.2 启动Tracker
#方式一:
/etc/init.d/fdfs_trackerd start

#方式二:(推荐)
service fdfs_trackerd start

#2.3 检查Tracker
ps aux|grep fdfs_trackerd

#3. 配置Storage
vim storage.conf
#修改如下参数
base_path=/opt/fastdfs
store_path0=/opt/fastdfs
tracker_server=tracker_server_ip:22122
http.server_port=80

#3.2 启动Storage
#方式一
/etc/init.d/fdfs_storaged start

#方式二(推荐)
service fdfs_storaged start

#3.3 验证Storage
ps aux|grep fdfs_storaged
#cd /opt/fastdfs/data/ && ls

#4. 配置Client
vim client.conf
#修改以下参数
base_path=/opt/fastdfs(同storage.conf)
tracker_server=tracker_server_ip:22122

#5. 测试上传文件
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/V6.03.tar.gz

#6. 查看上传结果
ll /opt/fastdfs/data/00/00/

2.2.3 部署http服务

FastDFS 4.0.5版本后,已经移除了自带的HTTP服务,所有需要手动搭建HTTP服务。当前采用NGINX配合FastDFS的方案,给外部提供连接FastDFS Client的功能,以执行上传和下载。
#1. 安装NGINX依赖库
yum install -y pcre-devel zlib-devel openssl openssl-devel

#2. 安装NGINX FastDFS模块
#下载
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz
#解压到指定目录
tar -zxvf V1.22.tar.gz -C /usr/local/ && cd /usr/local

#3.配置文件
#3.1. 将config文件中的/usr/local替换成/usr
vim /usr/local/fastdfs-nginx-module-1.22/src/config
:%s+/usr/local+/usr(键盘输入才有效)

#3.2. 复制并修改mod_fastdfs.conf
cp /usr/local/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/ && \
vim /etc/fdfs/mod_fastdfs.conf
#修改以下参数
base_path=/opt/fastdfs
tracker_server=tracker_server_ip:22122
url_have_group_name= true
store_path0=/opt/fastdfs

#3.3. 复制http.conf和mime.types文件
cd /usr/local/fastdfs-6.03/conf/ && cp http.conf mime.types /etc/fdfs/ 

#3.4. 创建文档存储目录软链接
ln -s /opt/fastdfs/data/ /opt/fastdfs/data/M00

#4.安装NGINX
#4.1 下载二进制安装包
wget http://nginx.org/download/nginx-1.16.1.tar.gz

#4.2 解压并进入目录
tar -zxvf nginx-1.16.1.tar.gz && \
cd nginx-1.16.1

#4.3 配置
./configure \
--add-module=/usr/local/fastdfs-nginx-module-1.22/src

#4.4 编译安装
make &&\
make install

#4.5 查找
whereis nginx

#4.6 配置
cd /usr/local/nginx/conf/ && vim nginx.conf
#在server节点添加以下参数 
location ~/group[0-9]/M00 {  
    alias  /opt/fastdfs/data/;
    ngx_fastdfs_module;
}

至此,FastDFS在CentOS上的安装基本完成,最终下载了前面测试所传的文件(浏览器输入)

http://xxx.xxx.xxx.xxx/group1/M00/rBFFh13gtYOAE5OgAAwgHxVBW2I.tar.gz

2.4 部署FastDFS集群版

首先回头看一下1.2.1 FastDFS的架构图做进一步加深记忆。FastDFS集群主要是配置和部署他的量大角色:`tracker server` 和 `storage server` 。

`tracker server`只负责管理集群拓扑数据,不会存储任何文件索引。因此`tracker server`对服务器的硬件配置要求较低。为了实现互备,`tracker server`通常两台就够了。`tracker server`占用资源较少,如果集群规模较小(比如只有一组`storage server`),可以共用`storage server`。

`storage server`提供文件存储的IO密集型服务。FastDFS存储文件是直接基于操作系统的文件系统的,`storage server`的性能瓶颈通常表现为磁盘IO。为了充分利用磁盘IO,推荐不做RAID,直接挂载单块硬盘,每块硬盘`mount`为一个路径,作为`storage server`的一个`store path`。为了充分利用文件系统的`cache`以加快文件访问速度,推荐`storage server`配置较大内存,尤其存在众多热点文件的场合下。大量的IO吞吐也会消耗一定的CPU,因此`storage server`对CPU核数也有一定要求。
为了相互备份,一个`group`的`storage server`通常有两台即可。如果对数据可靠性要求很苛刻,一个`group`可以有三台甚至更多`storage server`。因一个`group`内的`storage server`对文件采用冗余备份的RAID1方式,文件写入性能不会随`storage server`的增加而增加,理论上文件读取性能随着`storage server`的增加而线性增加。

FastDFS `client API`方面,目前官方提供了C、PHP extension和Java的client API。对于互联网应用,文件上传和删除等操作必须使用FastDFS client API,文件下载建议采用HTTP方式。推荐使用nginx扩展模块,每台`storage server`均需要部署nginx(fastdfs-nginx-module)。

2.4.1 集群节点规划

根据官方推荐,为保证集群性能,我们至少需要6台服务器进行部署(这里不实现高可用,要实现高可用至少的需要8台服务器,或者说是8个节点,下文再议)。规划如下:
  • 2台用于部署Tracker Server 性能不比很高。

  • 4台 (2个group,每个group 两个节点)用于部署Storage Server,性能需有所保障。

服务器(IP) 服务
xxx.xxx.1.101 Tracker01
xxx.xxx.1.102 Tracker02
xxx.xxx.1.201 Storage01(group01)
xxx.xxx.1.202 Storage02(group01)
xxx.xxx.1.203 Storage01(group02)
xxx.xxx.1.204 Storage02(group02)
image-20210420175732095

2.4.2 节点部署

参照2.2.1章节,所有节点完成安装。(不需要配置哦,配置才是重头戏)

2.4.3 Tracker 节点配置

# 1.复制tracker样例配置文件,并重命名
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf

# 2.修改tracker.conf配置文件
 vim /etc/fdfs/tracker.conf
# 修改的内容如下:
disabled=false              # 启用配置文件
port=22122                  # tracker服务器端口(默认22122)
base_path=/opt/fastdfs/data  # 存储日志和数据的根目录
#其它参数保留默认配置, 具体配置解释可参考官方文档说明:http://bbs.chinaunix.net/thread-1941456-1-1.html

# 3.创建base_path指定的目录
 mkdir -p /opt/fastdfs/data

# 4.防火墙中打开tracker服务器端口( 默认为 22122)
vim /etc/sysconfig/iptables
#添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
#重启防火墙:
service iptables restart

# 5.启动tracker服务器
service fdfs_trackerd start

#初次启动,会在/fastdfs/tracker目录下生成logs、data两个目录:
#检查FastDFS Tracker Server是否启动成功:ps -ef | grep fdfs_trackerd

# 6.停止tracker服务器
service fdfs_trackerd stop

# 7.设置tracker服务开机启动
chkconfig fdfs_trakcerd on

2.4.4 Storage节点配置

# 1.复制storage样例配置文件,并重命名
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf

# 2.编辑配置文件
vim /etc/fdfs/storage.conf
# 修改的内容如下
disabled=false                      # 启用配置文件
port=23000                          # storage服务端口
group_name=group1                   # 组名(第一组为group1,第二组为group2,依次类推...)
base_path=/opt/fastdfs/data          # 数据和日志文件存储根目录
store_path0=/opt/fastdfs/data        # 第一个存储目录,第二个存储目录起名为:store_path1=xxx,其它存储目录名依次类推...
store_path_count=1                  # 存储路径个数,需要和store_path个数匹配
tracker_server=xxx.xxx.1.101:22122  # tracker01服务器IP和端口
tracker_server=xxx.xxx.1.102:22122  # tracker02服务器IP和端口
http.server_port=8888               # http访问文件的端口
#其它参数保留默认配置, 具体配置解释可参考官方文档说明:http://bbs.chinaunix.net/thread-1941456-1-1.html

# 3.创建基础数据目录
mkdir -p /opt/fastdfs/data

# 4.防火墙中打开storage服务器端口( 默认为 23000)
vim /etc/sysconfig/iptables
#添加如下端口行
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
#重启防火墙
service iptables restart

# 5.启动storage服务器
service fdfs_storaged start
#初次启动,会在/fastdfs/storage目录下生成logs、data两个目录。
#检查FastDFS Tracker Server是否启动成功
ps -ef | grep fdfs_storaged

#各节点启动后,使用tail -f /opt/fastdfs/storage/logs/storaged.log命令监听存储节点的日志,可以看到存储节点链接到跟踪服务器,并提示哪一个为leader跟踪服务器,同时也能看到同一组中其它节点加入进来的日志信息。
#所有存储节点都启动之后,可以在任一存储节点上使用如下命令查看集群的状态信息:
fdfs_monitor /etc/fdfs/storage.conf
 
# 6.停止storage服务器
service fdfs_storaged stop

# 7.设置storage服务开机启动
chkconfig fdfs_storaged on

2.4.5 Client 配置

# 1.复制client样例配置文件,并重命名
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf

# 2.编辑配置文件
vim /etc/fdfs/client.conf
#修改以下参数:
base_path=/opt/fastdfs/data
tracker_server=xxx.xxx.1.101:22122
tracker_server=xxx.xxx.1.102:22122

#3. 测试上传文件
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/V6.03.tar.gz

#4. 查看上传结果,返回以下ID号,说明文件上传成功:
group1/M00/00/00/xxx.tar.gz
group2/M00/00/00/xxx.tar.gz
#(从返回的ID号中也可以看出,同一个文件分别存储在两个组内group1和group2,但也有可能在同一组中,具体策略是由FastDFS根据服务器的存储情况来分配的)

2.4.6 Storage节点上部署http服务

参照2.2.3章节,唯一区别是需要修改以下3.2步骤的配置

#3.2. 复制并修改mod_fastdfs.conf
cp /usr/local/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/ && \
vim /etc/fdfs/mod_fastdfs.conf
#第一组存储服务器的mod_fastdfs.conf修改以下参数
connect_timeout=10
base_path=/tmp
tracker_server=xxx.xxx.1.101:22122
tracker_server=xxx.xxx.1.102:22122
storage_server_port=23000
group_name=group1                       # 第一组storage的组名
url_have_group_name=true
store_path0=/opt/fastdfs/data
group_count=2 #与以下组对应
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs/data
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs/data

#第二组存储服务器的mod_fastdfs.conf修改以下参数
connect_timeout=10
base_path=/tmp
tracker_server=xxx.xxx.1.101:22122
tracker_server=xxx.xxx.1.102:22122
storage_server_port=23000
group_name=group1                       # 第二组storage的组名,只有group_name不同
url_have_group_name=true
store_path0=/opt/fastdfs/data
group_count=2 #与以下组对应
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs/data
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs/data

#回到2.2.3 的步骤 3.3 直至完成安装

#特别提醒:
#1、8888 端口值要与/etc/fdfs/storage.conf 中的 http.server_port=8888 相对应,因为 http.server_port 默认为 8888,如果想改成 80,则要对应修改过来。
#2、Storage 对应有多个 group 的情况下,访问路径带 group 名,如:http://xxxx/group1/M00/00/00/xxx, 对应的 Nginx配置为:
location ~/group([0-9])/M00 {
    ngx_fastdfs_module;
}
#3、如下载时如发现老报 404,将nginx.conf第一行user nobody;修改为user root;后重新启动。

2.4.7 Tracker 节点上配置http访问的反向代理、负载均衡以及缓存服务

2.4.7.1 安装Nginx

# 1.安装Nginx所需的依赖包
yum install -y pcre-devel zlib-devel openssl openssl-devel
# 2.下载ngx_cache_purge模块
#下载
wget https://github.com/FRiCKLE/ngx_cache_purge/archive/refs/tags/2.3.tar.gz
#解压到指定目录
tar -zxvf 2.3.tar.gz -C /usr/local/ 

# 3.安装NGINX
# 3.1 下载二进制安装包
wget http://nginx.org/download/nginx-1.16.1.tar.gz

# 3.2 解压并进入目录
tar -zxvf nginx-1.16.1.tar.gz && \
cd nginx-1.16.1

# 3.3 配置
./configure --add-module=/usr/local/ngx_cache_purge-2.3

# 3.4编译并安装
make && make install

2.4.7.2 配置Nginx

# 1.配置Nginx,设置tracker负载均衡以及缓存
vim /usr/local/nginx/conf/nginx.conf
# 修改以下配置
worker_processes  4; #跟CPU核数保持一致
events {
    use epoll;
}
http {
    tcp_nopush     on;
    #设置缓存
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 300m;
    proxy_redirect off;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 90;
    proxy_send_timeout 90;
    proxy_read_timeout 90;
    proxy_buffer_size 16k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k; #设置缓存存储路径、存储方式、分配内存大小、磁盘最大空间、缓存期限 
    proxy_temp_path /opt/cache/fastdfs/nginx/proxy_cache/tmp;

    #设置 group1 的服务器
    upstream fdfs_group1 {
         server xxx.xxx.1.201:8888 weight=1 max_fails=2 fail_timeout=30s;
         server xxx.xxx.1.202:8888 weight=1 max_fails=2 fail_timeout=30s;
    }

    #设置 group2 的服务器
    upstream fdfs_group2 {
         server xxx.xxx.1.203:8888 weight=1 max_fails=2 fail_timeout=30s;
         server xxx.xxx.1.204:8888 weight=1 max_fails=2 fail_timeout=30s;
    }

    server {
        #设置 group 的负载均衡参数
        location /group1/M00 {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_cache http-cache;
            proxy_cache_valid  200 304 12h;
            proxy_cache_key $uri$is_args$args;
            proxy_pass http://fdfs_group1;
            expires 30d;
        }

        location /group2/M00 {
            proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_cache http-cache;
            proxy_cache_valid 200 304 12h;
            proxy_cache_key $uri$is_args$args;
            proxy_pass http://fdfs_group2;
            expires 30d;
        }

        #设置清除缓存的访问权限
        location ~/purge(/.*) {
            allow 127.0.0.1;
            allow 192.168.1.0/24;
            deny all;
            proxy_cache_purge http-cache $1$is_args$args;
        }
    } 
}

# 按以上 nginx 配置文件的要求,创建对应的缓存目录
mkdir -p /opt/cache/fastdfs/nginx/proxy_cache/tmp

2.4.7.3 启动Nginx并测试

# 1.启动Nginx(设置开机启动等,请参考以上文章)
service nginx start 
# 2.文件访问测试
# 2.1前面直接通过访问Storage节点中的Nginx访问文件(浏览器输入)
http://xxx.xxx.1.201:8888/group1/M00/00/00/xxx.tar.gz
http://xxx.xxx.1.203:8888/group2/M00/00/00/xxx.tar.gz
# 2.2 现在可以通过Tracker中的Nginx来进行访问:
# 2.2.1通过 Tracker01 中的 Nginx 来访问
http://xxx.xxx.1.101:80/group1/M00/00/00/xxx.tar.gz
http://xxx.xxx.1.101:80/group2/M00/00/00/xxx.tar.gz
# 2.2.通过 Tracker02 中的 Nginx 来访问
http://xxx.xxx.1.102:80/group1/M00/00/00/xxx.tar.gz
http://xxx.xxx.1.102:80/group2/M00/00/00/xxx.tar.gz
#由上面的文件访问效果可以看到,每一个Tracker中的Nginx都单独对后端的Storage组做了负载均衡,但整套FastDFS集群,如果想对外提供统一的文件访问地址,还需要对两个Tracker中的Nginx进行HA集群。

2.5 FastDFS集群高可用实现(策划中)

2.5.1 高可用规划

3.FastDFS 数据处理

3.1 迁移到全新的FastDFS

3.1.1 部署全新的FastDFS

<!--参照单机版部署方案完成部署,切记不要启动任何节点-->

3.1.2 Storage连接即将被迁移的Tracker

#编辑storage配置,修改tracker_server连接即将被迁移的Tracker
vim /etc/fdfs/storage.conf
#修改成
tracker_server = old_tracker_ip:22122 

3.1.3 启动Storage节点

service fdfs_storaged restart

3.1.4 在老FastDFS服务器上查看同步进程

fdfs_monitor /etc/fdfs/client.conf

找到新添加的storage节点,关注以下信息

Storage n:
id = x.x.x.x
ip_addr = x.x.x.x (anantes-651-1-49-net.w2-0.abo.wanadoo.fr)  WAIT_SYNC/SYNCING/ACTIVE/OFFLINE
total_sync_in_bytes 
success_sync_in_bytes
total_sync_out_bytes
success_sync_out_bytes
total_file_open_count
success_file_open_count
total_file_read_count
success_file_read_count
total_file_write_count
success_file_write_count
last_heart_beat_time 
last_source_update
last_sync_update
last_synced_timestamp

当该节点显示为ACTIVE时,表示同步成功。

3.1.5 停止storage节点

service fdfs_storaged stop

3.1.6 Storage连接全新的的Tracker

#编辑storage配置,修改tracker_server连接全新的Tracker
vim /etc/fdfs/storage.conf
#修改成
tracker_server = new_tracker_ip:22122 

3.1.7 修改.data_init_flag文件

该文件所在位置为storage.conf文件中所配置的base_path路径后面的data路径下。如配置为/opt/fastdfs, 则文件所在位置为/opt/fastdfs/data/下
#将文件中sync_src_server配置项留空,其它配置项不变
sync_src_server=

3.1.8 启动所有进程

启动新的tracker服务器进程和storage服务器进程

#启动tracker
service fdfs_trackerd start
#启动storage
service fdfs_storaged start

查看Storage状态

fdfs_monitor /etc/fdfs/client.conf

关注以下参数

Storage n:
id = x.x.x.x
ip_addr = x.x.x.x (anantes-651-1-49-net.w2-0.abo.wanadoo.fr)  WAIT_SYNC/SYNCING/ACTIVE/OFFLINE
total_sync_in_bytes 
success_sync_in_bytes
total_sync_out_bytes
success_sync_out_bytes
total_file_open_count
success_file_open_count
total_file_read_count
success_file_read_count
total_file_write_count
success_file_write_count
last_heart_beat_time 
last_source_update
last_sync_update
last_synced_timestamp

至此数据迁移完成,如需配置http服务,请参考 2.2.3部署HTTP服务

3.2 合并到已有的FastDFS(策划中)

3.3 清理磁盘,清除FastDFS所有文件(线上环境不推荐)

# 1.查看磁盘使用率
df -h

# 2.停止trackerd 与 storaged
service fdfs_trackerd stop
service fdfs_storaged stop

# 3.删除图片存储目录。
 rm -rf /opt/fastdfs/data/*(文件存储目录)
 
# 4.启动trackerd 与 storaged
 service fdfs_trackerd start
 service fdfs_storaged start

# 5.查看状态
fdfs_monitor /etc/fdfs/client.conf

3.4 单机版FastDFS扩容

当你发现新文件再也无法继续上传至FastDFS时,极大地可能性是FastDFS存储空间已经不够用了(可通过 `df -h` 命令进行查看)。此时你将需要加新的磁盘,也就是需要加存储目录。基于FastDFS文件服务器的特性,在做扩容时,可采取如下两种方案:

1.基于group扩容,配置多个存储文件目录地址。
2.基于存储节点扩容,新加服务器配置多个storage。

3.4.1 基于group存储空间扩容

此扩容方案是通过给`group`所在机器添加新硬盘的方式,实现该`group`的扩容。

FastDFS在一台服务器支持多个`store_path`,每个`store_path`指向一个存储路径。如:`M00/00/06/wKgBe1xOehmATFFpAAAAAAAAAAA042.txt` 中`M00`表示使用`store_path0`。

如果没有配置`store_path`,就使用`base_path`的路径。添加了硬盘后,通过把新的`store_path`指向新硬盘的挂载点,再修改配置文件,就能实现`group`的扩容。扩容后的地址如:`M01/00/04/wKgBe1xOehmATFFpAAAAAAAAAAA042.txt`中`M01`表示使用`store_path1`。

`group`模式扩容主要步骤如下:
# 1.停止现有的tracker服务,storage服务。
service fdfs_trackerd stop
service fdfs_storaged stop
# 2.挂载新的磁盘(过程略)

# 3.修改tracker.conf配置文件
vi /etc/fdfs/tracker.conf
#修改以下参数为2,上传时选择路径规则。(取值只有0和2。0:轮询(默认);2:负载均衡,选择可用空间最大的文件夹)
store_path=2

# 4.修改storage.conf配置文件
vi /etc/fdfs/storage.conf
#将以下参数值改为2
store_path_count=2 
#新增存储路径store_path1(必须存在的路径,需提前手动创建 mkdir -p /data/fastdfs)
store_path1=/data/fastdfs

# 5.修改mod_fastdfs.conf配置文件
vi /etc/fdfs/mod_fastdfs.conf
#修改以下参数为2
store_path_count=2
#新增存储路径store_path1
store_path1=/data/fastdfs(同storage.conf 一致)

# 6.启动tracker,storage服务
service fdfs_trackerd start
service fdfs_storaged start

#7.查看状态
fdfs_monitor /etc/fdfs/client.conf

# 8.修改nginx.conf配置文件并重载nginx
vi /usr/local/nginx/conf/nginx.conf
# 添加store_path1的路径
location ~/group[0-9]/M00 {
            alias   /opt/fastdfs/data/;
            ngx_fastdfs_module;
        }
location ~/group[0-9]/M01 {
            alias   /data/fastdfs/data/;
            ngx_fastdfs_module;
        }
# nginx加载配置文件
nginx -s reload

# 9.测试上传
/usr/bin/fdfs_test /etc/fdfs/client.conf upload test.txt

3.4.2 添加多个storage

# 1.挂载新的磁盘(过程略)

# 2.复制storage配置一份并重命名为storageX.conf
cp /etc/fdfs/storage.conf /etc/fdfs/storage1.conf

# 3.修改storage1.conf配置
# 3.1修改组名
group_name=group2
# 3.2修改端口
port=23001
# 3.3修改日志文件目录
base_path=/data/fastdfs(必须存在的路径,需提前手动创建 mkdir -p /data/fastdfs)
# 3.4修改资源保存路径
store_path0=/data/fastdfs

# 4.修改mod_fastdfs.conf配置
vi /etc/fdfs/mod_fastdfs.conf
# 4.1修改组名,多个用/区分开 可设置多组
group_name=group1/group2/...
# 4.2设置组个数
group_count = 2
# 4.3设置每一组信息
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs
[group2]
group_name=group2
storage_server_port=23001 #特别提醒:防火墙需要放行
store_path_count=1
store_path0=/data/fastdfs
[...] #以此类推


# 5.修改mod_fastdfs.conf配置
vi /etc/fdfs/mod_fastdfs.conf
# 修改以下参数
url_have_group_name=true

# 6.启动新的storage节点
service fdfs_storaged /etc/fdfs/storage1.conf

# 7.fastdfs的状态查询
fdfs_monitor /etc/fdfs/client.conf

FDFS_STORAGE_STATUS:INIT      :初始化,尚未得到同步已有数据的源服务器
FDFS_STORAGE_STATUS:WAIT_SYNC :等待同步,已得到同步已有数据的源服务器
FDFS_STORAGE_STATUS:SYNCING   :同步中
FDFS_STORAGE_STATUS:DELETED   :已删除,该服务器从本组中摘除
FDFS_STORAGE_STATUS:OFFLINE   :离线
FDFS_STORAGE_STATUS:ONLINE    :在线,尚不能提供服务
FDFS_STORAGE_STATUS:ACTIVE    :在线,可以提供服务

# 8.修改nginx.conf配置文件并重载nginx
vi /usr/local/nginx/conf/nginx.conf
## 添加store_path1的路径
location ~/group[0-9]/M00 {
            alias   /opt/fastdfs/data/;
            ngx_fastdfs_module;
        }
location ~/group[0-9]/M01 {
            alias   /data/fastdfs/data/;
            ngx_fastdfs_module;
        }
# nginx加载配置文件
nginx -s reload

# 9.测试上传
/usr/bin/fdfs_test /etc/fdfs/client.conf upload test.txt

鸣谢
致力于技术的相关博主
致力于开源的相关大神

作者:javaeer

原文链接:https://www.jianshu.com/p/e1092883820b

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐