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 架构
如图所示,存在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文件上传时序图
上传文件交互过程
-
client
询问tracker
上传到的storage
,不需要附加参数; -
tracker
返回一台可用的storage
-
client
直接和storage
通讯完成文件上传
1.2.3 FastDFS文件下载时序图
下载文件交互过程
-
client
询问tracker
下载文件的storage
,参数为文件标识(卷名和文件名); -
tracker
返回一台可用的storage
; -
client
直接和storage
通讯完成文件下载。
1.3 FastDFS特点
1)分组存储,简单灵活;
2)对等结构,不存在单点;
3)文件ID
由FastDFS生成,作为文件访问凭证。FastDFS不需要传统的nameserver
或metaserver
;
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) |
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