C++后端开发(9.1.0)——FastFDS及图床项目环境搭建

C++后端开发(9.1.0)——FastFDS及图床项目环境搭建

  • 1. 简介
  • 2. 环境搭建
    • 2.1 Nginx环境搭建
    • 2.2 安装 libfastcommon
    • 2.3 安装 FastDFS
  • 3.FastFDS架构
    • 3.1 tracker server
    • 3.2 storage server
    • 3.3 client
  • 4 配置与启动
    • 4.1 配置Tracker
    • 4.2 配置Storage
    • 4.3 启动 Tracker 和 Storage 服务
    • 4.4 测试上传文件
      • 4.4.1配置
      • 4.4.2 上传
      • 4.4.3 下载
      • 4.4.4 删除
    • 4.5 小结
  • 5 fastdfs-nginx-module安装
    • 5.0 备份原来的nginx
    • 5.1 模块包的安装
      • 5.1.1 下载fastdfs-nginx-module
      • 5.1.2 查看fastdfs-nginx-module模块src路径
      • 5.1.3 安装和编译Nginx 并添加FastDFS模块
      • 5.1.4 给 nginx 目录下的 objs/Makefile 文件中增加头文件目录
      • 5.1.5 重新编译及安装nginx
    • 5.2 fastfds-nginx-module 的配置
      • 5.2.1 拷贝配置文件
      • 5.2.2 修改配置文件
      • 5.2.3 配置nginx
      • 5.2.4 重启nginx
      • 5.2.5 测试环境

图床项目常见问题回顾

1. 简介

FastDFS是一个开源的轻量级 分布式文件系统,它对文件进行管理。
功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了 大容量存储负载均衡的问题。
特别适合以 文件 为载体的在线服务,如相册网站、视频网站等等。

2. 环境搭建

2.1 Nginx环境搭建

Nginx环境搭建

2.2 安装 libfastcommon

git clone https://github.com/happyfish100/libfastcommon.git
cd libfastcommon
git checkout V1.0.50
./make.sh
./make.sh install

2.3 安装 FastDFS

git clone https://github.com/happyfish100/libfastcommon.git
cd libfastcommon
git checkout V1.0.50
./make.sh
./make.sh install

3.FastFDS架构

FastDFS服务有三个⻆⾊: 跟踪服务器(tracker server)存储服务器(storage server)客户端(client)
C++后端开发(9.1.0)——FastFDS及图床项目环境搭建_第1张图片

3.1 tracker server

Tracker是FastDFS的协调者,负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知⾃⼰所属的group等信息,并保持周期性的⼼跳,tracker根据storage的⼼跳信息,建⽴group==>[storage server list]的映射表。
Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息⽣成的,本身不需要持久化任何数据,这样使得tracker⾮常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster⾥每个tracker之间是完全对等的, 所有的tracker都接受stroage的⼼跳信息,⽣成元数据信息来提供读写服务

3.2 storage server

Storage server(后简称storage)以组(卷,group或volume)为单位组织,⼀个group内包含多台storage机器,数据互为备份,存储空间以group内容量最⼩的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。
以group为单位组织存储能⽅便的进⾏应⽤隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),⽐如将不同应⽤数据存到不同的group就能隔离应⽤数据,同时还可根据应⽤的访问特性来将应⽤分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内地其他机器,使得恢复时间会很⻓。
group内每个storage的存储依赖于本地⽂件系统,storage可配置多个数据存储⽬录,⽐如有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个⽬录都配置为storage的数据存储⽬录。
storage接受到写⽂件请求时,会根据配置好的规则,选择其中⼀个存储⽬录来存储⽂件。为了避免单个⽬录下的⽂件数太多,在storage第⼀次启动时,会在每个数据存储⽬录⾥创建2级⼦⽬录,每级256个,总共65536个⽂件,新写的⽂件会以hash的⽅式被路由到其中某个⼦⽬录下,然后将⽂件数据直接作为⼀个本地⽂件存储到该⽬录中。

3.3 client

FastDFS向使⽤者提供基本⽂件访问接⼝,⽐如monitor、upload、download、append、delete等,以客户端库的⽅式提供给⽤户使⽤

4 配置与启动

4.1 配置Tracker

# 创建 Tracker 的存储⽇志和数据的根⽬录
mkdir -p /home/fastdfs/tracker
cd /etc/fdfs
cp tracker.conf.sample tracker.conf
# 配置 tracker.conf
vim tracker.conf

在这⾥,tracker.conf 只是修改⼀下 Tracker 存储⽇志和数据的路径

# 启⽤配置⽂件(默认为 false,表示启⽤配置⽂件)
disabled=false
# Tracker 服务端⼝(默认为 22122)
port=22122
# 存储⽇志和数据的根⽬录
base_path=/home/fastdfs/tracker

主要修改 base_path 路径

4.2 配置Storage

# 创建 Storage 的存储⽇志和数据的根⽬录
mkdir -p /home/fastdfs/storage
cd /etc/fdfs
cp storage.conf.sample storage.conf
# 配置 storage.conf
vim storage.conf

在这里,storage.conf 只是修改⼀下 storage 存储⽇志和数据的路径
主要修改:base_path、store_path0、tracker_server
Tracker 服务器 IP 地址和端⼝,单机搭建时也不要写 127.0.0.1
tracker_server 可以多次出现,如果有多个,则配置多个
tracker_server=192.168.198.128:22122

# 启⽤配置⽂件(默认为 false,表示启⽤配置⽂件)
disabled=false
# Storage 服务端⼝(默认为 23000)
port=23000
# 数据和⽇志⽂件存储根⽬录
base_path=/home/fastdfs/storage
# 存储路径,访问时路径为 M00
# store_path1 则为 M01,以此递增到 M99(如果配置了多个存储⽬录的话,这⾥只指定 1 个)
store_path0=/home/fastdfs/storage
# Tracker 服务器 IP 地址和端⼝,单机搭建时也不要写 127.0.0.1
# tracker_server 可以多次出现,如果有多个,则配置多个
tracker_server=192.168.198.128:22122
# 设置 HTTP 访问⽂件的端⼝。这个配置已经不⽤配置了,配置了也没什么⽤
# 这也是为何 Storage 服务器需要 Nginx 来提供 HTTP 访问的原因
http.server_port=8888

4.3 启动 Tracker 和 Storage 服务

# 启动 Tracker 服务
# 其它操作则把 start 改为 stop、restart、reload、status 即可。Storage 服务相同
/etc/init.d/fdfs_trackerd start
#停⽌:
/etc/init.d/fdfs_trackerd stop
#重启 :
/etc/init.d/fdfs_trackerd restart
# 启动 Storage 服务
/etc/init.d/fdfs_storaged start
#停⽌:
/etc/init.d/fdfs_storagedstop
#重启 :
/etc/init.d/fdfs_storagedrestart

可以通过对应服务的端⼝查看服务是否正常启动(如果是云服务器,注意要开放对应端口)

lsof -i:22122
lsof -i:23000

可以通过 fdfs_monitor 查看集群的情况

# 查看 Storage 是否已经注册到 Tracker 服务器中
# 当查看到 ip_addr = 192.168.198.128: (localhost.localdomain) ACTIVE
# ACTIVE 表示成功
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

4.4 测试上传文件

4.4.1配置

# 修改 Tracker 服务器客户端配置⽂件
mkdir -p /home/fastdfs/client
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
vim /etc/fdfs/client.conf

client.conf 中修改 base_path 和 Tracker 服务器的 IP 地址与端⼝号即可
主要修改base_path 和 tracker_server

# 存储⽇志⽂件的基本路径
base_path=/home/fastdfs/client
# Tracker 服务器 IP 地址与端⼝号
tracker_server=192.168.198.128:22122

4.4.2 上传

# 格式: /usr/bin/fdfs_upload_file 配置⽂件 要上传的⽂件
# 存储到 FastDFS 服务器中
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf ./client.conf

当返回⽂件 ID 号,如 group1/M00/00/00/ctepQmIWJTCAcldiAAAHuj79dAY04.conf
则表示上传成功
如果报错:tracker_query_storage fail, error no: 2, error info: No such file or directory,⼀般都是因为路径没有设置对。可以

tail -f /home/fastdfs/storage/logs/storaged.log

4.4.3 下载

查看⽂件路径

root@iZbp1d83xkvoja33dm7ki2Z:/home/fastdfs/storage/data/00/00# pwd
/home/fastdfs/storage/data/00/00
# 格式: /usr/bin/fdfs_download_file 配置⽂件 要下载的⽂件
fdfs_download_file /etc/fdfs/client.conf
group1/M00/00/00/ctepQmIWJTCAcldiAAAHuj79dAY04.conf

4.4.4 删除

# 格式: /usr/bin/fdfs_delete_file 配置⽂件 要删除的⽂件
fdfs_delete_file /etc/fdfs/client.conf
group1/M00/00/00/ctepQmIWJTCAcldiAAAHuj79dAY04.txt

查看⽂件是否已经被删除,可以进去/home/fastdfs/storage/data/00/00路径查看刚才的⽂件是否被删除

4.5 小结

以上则完成了 FastDFS 的安装与配置,可以使⽤ api 来完成⽂件的上传、同步和下载。

当然,接下来我们还会安装 Nginx。⽬的如下:

  • Storage 安装 Nginx,为了提供 http 的访问和下载服务,同时解决 group 中 torage 服务器的同步延迟问题
  • Tracker 安装 Nginx,主要是为了提供 http 访问的反向代理、负载均衡以及缓存服务

5 fastdfs-nginx-module安装

5.0 备份原来的nginx

为避免端⼝直接的冲突,建议备份原有的nginx服务。
⽐如进⼊到/usr/local/⽬录,

mv nginx bk-nginx-20220223

5.1 模块包的安装

注意:全部安装条件在确保之前的FastDFS 的tracker、storage和client可以正常使⽤。
模块包源码包本地下载路径:模块包源码

5.1.1 下载fastdfs-nginx-module

git clone https://github.com/happyfish100/fastdfs-nginx-module.git
cd fastdfs-nginx-module
git checkout V1.22

5.1.2 查看fastdfs-nginx-module模块src路径

pwd
/home/hewei/桌面/20.源码/fastdfs-nginx-module

5.1.3 安装和编译Nginx 并添加FastDFS模块

./configure --prefix=/usr/local/nginx --with-http_addition_module --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_v2_module --with-http_gzip_static_module --with-http_secure_link_module --with-stream --with-pcre=../pcre-8.44 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.1.1g --add-module=/home/hewei/桌面/20.源码/fastdfs-nginx-module/src

其中/home/hewei/桌面/20.源码/fastdfs-nginx-module/src 是刚才下载的的fastdfs_nginx_module模块的绝对路径,就是在编译Nginx时候,连同这个模块⼀起编译。

编译时, 出现以下信息表示添加成功。

C++后端开发(9.1.0)——FastFDS及图床项目环境搭建_第2张图片

5.1.4 给 nginx 目录下的 objs/Makefile 文件中增加头文件目录

vim objs/Makefile

添加

ALL_INCS = -I src/core \
-I /usr/include/fastdfs \
-I /usr/include/fastcommon \
-I src/event \
-I src/event/modules \

C++后端开发(9.1.0)——FastFDS及图床项目环境搭建_第3张图片

5.1.5 重新编译及安装nginx

make
make install

5.2 fastfds-nginx-module 的配置

5.2.1 拷贝配置文件

hewei@ubuntu:~/桌面/20.源码/fastdfs-nginx-module/src$ ls
common.c  common.h  config  mod_fastdfs.conf  ngx_http_fastdfs_module.c

hewei@ubuntu:~/桌面/20.源码/fastdfs-nginx-module/src$ pwd
/home/hewei/桌面/20.源码/fastdfs-nginx-module/src

将fastdfs-nginx-module/src/mod_fastdfs.conf 拷⻉到/etc/fdfs/下:

cp mod_fastdfs.conf /etc/fdfs/

5.2.2 修改配置文件

fastdfs的部分配置⽂件到 /etc/fdfs

cd /home/hewei/桌面/20.源码/fastdfs # 为fastdfs源码路径
cp conf/http.conf /etc/fdfs/
cp conf/mime.types /etc/fdfs/

5.2.3 配置nginx

5.2.4 重启nginx

5.2.5 测试环境

你可能感兴趣的:(后端,fastfds,nginx,linux,redis,后端,c++)