CentOS7 下 FastDFS 单节点与集群安装配置

一、FastDFS简介

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

        FastDFS 服务端有两个角色:跟踪器(tracker)和存储器(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口。FastDFS 同时对文件的 meta data 进行管理,所谓文件的 meta data 就是文件的相关属性,以键值对(keyvalue pair)方式表示,如: width=1024,其中的 key 为 width, value 为 1024。文件 meta data 是文件属性列表,可以包含多个键值对。

FastDFS 系统结构如下图所示:

https://img-blog.csdn.net/20170529200219403?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbDEwMjgzODY4MDQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

        

        跟踪器和存储节点都可以由一台多台服务器构成,跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务,其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。

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

FastDFS 上传文件交互过程:

https://img-blog.csdn.net/20170529200330822?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbDEwMjgzODY4MDQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

1. client 询问 tracker 上传到的 storage,不需要附加参数;

2. tracker 返回一台可用的 storage;

3. client 直接和 storage 通讯完成文件上传。


FastDFS 下载文件交互过程:

https://img-blog.csdn.net/20170529200828875?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbDEwMjgzODY4MDQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

1. client 询问 tracker 下载文件的 storage,参数为文件标识(卷名和文件名);

2. tracker 返回一台可用的 storage;

3. client 直接和 storage 通讯完成文件下载。

二、单节点安装配置

2.1.软件包下载

【Libfastcommon(FastDFS和FastDHT中提取出来的公共C函数库)

注意:在安装 FastDFS 前必须先安装!

https://github.com/happyfish100/libfastcommon/releases

【FastDFS主程序:

Releases · happyfish100/fastdfs · GitHub

【fastdfs-nginx-module

实现通过 HTTP 服务访问和下载 FastDFS 服务器中的文件,可以重定向文件链接到源服务器取文件,避免同一组 Storage 服务器同步延迟导致文件访问错误

Releases · happyfish100/fastdfs-nginx-module · GitHub

Nginx

nginx: download

2.2.安装libfastcommon包

# 在线安装 gcc

yum install make cmake gcc gcc-c++

# 在线安装 perl

yum -y install perl*

# 解压 libfastcommon 压缩包

tar -zxvf libfastcommon-1.0.39.tar.gz

# 进入 libfastcommon 目录中,编译以及安装libfastcommon

cd libfastcommon-1.0.39

./make.sh && ./make.sh install


注意:在安装旧版本时,需要有创建软链接的操作,而新版本不再需要。

# 由于 libfastcommon 安装的路径在 /usr/lib64/

# 但 FastDFS 主程序设置的 lib 目录是在 /usr/local/lib,所以需要创建软链接

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

#  本次安装不需要创建软链接

2.3. 安装FastDFS主程序

# 解压 FastDFS 压缩包,编译以及安装

tar -zxvf fastdfs-5.11.tar.gz

cd fastdfs-5.11

./make.sh && ./make.sh install

2.4. 配置 Tracker

192.168.160.130

# 创建 Tracker 存储日志和数据的根目录

mkdir -p /home/fastdfs/tracker

# 复制创建配置文件

cd /etc/fdfs

cp tracker.conf.sample tracker.conf

# 配置 tracker.conf

vi tracker.conf

# 启用配置文件(默认为 false,表示启用配置文件)

disabled=true

# Tracker 服务端口(默认为22122)

port=22122

# 存储日志和数据的根目录

base_path=/home/fastdfs/tracker

2.5. 配置 Storage

192.168.160.131

# 创建 Storage 存储日志和数据的根目录

mkdir -p /home/fastdfs/storage

# 复制创建配置文件

cd /etc/fdfs

cp storage.conf.sample storage.conf

# 配置 storage.conf

vi storage.conf

# 启用配置文件(默认为 false,表示启用配置文件)

disabled=true

# Storage 服务端口(默认为23000)

port=23000

# 配置数据和日志文件存储的根目录

base_path=/home/fastdfs/storage

#  存储路径,store_path0访问时路径为 M00

#  store_path1 则为 M01,以此递增到 M99(如果配置了多个存储目录的话,这里只指定1个)

store_path0=/home/fastdfs/storage

#  Tracker 服务器 IP 地址和端口, 注意同机器搭建时也不要写 127.0.0.1

#  tracker_server 可以多次出现,如果有多个,则配置多个

tracker_server=192.168.160.130:22122

#  设置 HTTP 访问文件的端口,这个配置已经不用配置了,配置了也没什么用

#  这也是为何 Storage 服务器需要 Nginx 来提供 HTTP 访问的原因

http.server_port=8888

2.6. 开放相关端口或关闭防火墙

2.7. 启动Tracker

# 其它操作则把 start 改为 stop、restart、reload、status 即可,Storage 服务相同

/etc/init.d/fdfs_trackerd start

# 查看是否启动成功,是否有相应进程信息

ps -ef | grep fdfs

2.8. 启动Storage

/etc/init.d/fdfs_storaged start

# 查看 Storage 是否已经注册到 Tracker 服务器中

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

# 查看到 ip_addr = 192.168.160.131 (localhost.localdomain)  ACTIVE

2.9. 使用client测试上传功能 

# 配置 Tracker 服务器客户端配置文件

cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf

vi /etc/fdfs/client.conf

# 存储日志文件的基本路径

base_path=/home/fastdfs/tracker

# Tracker 服务器 IP 地址与端口号

tracker_server=192.168.160.130:22122

# 拷贝一张图片到客户端服务器上,然后执行上传命令

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/FastDFS_Test.png

# 如果返回文件ID则表示上传成功,如:

group1/M00/00/00/wKigg1zyrEGAJtLxAADj_8BWHOQ120.png

当然也可以到Storage服务器上查看上传的文件 

2.10. 安装Nginx 

        以上完成了 FastDFS 的安装与配置,可以使用 API 来完成文件的上传、同步和下载,接下来安装 Nginx,目的如下:

        Storage 安装 Nginx,提供 http 的访问和下载服务,同时解决相同group 中 Storage 服务器之间的同步延迟问题;

        Tracker 安装 Nginx,主要是为了提供 http 访问的反向代理、负载均衡以及缓存服务。

# 安装 GCC

yum install -y gcc-c++

# 安装 PCRE

yum install -y pcre pcre-devel

# 安装 zlib

yum install -y zlib zlib-devel

# 安装 openssl

yum install -y openssl openssl-devel

# 以上命令也可以使用一条命令来安装

yum install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel

# 解压Nginx安装包

tar -zxvf nginx-1.16.0.tar.gz

cd nginx-1.16.0

# 检查配置并安装

./configure

make

make install

# 启动与测试

cd /usr/local/nginx/sbin

./nginx

# 浏览器访问

http://192.168.160.131/

2.11. Storage节点Nginx添加 fastdfs-nginx-module 模块

# 查询 Nginx安装过的模块信息

cd /usr/local/nginx/sbin/

./nginx -V

# 解压 fastdfs-nginx-module 模块

tar -zxvf fastdfs-nginx-module-1.20.tar.gz

# 修改 fastdfs-nginx-module 的 config 配置文件

vi fastdfs-nginx-module-1.20/src/config

# 请注意,不同版本不同改法,低版本去掉 local即可,高版本改以下两个地方:

ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"

CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

# 重新到之前安装Nginx的安装包目录

cd /home/package/nginx-1.16.0

# 添加模块

./configure --add-module=/home/package/fastdfs-nginx-module-1.20/src

make

make install

# 复制 FastDFS 安装包中的部分配置文件到 /etc/fdfs 中

cd /home/package/fastdfs-5.11/conf/

cp http.conf mime.types /etc/fdfs/

# 复制 fastdfs-nginx-module 安装包中的配置文件到  /etc/fdfs 中

cd /home/package/fastdfs-nginx-module-1.20/src/

cp mod_fastdfs.conf /etc/fdfs/

# 修改配置文件

vi /etc/fdfs/mod_fastdfs.conf

#  Tracker 服务器IP和端口修改

tracker_server=192.168.160.130:22122

#  url 中是否包含 group 名称,改为 true,包含 group

url_have_group_name = true

#  配置Storage信息,修改store_path0 的信息,一定要和storage节点配置一模一样,不能多一个/之类的!

store_path0=/home/fastdfs/storage

# 其它的一般默认即可,例如

base_path=/tmp

group_name=group1

storage_server_port=23000

store_path_count=1

# 配置Nginx

vi /usr/local/nginx/conf/nginx.conf

# server中添加以下代码

# 配置为支持 group0-group9,以及 M00-M99,以便于以后扩容

# 本单机环境下其实配置为 ~/group1/M00 就可以了

location ~/group([0-9])/M([0-9])([0-9]) {

    ngx_fastdfs_module;

}

重启Nginx

访问之前上传的图片,成功

三、集群安装配置

3.1. 集群服务器规划

跟踪器:

Tracker1: 192.168.160.130

Tracker2: 192.168.160.132

存储器卷一:

Storage1-group1: 192.168.160.131

Storage2-group1: 192.168.160.133

存储器卷二:

Storage3-group2: 192.168.160.134

Storage4-group2: 192.168.160.135

 

3.2. 所有FastDFS集群节点安装 

        所有FastDFS集群节点不管是跟踪器还是存储器,都需要安装以下FastDFS基础环境,详细安装方式参照上面单节点的安装。

3.2.1. 安装libfastcommon包

3.2.2. 安装FastDFS主程序

3.2.3. 安装Nginx

3.2.4. 开放相关防火墙端口

 3.3. 所有Tracker集群节点配置

 3.3.1. Tracker跟踪器配置

除了基本配置,可以配置跟踪器开机启动

vi /etc/rc.d/rc.local

编辑以上文件,追加以下内容

/etc/init.d/fdfs_trackerd start

3.3.2. Nginx配置

3.4. 所有Storage集群节点配置

3.4.1. Storage存储器配置

可设置Storage开机启动:

vi /etc/rc.d/rc.local

/etc/init.d/fdfs_storaged start

不同存储器节点的配置不同,参考以下节点配置:

vi /etc/fdfs/storage.conf

#启用配置文件

disabled=true

#组名(卷一为group1,卷二为group2)

group_name=group1

#storage的端口号,同一组的storage端口号必须相同

port=23000

#设置storage数据和日志文件存储根目录

base_path=/home/fastdfs/storage

#存储路径, store_path0 则为 M00,以此递增到 M99

store_path0=/home/fastdfs/storage

#存储路径个数,需要和store_path个数匹配

store_path_count=1

#tracker 服务器的 IP 地址和端口

tracker_server=192.168.160.130:22122

#多个 tracker 直接添加多条配置

tracker_server=192.168.160.132:22122

#设置 http 端口号

http.server_port=8888

3.4.2. Nginx添加fastdfs-nginx-module 模块

配置mod_fastdfs.conf文件

vi /etc/fdfs/mod_fastdfs.conf

connect_timeout=10

base_path=/tmp

tracker_server=192.168.160.130:22122

tracker_server=192.168.160.132:22122

storage_server_port=23000

group_name=group1

url_have_group_name = true

store_path0=/home/fastdfs/storage

group_count = 2

[group1]

group_name=group1

storage_server_port=23000

store_path_count=1

store_path0=/home/fastdfs/storage

[group2]

group_name=group2

storage_server_port=23000

store_path_count=1

store_path0=/home/fastdfs/storage

区别:

        第一组 Storage 的 mod_fastdfs.conf 配置与第二组配置只有 group_name 不同:

group_name=group2

3.4.3. Nginx配置

先启动所有tracker节点;

然后启动所有storage节点;

在任何一个节点输入以下命令都可以查询到整个集群状态:

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

 

3.5、集群文件上传测试

任选其中一个 Tracker节点,使用客户端上传功能:

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/FastDFS_Test.png

文件将随机上传到卷一或者卷二,返回的文件ID包含group1或group2,

不管是group1还是group2,可以使用集群storage的任一节点访问下载图片:

http://192.168.160.131:8888/group2/M00/00/00/wKighlzz76OAcNGIAADj_8BWHOQ973.png

http://192.168.160.133:8888/group2/M00/00/00/wKighlzz76OAcNGIAADj_8BWHOQ973.png

http://192.168.160.134:8888/group2/M00/00/00/wKighlzz76OAcNGIAADj_8BWHOQ973.png

http://192.168.160.135:8888/group2/M00/00/00/wKighlzz76OAcNGIAADj_8BWHOQ973.png

 3.6. 所有Tracker节点Nginx配置

Tracker上安装Nginx,目的提供 http 访问的反向代理、负载均衡以及缓存服务。

3.6.1.添加缓存模块

http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz

# 解压

tar -zxvf ngx_cache_purge-2.3.tar.gz

# 配置,添加该模块到nginx

cd nginx-1.16.0

./configure --prefix=/usr/local/nginx --add-module=/home/package/ngx_cache_purge-2.3

make

make install

3.6.2.配置 Nginx,设置负载均衡与缓存

vi /usr/local/nginx/conf/nginx.conf

user root;

worker_processes 1;

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

#pid logs/nginx.pid;

events {

       worker_connections 1024;

       use epoll;

}

http {

       include mime.types;

       default_type application/octet-stream;

      

       #log_format main '$remote_addr - $remote_user [$time_local] "$request" '

       # '$status $body_bytes_sent "$http_referer" '

       # '"$http_user_agent" "$http_x_forwarded_for"';

       #access_log logs/access.log main;

       sendfile on;

       tcp_nopush on;

      

       #keepalive_timeout 0;

       keepalive_timeout 65;

      

       #gzip 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_cache_path /home/fastdfs/cache/nginx/proxy_cache levels=1:2

       keys_zone=http-cache:200m max_size=1g inactive=30d;

       proxy_temp_path /home/fastdfs/cache/nginx/proxy_cache/tmp;

      

       #设置 group1 的服务器

       upstream fdfs_group1 {

              server 192.168.160.131:8888 weight=1 max_fails=2 fail_timeout=30s;

              server 192.168.160.133:8888 weight=1 max_fails=2 fail_timeout=30s;

       }

      

       #设置 group2 的服务器

       upstream fdfs_group2 {

              server 192.168.160.134:8888 weight=1 max_fails=2 fail_timeout=30s;

              server 192.168.160.135:8888 weight=1 max_fails=2 fail_timeout=30s;

       }

      

       server {

              listen 8858;

              server_name localhost;

              #charset koi8-r;

              #access_log logs/host.access.log main;

             

              #设置 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;

              }

             

              #error_page 404 /404.html;

              # redirect server error pages to the static page /50x.html

              #

              error_page 500 502 503 504 /50x.html;

                     location = /50x.html {

                     root html;

              }

       }

      

}

按以上 nginx 配置文件的要求,先开放8858端口,再创建对应的缓存目录:

mkdir -p /home/fastdfs/cache/nginx/proxy_cache

mkdir -p /home/fastdfs/cache/nginx/proxy_cache/tmp

3.6.3. 重启Tracker上的Nginx

3.6.4. 在 Tracker上通过Http访问之前在Storage上的文件

http://192.168.160.130:8858/group2/M00/00/00/wKighlzz76OAcNGIAADj_8BWHOQ973.png

http://192.168.160.132:8858/group2/M00/00/00/wKighlzz76OAcNGIAADj_8BWHOQ973.png

四、文件上传下载统一入口

可通过 LVS+Keepalived 配置VIP,实现多机主备高可用负责均衡。

可以参考我的另外一篇文章。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值