深度解析FastDFS:构建高效分布式文件存储的实战指南(上)

文章目录

  • 一、FastDFS简介
    • 1.1 概述
    • 1.2 特性
  • 二、FastDFS原理架构
    • 2.1 FastDFS角色
    • 2.2 存储策略
    • 2.3 上传过程
    • 2.4 文件同步
    • 2.5 下载过程
  • 三、FastDFS适用场景
  • 四、同类中间件对比
    • 4.1 FastDFS和集中存储方式对比
    • 4.2 FastDFS与其他文件系统的对比
  • 五、FastDFS部署
    • 5.1 单机部署
      • 5.1.1 使用的系统软件
      • 5.1.2 编译环境
      • 5.1.3 安装libfastcommon
      • 5.1.4 安装FastDFS
      • 5.1.5 安装fastdfs-nginx-module
      • 5.1.6 安装nginx
      • 5.1.7 tracker配置
      • 5.1.8 tracker服务启动
      • 5.1.9 storage配置
      • 5.1.10 storage服务启动
      • 5.1.11 client测试
      • 5.1.12 配置nginx访问
      • 5.1.13 nginx服务启动
      • 5.1.14 web浏览器测试
    • 5.2 集群部署
      • 5.2.1 FastDFS集群架构
      • 5.2.2 安装FastDFS相关软件
      • 5.2.3 tracker节点配置
      • 5.2.4 storage节点配置
      • 5.2.5 查看FastDFS集群状态
      • 5.2.6文件的上传
      • 5.2.7文件的下载
      • 5.2.8 文件的删除
    • 5.3 k8s部署
      • 5.3.1 创建tracker.yaml文件
      • 5.3.2 创建tracker.yaml文件
      • 5.3.3 创建service.yaml文件
      • 5.3.4 应该yaml文件
    • 5.4 FastDFS集群维护
      • 5.4.1 tracker节点维护
      • 5.4.2 storage节点维护
      • 5.4.3 fastdfs_storage七种状态

一、FastDFS简介

1.1 概述

FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问(上传、下载),以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。

FastDFS 设计是用来存储小文件的,过大的文件处理方案是拆分为小文件,可跟踪小文件的上传情况。 如果应用场景都是处理大文件,可能选择其他分布式文件系统方案会更合适。

1.2 特性

FastDFS 为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS 很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

优点:

  • 文件不分块存储,文件和系统中的文件一一对应。
  • 对文件内容做 hash 处理,避免出现重复文件,节约磁盘空间。
  • 下载文件支持 HTTP 协议,可基于内置 Web Server 或外部 Web Server。
  • 支持在线扩容,动态添加卷。
  • 支持文件冗余备份和负载均衡。
  • 存储服务器上可以保存文件属性(meta-data)
  • V2.0 网络通信采用 libevent,支持大并发访问,整体性能更好

缺点:

  • 直接按文件存储,可直接查看文件内容,缺乏文件安全性。
  • 数据同步无校验,存在静默 IO 问题,降低系统可用性。
  • 单线程数据同步,仅适合存储小文件(1)。
  • 备份数根据存储分卷(分组)决定,缺乏文件备份数设置灵活性。
  • 单个挂载点异常会导致整个存储节点下线。
  • 缺乏多机房容灾支持。
  • 静态的负载均衡机制

二、FastDFS原理架构

在这里插入图片描述

2.1 FastDFS角色

FastDFS是一个开源的轻量级分布式文件系统,由管理服务器(tracker server)、存储服务器(storage server)和客户端(client)三个部分组成

**Tracker Server:**跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server 和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。

**Storage Server:**存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。

**Client:**客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

Tracker 相当于一个调度中心,上传和下载都通过它来进行分配指定。
Storage cluster 部分,由 Volume1、Volume2……VolumeK 组成,它们称为卷(或者叫做组),卷与卷之间是平行的关系,可以根据资源的使用情况随时增加,卷内服务器文件相互同步备份,以达到容灾的目的。

2.2 存储策略

为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。

2.3 上传过程

当服务启动之后,Storage Server 会定期的向 Tracker Server 发送存储信息。如果 Tracker Server 是集群形式,则每个 Tracker 之间的关系是对等的,客户端上传时选择任意一个 Tracker 即可。

整体流程:当客户端请求 Tracker 进行上传操作时,会获取存储服务器相关信息,主要包括 IP 和端口。根据返回信息上传文件,通过存储服务器写入磁盘,并返回给客户端 file_id、路径信息、文件名等信息。
对应流程图如下:
在这里插入图片描述
其中,当 Tracker 收到客户端上传文件的请求时,会为该文件分配一个可以存储文件的 group,当选定了 group 后就要决定给客户端分配 group 中的哪一个 storage server。
当分配好 storage server 后,客户端向 storage 发送写文件请求,storage 将会为文件分配一个数据存储目录。然后为文件分配一个 fileid,最后根据以上的信息生成文件名存储文件。

生成的文件名基本格式如下:
在这里插入图片描述

  • 组名:文件上传后所在的 storage 组名称,在文件上传成功后有 storage 服务器返回, 需要客户端自行保存。
  • 虚拟磁盘路径:storage 配置的虚拟路径,与磁盘选项 store_path*对应。如果配置了 store_path0 则是 M00,如果配置了 store_path1 则是 M01,以此类推。
  • 数据两级目录:storage 服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据 文件。
  • 文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储 服务器 IP 地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

2.4 文件同步

写文件时,客户端将文件写至 group 内一个 storage server 即认为写文件成功,storage server 写完文件后,会由后台线程将文件同步至同 group 内其他的 storage server。

每个 storage 写文件后,同时会写一份 binlog,binlog 里不包含文件数据,只包含文件名等元信息,这份 binlog 用于后台同步,storage 会记录向 group 内其他 storage 同步的进度,以便重启后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内所有 server 的时钟保持同步。

storage 的同步进度会作为元数据的一部分汇报到 tracker 上,tracker 在选择读 storage 的时候会以同步进度作为参考。

2.5 下载过程

跟上传一样,在下载时客户端可以选择任意 Tracker server。

客户端带文件名信息请求 Tracker,Tracker 从文件名中解析出文件的 group、大小、创建时间等信息,然后选择一个 storage 用来服务处理请求,返回对应文件。
对应流程图如下:
在这里插入图片描述
如果是基于 Web 的 http 请求,此处的 Client 可以是 Nginx 代理服务。下面这张图更加形象的描述了相关的流程。
在这里插入图片描述

三、FastDFS适用场景

FastDFS 是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片、视频、文档等文件,不适合分布式计算场景

电商网站:海量商品图片
视频网站:海量视频文件
网盘 : 海量文件
社交网站:海量图片

四、同类中间件对比

4.1 FastDFS和集中存储方式对比

在这里插入图片描述

4.2 FastDFS与其他文件系统的对比

在这里插入图片描述

五、FastDFS部署

5.1 单机部署

说明:准备1台cento7实例,ip:192.168.52.1

5.1.1 使用的系统软件

名称说明
centos7.x
libfastcommonFastDFS分离出的一些公用函数包
FastDFSFastDFS本体
fastdfs-nginx-moduleFastDFS和nginx的关联模块,作用:访问源文件,由于上传一个大文件到一个组的一个stoage1服务器后,这里的同组的storage2将会进行进行同步复制,如果复制没有完成,用户访问值storage2的时候,那么这个将会没有办法完整访问的,所以fastdfs-nginx-module这个模块,将会查找一个源文件,也就是存在storage1的服务器上,可以访问storage1上的文件
nginxnginx1.15.4

5.1.2 编译环境

CentOS系统
# yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y
Debian系统
# apt-get -y install git gcc g++ make automake autoconf libtool pcre2-utils libpcre2-dev zlib1g zlib1g-dev openssl libssh-dev wget vim

5.1.3 安装libfastcommon

# git clone https://github.com/happyfish100/libfastcommon.git --depth 1
# cd libfastcommon/
# ./make.sh && ./make.sh install #编译安装

5.1.4 安装FastDFS

# git clone https://github.com/happyfish100/fastdfs.git --depth 1
# cd fastdfs/
# ./make.sh && ./make.sh install #编译安装

#配置文件准备
# cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
# cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf #客户端文件,测试用
# cp /usr/local/src/fastdfs/conf/http.conf /etc/fdfs/ #供nginx访问使用
# cp /usr/local/src/fastdfs/conf/mime.types /etc/fdfs/ #供nginx访问使用

5.1.5 安装fastdfs-nginx-module

# git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1
# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs

5.1.6 安装nginx

# wget http://nginx.org/download/nginx-1.15.4.tar.gz #下载nginx压缩包
# tar -zxvf nginx-1.15.4.tar.gz #解压
# cd nginx-1.15.4/

#添加fastdfs-nginx-module模块
# ./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/ 
# make && make install #编译安装

5.1.7 tracker配置

# vim /etc/fdfs/tracker.conf#需要修改的内容如下
port=22122  # tracker服务器端口(默认22122,一般不修改)
base_path=/home/dfs  # 存储日志和数据的根目录

5.1.8 tracker服务启动

/etc/init.d/fdfs_trackerd start #启动tracker服务
/etc/init.d/fdfs_trackerd restart #重启动tracker服务
/etc/init.d/fdfs_trackerd stop #停止tracker服务
chkconfig fdfs_trackerd on #自启动tracker服务

5.1.9 storage配置

# vim /etc/fdfs/storage.conf
#需要修改的内容如下
port=23000  # storage服务端口(默认23000,一般不修改)
base_path=/home/dfs  # 数据和日志文件存储根目录
store_path0=/home/dfs  # 第一个存储目录
tracker_server=192.168.52.1:22122  # tracker服务器IP和端口
http.server_port=8888  # http访问文件的端口(默认8888,看情况修改,和nginx中保持一致)

5.1.10 storage服务启动

/etc/init.d/fdfs_storaged start #启动storage服务
/etc/init.d/fdfs_storaged restart #重动storage服务
/etc/init.d/fdfs_storaged stop #停止动storage服务
chkconfig fdfs_storaged on #自启动storage服务

5.1.11 client测试

# vim /etc/fdfs/client.conf#需要修改的内容如下
base_path=/home/dfs
tracker_server=192.168.52.1:22122    #tracker服务器IP和端口

#保存后测试,返回ID表示成功 如:group1/M00/00/00/xx.tar.gz
# fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/nginx-1.15.4.tar.gz

5.1.12 配置nginx访问

# vim /etc/fdfs/mod_fastdfs.conf
#需要修改的内容如下
tracker_server=192.168.52.1:22122  #tracker服务器IP和端口
url_have_group_name=true
store_path0=/home/dfs

#配置nginx.config
# vim /usr/local/nginx/conf/nginx.conf
#添加如下配置
server {
    listen       8888;    ## 该端口为storage.conf中的http.server_port相同
    server_name  localhost;
    location ~/group[0-9]/ {
        ngx_fastdfs_module;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    root   html;
    }
}

5.1.13 nginx服务启动

/usr/local/nginx/sbin/nginx #启动nginx
/usr/local/nginx/sbin/nginx -s reload #重启nginx
/usr/local/nginx/sbin/nginx -s stop #停止nginx

5.1.14 web浏览器测试

#测试下载,用外部浏览器访问刚才已传过的nginx安装包,引用返回的ID
http://192.168.52.1:8888/group1/M00/00/00/wKgAQ1pysxmAaqhAAA76tz-dVgg.tar.gz
#弹出下载单机部署全部跑通

5.2 集群部署

5.2.1 FastDFS集群架构

说明:2台tracker节点、2组storage。
group1对应storage1和storage2,group2对应storage3和storage4
在这里插入图片描述

5.2.2 安装FastDFS相关软件

说明:
所有节点安装参考单机部署“5.1.3安装libfastcommon”和5.1.4安装FastDFS章节

5.2.3 tracker节点配置

FastDFS 配置文件的默认目录/etc/fdfs,操作如下:

  1. 编辑 tracker.conf 配置文件,命令 vim tracker.conf,修改如下内容:
    base_path=/tracker ##数据和日志的存放路径
    store_lookup=2 ##存储组的选择方式,负载均衡方式,这是默认方式
    store_server=0 ##存储节点的选择方式,轮询方式,这是默认方式
    store_path=2 ##存储路径的选择方式,负载均衡方式
    thread_stack_size = 128KB ##线程栈大小,默认 64K
    storage_sync_file_max_delay=600 ##存储节点间文件同步的最大延迟时间,默认 1 天,此处测试 改为 10 分钟
    rotate_error_log = true ##启用错误日志
    其他参数默认即可。
  2. 启动 tracker 服务器:
    fdfs_trackerd /etc/fdfs/tracker.conf start
    如果报错,查看日志:
    $base_path/logs/trackerd.log ,此处配置的base_path=/tracker ,
    所以日志文件路径:/tracker/logs/trackerd.log

5.2.4 storage节点配置

  1. 进入配置文件目录,使用 sample 文件复制一份 storage.conf 文件进行修改:
    cd /etc/fdfs
    cp storage.conf.sample storage.conf
  2. 编辑 storage.conf 配置文件,命令 vim storage.conf,修改如下内容:

storage1 和 storage2 的配置文件:

group_name=group1 ##组名 
base_path=/fastdfs ##基础路径,存放 storage 运行所需文件 
sync_wait_msec=1000 ##同步检查间隔时间 1000ms 
store_path0=/storage ##文件存放路径 
tracker_server=192.168.182.101:22122 ##storage 注册到 tracker1 
tracker_server=192.168.182.102:22122 ##storage 注册到 tracker2 

storage3 和 storage4 的配置文件:

group_name=group2 ##组名 
base_path=/fastdfs ##基础路径,存放 storage 运行所需文件 
sync_wait_msec=1000 ##同步检查间隔时间 1000ms 
##store_path0=/storage ##如果不配置 store_path,那么文件默认存放在${base_path}/data 下 
store_path0,实际生产环境中,尽量将所有节点的存储位置保持一致,方便管理。 
tracker_server=192.168.182.101:22122 ##storage 注册到 tracker1 
tracker_server=192.168.182.102:22122 ##storage 注册到 tracker2 
  1. 启动 storage 服务器:
在四个存储节点执行启动命令: 
fdfs_storaged /etc/fdfs/storage.conf start 
如果报错,查看日志: 
$base_path/logs/storaged.log 此处配置的 base_path=/fastdfs , 所以日志文件路径:/fastdfs/logs/storaged.log 

5.2.5 查看FastDFS集群状态

  1. 在客户端安装 FastDFS(此处选择 tracker1 作为客户端)。
  2. 配置 client.conf 文件
cp client.conf.sample client.conf 
vim client.conf 
client 的配置文件: 
base_path=/client ##配置 client 的基本目录 
tracker_server=192.168.182.101:22122 ##配置 tracker1 服务的地址 
tracker_server=192.168.182.102:22122 ##配置 tracker2 服务的地址 
  1. 使用 fdfs_monitor 命令查看 FastDFS 文件服务器的状态:
fdfs_monitor /etc/fdfs/client.conf -h 192.168.182.101 list 
fdfs_monitor /etc/fdfs/client.conf -h 192.168.182.102 list 

参数说明: 
/etc/fdfs/client.conf:客户端配置文件 
-h 192.168.182.101/-h 192.168.182.102:tracker1/tracker2 服务器的 ip 地址 
list:显示指定的 tracker 的服务器信息 

以 tracker1 192.168.182.101 为例,查询结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:如果 tracker1 和 tracker2 的信息都能查看到 group1 和 group2 的信息,说明部署成功,如果部署过程中出现问题,需要参照日志文件中的信息进行修正。

5.2.6文件的上传

上传文件命令:fdfs_upload_file 
语法: 
fdfs_upload_file <config_file> <local_filename> [storage_ip:port] [store_path_index] 
<config_file>:客户端配置文件名称,必须有。 
<local_filename>:要上传的文件名称,必须有。 
[storage_ip:port]:上传的存储节点名称,选择项。 
[store_path_index]:存储路径,选择项。 

示例,上传 testupload 文件:
在这里插入图片描述返回值文件 ID:【group 名+节点上存储目录编号+storage 节点创建的目录+加密的一个文件名】,
根据文件 ID,可以查看文件信息,使用 fdfs_file_info 命令,示例:
在这里插入图片描述

5.2.7文件的下载

下载文件命令:fdfs_download_file 
语法: 
fdfs_download_file <config_file> <file_id> [local_filename] [<download_offset> <download_bytes>] 
<config_file> :客户端配置文件,必须有 
<file_id> :要下载的文件 ID,必须有。 
[local_filename] :存储到本地的文件,选择项。 
[<download_offset> <download_bytes>]:下载偏移量、下载大小,选择项。 
示例: 
fdfs_download_file /etc/fdfs/client.conf 
group1/M00/00/00/wKi2eVZf0KuAEPaaAAAAPm9mCTM1183578 /root/testdownload

5.2.8 文件的删除

文件删除命令:fdfs_delete_file 
语法: 
fdfs_delete_file <config_file> <file_id> 
<config_file> :客户端配置文件,必须有。 
<file_id>:文件 ID,必须有。 

示例:
在这里插入图片描述

5.3 k8s部署

5.3.1 创建tracker.yaml文件

**tracker.yaml部署yaml文件**
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
    name: tracker-deploy # 部署的容器名称
    namespace: fastdfs # 部署到的命名空间
    labels:
        name: tracker-deploy
spec:# 该 Deployment 的规格说明
    replicas: 1 # 副本数
    template:
        metadata:
            labels:
                app: tracker
        spec:
            nodeSelector:
              fastdfs: tracker # 选择器,nodeSelector根据 label 指定pod起在哪台机器上,根据自身所需进行修改,必须先在节点上面定义此标签
            terminationGracePeriodSeconds: 0
            containers:
            - name: tracker
              image: fastdfs
              imagePullPolicy: IfNotPresent#获取镜像的策略 Always表示下载镜像 IfNotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
              ports:
              - containerPort: 22122
              protocol: TCP #端口协议,支持TCP和UDP,默认TCP
              volumeMounts:
              - name: tracker-volume
                mountPath: /var/fdfs
              command: ["/usr/bin/start.sh","tracker"]
            volumes:
            - name: tracker-volume
              hostPath:
                path: /home/data/fastdfs/tracker # 在宿主机上存储的地址

5.3.2 创建tracker.yaml文件

**storage.yaml部署yaml文件**
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
    name: storage0-deploy
    namespace: fastdfs
    labels:
        name: storage0-deploy
spec:
    replicas: 1
    template:
        metadata:
            labels:
                app: storage0
        spec:
            nodeSelector:
              fastdfs: storage0
            terminationGracePeriodSeconds: 0
            containers:
            - name: storage0
              image: fastdfs # 表示引用镜像的地址
              imagePullPolicy: IfNotPresent
              ports:
              - containerPort: 22122
              protocol: TCP #端口协议,支持TCP和UDP,默认TCP
              volumeMounts:
              - name: storage0-volume
                mountPath: /var/fdfs
              env:
              - name: TRACKER_SERVER
                value: 10.96.0.110:22122
              command: ["/usr/bin/start.sh","storage"]
            volumes:
            - name: storage0-volume
              hostPath:
                path: /home/data/fastdfs/storage0 #在宿主机上存储的地址

5.3.3 创建service.yaml文件

**创建tracker和storage的service文件**
apiVersion: v1
kind: Service
metadata:
    name: tracker
    labels:
        app: tracker
    namespace: fastdfs
spec:
    selector:
        app: tracker # 这里选择器一定要选择容器的标签
    type: ClusterIP
    ports:
    - name: "22122"
      port: 22122
      targetPort: 22122
      nodePort: 22122
      
---
apiVersion: v1
kind: Service
metadata:
    name: storage0
    labels:
        app: storage0
    namespace: fastdfs
spec:
    selector:
        app: storage0
    type: NodePort
    ports:
    - name: "23000"
      port: 23000
      targetPort: 23000
      nodePort: 23000

5.3.4 应该yaml文件

kubectl apply -f tracker.yaml storage.yaml service.yaml
注:资源清单应用后pod状态是running即可

5.4 FastDFS集群维护

5.4.1 tracker节点维护

tracker的添加和删除比较麻烦,不光要修改tracker的配置文件,原有的存储节点配置文件也要修改。所有tracker之间是对等的。

5.4.1.1 添加tracker节点
添加一个节点 tracker3,tracker3只监控group2,查看tracker3的状态并通过tracker3上传文件。 tracker3主机ip为192.168.182.103。参照FastDFS 的安装步骤安装 FastDFS并修改 client.conf 配置文件(将 tracker1 或 tracker2上的client.conf 直接scp到tracker3),启动 tracker3服务。

在这里插入图片描述
停止group2中storage3,storage4的存储服务
在这里插入图片描述在这里插入图片描述
修改storage3,storage4的配置文件storage.conf,添加tracker3的配置内容并保存
在这里插入图片描述
重启storage3,storage4节点,并在客户端配置文件中添加tracker3的信息
在这里插入图片描述
在客户端查看tracker3服务器的状态信息
在这里插入图片描述
发现即使在storage1和storage2中没有配置tracker3的信息,在tracker3启动后,tracker在启动后也能管理所有的group,测试上传文件
在这里插入图片描述
查看服务器存储目录下内容:
storage3和storage4中的目录全部存有上传后的file11
在这里插入图片描述
在这里插入图片描述
storage1和storage2中的目录全部存有上传后的file11
在这里插入图片描述
在这里插入图片描述
删除客户端配置文件中的tracker1和tracker2 的配置,只保留tracker3的配置
在这里插入图片描述
尝试将文件file11上传到storage1节点,仍然成功
在这里插入图片描述
查看storage1存储目录下文件
在这里插入图片描述
结论:从添加tracker3节点得出结论:即使tracker3只有group2向其注册,tracker3启动后,和其他的tracker节点是等效的,也能向其他节点监听的group中上传数据,即使其他节点停机。

注:生产环境中新增tracker节点,所有storage节点和客户端配置文件都需要添加新增tracker-ip地址。同时需要提前和相应业务沟通并发送通知

5.4.1.2 删除tracker节点

  1. 将各个storage节点配置文件中的tracker_server=IP:PORT 删除,重启storage。这样 storage节点就不再向tracker推送信息。
  2. 停止tracker节点服务
  3. 删除客户端配置文件中的tracker_server=IP:PORT

5.4.2 storage节点维护

5.4.2.1 添加storage节点

  1. 安装Storage并配置storage.conf
  2. 如果在某组中新增的storage节点,注意配置文件组名和存储路径
  3. 如果是新增1组storage节点,注意不要和现有组重名。
  4. storage节点启动服务即可
  5. 通过fdfs_monitor /etc/fdfs/client.conf查看新增storage节点信息

5.4.2.2 删除storage节点

  1. 停止storage节点服务
  2. 通过fdfs_monitor命令删除
    fdfs_monitor /etc/fdfs/client.conf delete group1
  3. 查看集群情况fdfs_monitor命令可以到对应的storage节点状态为DELETED
    fdfs_monitor /etc/fdfs/client.conf

5.4.3 fastdfs_storage七种状态

# 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    :在线,可以提供服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/919289.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Argo workflow 拉取git 并使用pvc共享文件

文章目录 拉取 Git 仓库并读取文件使用 Kubernetes Persistent Volumes&#xff08;通过 volumeClaimTemplates&#xff09;以及任务之间如何共享数据 拉取 Git 仓库并读取文件 在 Argo Workflows 中&#xff0c;如果你想要一个任务拉取 Git 仓库中的文件&#xff0c;另一个任…

Xilinx 7 系列 FPGA的各引脚外围电路接法

Xilinx 7系列FPGA的外围电路接法涉及到多个方面&#xff0c;包括电源引脚、时钟输入引脚、FPGA配置引脚、JTAG调试引脚&#xff0c;以及其他辅助引脚。 本文大部分内容由ug475, Product Specification——7 Series FPGAs Packaging and Pinout《7系列FPGA的封装与引脚》整理汇…

CDH大数据平台搭建

各大开源以及商用厂商的大数据产品汇总&#xff1a; https://zhuanlan.zhihu.com/p/675011462 Ambari 界面&#xff1a; 一、安装一个新的虚拟机 配置要求&#xff1a;8核&#xff0c;10G内存&#xff0c;最好是200G 修改yum源&#xff1a; 修改阿里云的镜像文件&#xff1…

计算机毕业设计 | SpringBoot+vue汽车资讯网站 汽车购买咨询管理系统(附源码+论文)

1&#xff0c;绪论 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理汽车资讯网站的相关信息成为必然…

24.11.19 web框架

2.2配置环境变量 2.3maven命令测试 mvn -v 测试maven查看版本 2.4maven仓库配置 配置远程仓库地址 配置本地仓库 2.5idea中配置maven 2.6通过配置idea 创建maven项目 创建项目时 构建系统 选到maven 初次创建项目时 会把maven的基础依赖库(jar包) 下载到本地仓库 需要等待一…

【Golang】——Gin 框架中的模板渲染详解

Gin 框架支持动态网页开发&#xff0c;能够通过模板渲染结合数据生成动态页面。在这篇文章中&#xff0c;我们将一步步学习如何在 Gin 框架中配置模板、渲染动态数据&#xff0c;并结合静态资源文件创建一个功能完整的动态网站。 文章目录 1. 什么是模板渲染&#xff1f;1.1 概…

【list的模拟实现】—— 我与C++的模拟实现(十四)

一、list节点 ​ list是一个双向循环带头的链表&#xff0c;所以链表节点结构如下&#xff1a; template<class T>struct ListNode{T val;ListNode* next;ListNode* prve;ListNode(int x){val x;next prve this;}};二、list迭代器 2.1、list迭代器与vector迭代器区别…

QString 转 char*问题与方法(const_cast的使用问题)

1、背景:今天有QString的变量&#xff0c;将QString的值传递给void func(char * ptr)&#xff0c;于是就有了类似下面这一段离谱的代码 当时我还在想为什么var的值为空了&#xff0c;为什么呢。 2、原因:就是因为右边函数返回的是一个临时指针对象&#xff0c;给到了右边&…

每天五分钟机器学习:支持向量机算法数学基础之核函数

本文重点 从现在开始,我们将开启支持向量机算法的学习,不过在学习支持向量机算法之前,我们先来学习一些支持向量机所依赖的数学知识,这会帮助我们更加深刻的理解支持向量机算法,本文我们先来学习核函数。 定义 核函数(Kernel Function)是一种在支持向量机(SVM)、高…

云原生之运维监控实践-使用Prometheus与Grafana实现对Nginx和Nacos服务的监测

背景 如果你要为应用程序构建规范或用户故事&#xff0c;那么务必先把应用程序每个组件的监控指标考虑进来&#xff0c;千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》 去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章&#xff0c;当…

MiniMates:一款轻量级的图片数字人驱动框架

随着数字人技术的不断发展,越来越多的应用场景开始涌现,从虚拟主播到AI伴侣,数字人的应用范围越来越广。然而,现有的数字人驱动框架往往存在性能瓶颈、依赖性强、定制难度高等问题。近期,我发现了一款名为 MiniMates 的轻量级图片数字人驱动框架,它在性能、个性化定制和终…

SpringBoot3_Web开发

4. 内容协商 一套系统适配多端数据返回 移动端&#xff1a;返回JSON数据第三方&#xff1a;返回XMLIoT&#xff1a;返回自定义协议数据 1. 默认规则 1. SpringBoot 多端内容适配 基于请求头内容协商 【默认】 客户端向服务端发送请求&#xff0c;携带HTTP标准的 Accept 请求…

C++ —— 剑斩旧我 破茧成蝶—C++11

江河入海&#xff0c;知识涌动&#xff0c;这是我参与江海计划的第2篇。 目录 1. C11的发展历史 2. 列表初始化 2.1 C98传统的{} 2.2 C11中的{} 2.3 C11中的std::initializer_list 3. 右值引用和移动语义 3.1 左值和右值 3.2 左值引用和右值引用 3.3 引用延长生命周期…

mysql复习题(实验7-8)

建立一个学生入学信息管理&#xff08;x_y&#xff09;数据库&#xff0c;设计其数据库模式为&#xff1a; 学生表&#xff08;学号&#xff0c;姓名&#xff0c;性别&#xff0c;入学成绩&#xff0c;籍贯&#xff0c;院系编号&#xff09; 院系表&#xff08;院系编号&…

详细分析ipvsadm负载均衡的命令

目录 前言1. 基本知识2. 命令参数3. 拓展 前言 LVS四层负载均衡架构详解Lvs推荐阅读&#xff1a;添加链接描述 1. 基本知识 ipvsadm 是用于管理和配置 Linux 服务器上 IP Virtual Server (IPVS) 的工具&#xff0c;是 Linux 提供的一个负载均衡模块&#xff0c;支持多种负载…

反向代理模块

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当于…

大数据新视界 -- Impala 性能突破:复杂数据类型处理的优化路径(上)(25 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Excel使用-弹窗“此工作簿包含到一个或多个可能不安全的外部源的链接”的发生与处理

文章目录 前言一、探讨问题发生原因1.引入外部公式2.引入外部数据验证二、问题现象排查及解决1.排查公式2.排查数据验证3.特殊处理方式总结前言 作为一种常用的办公软件,Excel被大家所熟知。尽管使用了多年,有时候在使用Excel时候也会发生一些不太常见的现象,需要用心核查下…

【小程序】dialog组件

这个比较简单 我就直接上代码了 只需要传入title即可&#xff0c; 内容部分设置slot 代码 dialog.ttml <view class"dialog-wrapper" hidden"{{!visible}}"><view class"mask" /><view class"dialog"><view …

跨平台WPF框架Avalonia教程 一

安装 安装 Avalonia UI 模板​ 开始使用 Avalonia 的最佳方式是使用模板创建一个应用程序。 要安装 Avalonia 模板&#xff0c;请运行以下命令&#xff1a; dotnet new install Avalonia.Templates 备注 对于 .NET 6.0 及更早版本&#xff0c;请将 install 替换为 --inst…