部署 FastDFS 分布式存储系统

1. FastDFS

​ fastdfs 是一个由C语言开发的 分布式的存储系统,比较适合存储一些 视频、音频、文档(4kb)、图片。

功能包括: 文件存储、文件同步、文件访问、文件上传、下载, 适合做 以文件为载体的在线功能,例如 图片网站、视频网站等等

2. FastDFS 组成部分

​ FastDFS 由 客户端(client)、跟踪服务器(Tracker Server)、 存储服务器(Storage Server) 组成

​ 1) CLient: 存储的客户端,负责进行文件的存储和上传,这些操作在客户端操作,每个客户端都需安装 Nginx

​ 2) Tracker server: 跟踪服务器, 管理后端存储节点,来自客户端的请求进行识别并指定对应的后端节点给与响应( 负责接收客户端的请求)。

​ 3) Storage server: 存储服务器,存储数据分为了 若干个小组,负责响应文件存储,下载、查看等等。

3. 工作流程

1) 文件上传流程


在这里插入图片描述


​ 跟踪服务器( Tracker) 与 存储服务器(Storage) 会进行心跳检测,并将 storage 中的 节点状态发送给 Tracker 服务器

​ 当客户端向 Tracker 发送上传的请求,Tracker 收到后根据Storage 状态向 客户端分配 group ,并将 storage 的地址与端口 返回给 Client。

​ Client 将要上传的文件 传输给 Storage的服务器,Storage 将收到的文件进行存储,并生成一个 文件-ID, 并将文件ID 返回给 Client 。

​ Client 可凭着 文件-ID 对文件进行查看、下载、删除等操作

2) 文件下载流程


在这里插入图片描述


​ 跟踪服务器( Tracker) 与 存储服务器(Storage) 会进行心跳检测,并将 storage 中的 节点状态发送给 Tracker 服务器

​ 当客户端向Tracker 发送 下载请求,Tracker 根据请求 ID分配 可用的 storage ,并将其地址与端口返回给 Client 。

​ Client 根据 Tracker 返回的 storage 的地址将 文件-ID发送给 Storage ,Storage 根据 文件-ID 查看文件,查到对应文件将其返回给 客户端

​ client 收到文件,下载完成

3) 整体架构图


在这里插入图片描述


1)	每个小组内的数据完全相同

​ 2) 各个小组的小数据没有重复,加起来是总体数据

3. 部署 FastDFS 分布式存储系统

在这里插入图片描述


实验环境:

​ Client : 192.168.116.101 Nginx、FastDFS

​ Tracker 1: 192.168.116.102 FastDFS

​ Tracker 2: 192.168.116.103 FastDFS

​ Storage: Nginx FastDFS

​ group 1-1: 192.168.116.104

​ group 1-2: 192.168.116.105

​ group 2-1: 192.168.116.106

​ group 2-2: 192.168.116.107

PS: 实验环境,将所有防火墙,Selinux关闭,生产环境开启对应端口即可


1) 为所有主机安装 FastDFS

  • 同步所有主机的时间
[root@localhost ~]# ntpdate net.ntsc.ac.cn
  • 安装 FastFDS 依赖关系
    • 由于 FastDFS 是 C语言编写,需要安装 C语言环境
[root@localhost ~]# yum -y install libtool autoconf automake pcre-devel zlib-devel openssl-devel gcc gcc-c++
  • 创建 FastFDS 数据、日志目录
    • 该目录为配置文件中的 默认目录,提前创建以免遗漏
[root@localhost ~]# mkdir -p /home/yuqing/fastdfs
  • 解压
[root@localhost ~]# tar -zxf fastdfs.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/

[root@localhost src]# ls
fastdfs  fastdfs-nginx-module  libfastcommon

​	fastdfs			# FastDFS 的主程序,源码包

​	libfastcommon			# 包含了 FastDFS运行所需要的基础库
	
	fastdfs-nginx-module			# 存放了 FastDFS与Nginx 需要的模块


  • 编译安装 FastDFS
    • 在源码包内,安装编译
[root@localhost src]# cd libfastcommon/ && ./make.sh && ./make.sh install && cd ..

[root@localhost src]# cd fastdfs && ./make.sh && ./make.sh install && cd ..
  • 生成 Client 、Tracker、 Storage 所需要的配置文件
    • 为了防止混乱,所有主机执行统一操作,主机只使用对应的配置文件
    • 当然了,也可以在对应的 服务器生成对应的配置文件
[root@localhost src]# pwd
/usr/local/src

[root@localhost src]# cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
		# Tracker 配置文件
[root@localhost src]# cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
		# Storage 配置文件
[root@localhost src]# cp /etc/fdfs/client.conf.sample /etc/fdfs//client.conf
		# Client 配置文件

[root@localhost src]# cp fastdfs/conf/http.conf /etc/fdfs/		
[root@localhost src]# cp fastdfs/conf/mime.types /etc/fdfs/
	# 以上两个文件,用于 与 Nginx 使用。

2) 部署Storage Server

  • 之前 FastDFS 已安装
  • 安装 Nginx
    • 与平时安装有一点点区别
[root@localhost ~]#  useradd -M -s /sbin/nologin nginx
[root@localhost ~]#  tar -zxf nginx-1.12.2.tar.gz 
[root@localhost ~]#  cd nginx-1.12.2
[root@localhost nginx-1.12.2]#  ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --add-module=/usr/local/src/fastdfs-nginx-module/src/ && make && make install
	# 添加 nginx与 FastDFS 连接的模块

[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
  • 将mod_fastdfs.conf 文件copy 到/etc/fdfs 目录下
[root@localhost ~]# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
  • 修改 Storage storage.conf 配置文件

    • group 1-1
[root@localhost ~]# vim /etc/fdfs/storage.conf

group_name=group1				

bind_addr=192.168.116.104

port=23000

base_path=/home/yuqing/fastdfs

max_connections=1024				

store_path0=/home/yuqing/fastdfs		

tracker_server=192.168.116.102:22122		
tracker_server=192.168.116.103:22122

http.server_port=8888				

参数含义:

group_name=group1					# 组名,默认属于 第一组

bind_addr=192.168.116.104			# 绑定自身IP地址

port=23000							# Storage 监听的端口号

base_path=/home/yuqing/fastdfs		# 存放数据、日志的路径

max_connections=1024				# 最大连接数据

store_path0=/home/yuqing/fastdfs		# 第一个存储数据的目录

tracker_server=192.168.116.102:22122		# 指定 Tracker 的地址
tracker_server=192.168.116.103:22122

http.server_port=8888				# nginx 端口

  • group 1-2

    • 大多数保持默认即可,如有特殊需求,可以自行更改
    [root@localhost ~]# vim /etc/fdfs/storage.conf
    
    group_name=group1				# 默认组名
    
    bind_addr=192.168.116.105		# 更改自身IP地址
    
    tracker_server=192.168.116.102:22122		
    tracker_server=192.168.116.103:22122
    
  • group 2-1

    • 第二组,将组名改为 group2
[root@localhost ~]# vim /etc/fdfs/storage.conf

group_name=group2				

bind_addr=192.168.116.106

tracker_server=192.168.116.102:22122		
tracker_server=192.168.116.103:22122
  • group 2-2
[root@localhost ~]# vim /etc/fdfs/storage.conf

group_name=group2 			

bind_addr=192.168.116.107

tracker_server=192.168.116.102:22122		
tracker_server=192.168.116.103:22122

  • 修改 Storage mod_fastdfs.conf 配置文件
    • group 1-1:
[root@localhost ~]# vim /etc/fdfs/mod_fastdfs.conf 

base_path=/home/yuqing/fastdfs				# 默认的存储 数据、日志目录

tracker_server=192.168.116.102:22122		# 指定Tracker 地址
tracker_server=192.168.116.103:22122

group_name=group1						# 当前组名

url_have_group_name = true				# 是否开启存储数据ID标识组名

group_count = 2							# 当前游街有几个 storage 组

# 去掉注释
[group1]								
group_name=group1							# 组名
storage_server_port=23000					# 服务端口
store_path_count=1							# 存储路径个数
store_path0=/home/yuqing/fastdfs			 # 存储路径


# 去掉注释
[group2]				
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/home/yuqing/fastdfs
  • 4、5、6、7 主机配置文件相差不大,scp 配置文件
[root@localhost ~]# scp /etc/fdfs/mod_fastdfs.conf [email protected]:/etc/fdfs/

[root@localhost ~]# scp /etc/fdfs/mod_fastdfs.conf [email protected]:/etc/fdfs/

[root@localhost ~]# scp /etc/fdfs/mod_fastdfs.conf [email protected]:/etc/fdfs/
  • 在 group 2 组内将其组名改为 group2

  • 修改 Nginx 配置文件(四台都需要)
    • 添加一个 Server 模块, 监听 8888 端口, 凡是访问 group开头的请求,一律交给 ngx_fastdfs_module 模块进行处理。
    • 一般用于查看数据
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
	
server {
    listen 8888;
    server_name localhost;

    location ~/group[0-9]/M00/ {
            ngx_fastdfs_module;
    }

}
  • 启动 Nginx
[root@localhost ~]# nginx
ngx_http_fastdfs_set pid=4709
  • 启动 Storage
[root@localhost ~]# /etc/init.d/fdfs_storaged start
Reloading systemd:                                         [  OK  ]
Starting fdfs_storaged (via systemctl):                    [  OK  ]

2) 部署 Tracker Server

  • FastFDS 以安装
  • Tracker 1 修改 tracker.conf 配置文件
[root@localhost src]# vim /etc/fdfs/tracker.conf

bind_addr=192.168.116.102				# 本机IP地址

port=22122

base_path=/home/yuqing/fastdfs
  • Tracker 2 修改 tracker.conf 配置文件
[root@localhost src]# vim /etc/fdfs/tracker.conf

bind_addr=192.168.116.103

port=22122

base_path=/home/yuqing/fastdfs
  • Tracker 启动
[root@localhost src]# /etc/init.d/fdfs_trackerd start
Reloading systemd:                                         [  OK  ]
Starting fdfs_trackerd (via systemctl):                    [  OK  ]

3) Client 部署

  • FastFDS 以安装
  • 安装NGinx
[root@localhost ~]#  useradd -M -s /sbin/nologin nginx
[root@localhost ~]#  tar -zxf nginx-1.12.2.tar.gz 
[root@localhost ~]#  cd nginx-1.12.2
[root@localhost nginx-1.12.2]#  ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install

[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
  • 修改 Client 配置文件
[root@localhost ~]# vim /etc/fdfs/client.conf

base_path=/home/yuqing/fastdfs				# 该目录存储日志

tracker_server=192.168.116.102:22122		# 指定 Tracker 地址
tracker_server=192.168.116.103:22122



  • 部署 Nginx 反向代理
    • 查看存储文件时,通过 Nginx 反向代理查看
    • 根据不同的请求转发至不同的 group
http {
	………………
upstream fdfs_group1 {
    server 192.168.116.104:8888 max_fails=2 fail_timeout=30s;
    server 192.168.116.105:8888 max_fails=2 fail_timeout=30s;
    }
upstream fdfs_group2 {
    server 192.168.116.106:8888 max_fails=2 fail_timeout=30s;
    server 192.168.116.107:8888 max_fails=2 fail_timeout=30s;
    }
    
   server {
   	…………
        location ~/group1 {
                proxy_pass http://fdfs_group1;
        }
        location ~/group2 {
                proxy_pass http://fdfs_group2;
        }
}
}
  • 启动 Nginx
[root@localhost ~]# nginx

4) 上传文件、查看文件、下载文件、删除文件

  • 上传 test.png图片

[root@localhost ~]# fdfs_upload_file /etc/fdfs/client.conf /root/test.jpg 
group1/M00/00/00/wKh0aF5fYBSABIBdABAx2GU8yhU055.jpg
  • 查看 上传的图片

    • 根据返回的 ID 进行查看
    • http://192.168.116.101/group1/M00/00/00/wKh0aF5fYBSABIBdABAx2GU8yhU055.jpg

在这里插入图片描述


  • 下载文件

[root@localhost ~]# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKh0aF5fYBSABIBdABAx2GU8yhU055.jpg /root/test2.jpg
[root@localhost ~]# ls /root/test2.jpg 
/root/test2.jpg

  • 删除文件

[root@localhost ~]# fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKh0aF5fYBSABIBdABAx2GU8yhU055.jpg
  • 再次查看

在这里插入图片描述


4. 操作命令

1) 上传文件

	fdfs_upload_file  client.config file_path
	fdfs_upload_file 				# 上传文件命令

​	client.confg 					# 指定客户端的 fdfs/ client.config  配置文件

​	file_path						# 所要上传的文件路径
  • 例子:
    • 执行成功后,会返回一条 数据存储 ID 可根据此ID查看、删除、下载
[root@localhost ~]# fdfs_upload_file /etc/fdfs/client.conf /root/up.png 
group1/M00/00/00/wKh0aF5fKuqARMPxAAG43D0gda8482.png

2) 查看文件

​ 访问 客户端的IP地址+返回的数据存储ID

​ http://Client-ip/data-id

3) 下载文件

fdfs_download_file client.conf-path file-id
fdfs_download_file				# 删除文件命令字

client.conf-path				# client.conf 文件的路径

file-id							# 上传成功返回的ID

例子:

[root@localhost ~]# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKh0aF5fKuqARMPxAAG43D0gda8482.png /root/up2.png
[root@localhost ~]# ls /root/up2.png
/root/up2.png

4) 删除文件

dfds_delete_file client.conf file-id
dfds_delete_file  			# 删除命令字

client.conf					# client.conf 配置文件的路径

file-ID						# 上传后返回的ID

例子:

[root@localhost ~]# fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKh0aF5fKuqARMPxAAG43D0gda8482.png
发布了15 篇原创文章 · 获赞 2 · 访问量 664

猜你喜欢

转载自blog.csdn.net/RunzIyy/article/details/104656398