高可用高性能分布式文件系统FastDFS进阶keepalived+nginx对多tracker进行高可用热备

简介:

  在上一篇 分布式文件系统FastDFS如何做到高可用 中已经介绍了FastDFS的原理和怎么搭建一个简单的高可用的分布式文件系统及怎么访问。

  高可用是实现了,但由于我们只设置了一个group,如果现在有5台服务器那将会出现5台只有一个group,每台服务器内的文件内容都相同(互备份)如下图,会造成资源浪费。

 因此下面就5台服务器进行优化改造,进一步添加keepalived+nginx多tracker 架构,做到真正的高可用和高性能。

 

 FastDFS集群服务器分布

 

其中keepalived+nginx用作30和31 tracker服务器作热备。用虚拟VIP 27作统一入口。

我们将按上面的架构分服务器:

虚拟VIP用192.168.80.27

keepalived+nginx 热备、负载均衡 : 28、29 

tracker:

30和31服务器

storage:

group1:32、33

group2:34、35

虽然每个服务器上都有Nginx,但这里还是先强调一下这里Nginx的用途:

  1. 首先所有的Nginx都是用于上传后的文件访问用的,跟上传无关。
  2. 28、29上面的就是常见的端口负载,这里是对两个tracker访问文件端口8000(自己设置)负载。
  3. tracker 上安装的 nginx 主要为了提供 http 访问的反向代理、负载均衡以及缓存服务。
  4. 每一台storage服务器主机上部署Nginx及FastDFS扩展模块,由Nginx模块对storage存储的文件提供http下载服务, 仅当当前storage节点找不到文件时会向源storage主机发起redirect或proxy动作。 

注:图中的tracker可能为多个tracker组成的集群;且当前FastDFS的Nginx扩展模块支持单机多个group的情况

 

tracker跟踪节点30、31

安装配置步骤前文一致,配置tracker.conf 和client.conf,主要注意防火墙 开启端口22122 

记得手动创建两个文件夹:

/data/fastdfs/tracker

/data/fastdfs/client

两个节点内容一样。

 

storage存储节点32到35

记得手动创建两个文件夹:/data/fastdfs/storage

安装步骤与上文一致,配置:

/etc/fdfs/storage.conf

group_name=group1 # 组名(第一组为group1,第二组为group2,依次类推...)
base_path=/data/fastdfs/storage # 数据和日志文件存储根目录
store_path0=/data/fastdfs/storage # 第一个存储目录,第二个存储目录起名为:store_path1=xxx,其它存储目录名依次类推...

tracker_server=192.168.80.30:22122# tracker服务器IP和端口
tracker_server=192.168.80.31:22122# tracker服务器IP和端口

 注意:

32和33  group_name=group1

34和35  group_name=group2

其他配置一样默认,注意防火墙 开启端口23000。

开启两个tracker,并加入开机启动:

/usr/bin/fdfs_trackerd  /etc/fdfs/tracker.conf

chkconfig fdfs_trakcerd on

开启4个storage,并加入开机启动:

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
chkconfig fdfs_storaged on

查看集群状态,会显示整体内容:

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

测试服务

/usr/bin/fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/anti-steal.jpg

以上就是FastDFS的安装与配置。下面就与Nginx模块结合作介绍。

将nginx和fastdfs-nginx-module上传到 storage存储节点32到35

fastdfs-nginx-module的作用已经在上篇介绍过,在此主要是配置。

上传fastdfs-nginx-module.tar.gz到/opt文件夹下


解压插件压缩包

unzip fastdfs-nginx-module.zip

nginx编译安装

cd nginx

对nginx重新config

./configure \
--prefix=/opt/nginx \
--pid-path=/opt/nginx/nginx.pid \
--lock-path=/opt/nginx.lock \
--error-log-path=/opt/nginx/log/error.log \
--http-log-path=/opt/nginx/log/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/opt/nginx/client \
--http-proxy-temp-path=/opt/nginx/proxy \
--http-fastcgi-temp-path=/opt/nginx/fastcgi \
--http-uwsgi-temp-path=/opt/nginx/uwsgi \
--http-scgi-temp-path=/opt/nginx/scgi \
--add-module=/opt/fastdfs-nginx-module/src

 

再进行 make && make install

 

将mod_fastdfs.conf 拷贝到fdfs下进行配置

cd fastdfs-nginx-module/src
cp mod_fastdfs.conf /etc/fdfs/ #将mod_fastdfs.conf 拷贝到fdfs下进行配置

vim /etc/fdfs/mod_fastdfs.conf

base_path=/data/fastdfs/storage
tracker_server=192.168.80.30:22122
tracker_server=192.168.80.31:22122
storage_server_port=23000
group_name=group1 # 第一组storage的组名 url_have_group_name=true store_path0=/data/fastdfs/storage group_count=2 [group1] group_name=group1 storage_server_port=23000 store_path_count=1 store_path0=/data/fastdfs/storage [group2] group_name=group2 storage_server_port=23000 store_path_count=1 store_path0=/data/fastdfs/storage

 注意:

32和33  group_name=group1

34和35  group_name=group2

配置nginx

vim /opt/nginx/conf/nginx.conf

在nginx的配置文件中添加一个Server:
server {
        listen       8888;
        server_name  localhost;

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

 

 8888的请求且有group的都转给 ngx_fastdfs_module 插件处理,防火墙什么的就不说了。

启动Nginx,并加和自启动

shell> /opt/nginx/sbin/nginx

浏览器访问测试时上传的文件,应该都能正常访问。
http://192.168.80.32:8888/group1/M00/00/00/CgNXGVpddOKANpzbAABdrZgsqUU369_big.jpg
http://192.168.80.34:8888/group2/M00/00/00/CgNXGVpddOKANpzbAABdrZgsqUU369_big.jpg

跟踪节点安装Nginx和ngx_cache_purge模块

说明:每个节点执行相同的操作
tracker节点:30,31
在 tracker 上安装的 nginx 主要为了提供 http 访问的反向代理、负载均衡以及缓存服务。

同样都上传nginx和ngx_cache_purge包

解压文件到/opt文件夹下

tar -zxvf ngx_cache_purge-2.3.tar.gz

然后对nginx进行编译安装

cd nginx 
./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=/opt/ngx_cache_purge-2.3
make && make install

 

配置Nginx,设置tracker负载均衡以及缓存

vi /opt/nginx/conf/nginx.conf

添加以下内容

    #设置缓存
    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 /data/fastdfs/cache/nginx/proxy_cache keys_zone=http-cache:100m;
#设置 group1 的服务器
upstream fdfs_group1 {
server 192.168.80.32:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.80.33:8888 weight=1 max_fails=2 fail_timeout=30s;
}
#设置 group2 的服务器
upstream fdfs_group2 {
server 192.168.80.34:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.80.35:8888 weight=1 max_fails=2 fail_timeout=30s;
}

    server {
        listen       8000;
        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.80.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; 
        }
    }

 

上面配置的是当请求8000端口时根据group1还是group2进行选择到对应的服务器响应。

要注意的已标色。还要提前创建缓存目录:/data/fastdfs/cache/nginx/proxy_cache

启动Nginx

/opt/nginx/sbin/nginx
设置开机启动:
vi /etc/rc.local## 加入以下配置
/opt/nginx/sbin/nginx
chmod +x /etc/rc.local #centos7

 

文件访问测试

前面直接通过访问Storage节点中的Nginx访问文件:
http://192.168.80.32:8888/group1/M00/00/00/CgNXGVpddOKANpzbAABdrZgsqUU369_big.jpg
http://192.168.80.34:8888/group2/M00/00/00/CgNXGVpddOKANpzbAABdrZgsqUU369_big.jpg
现在可以通过Tracker中的Nginx来进行访问:
(1)、通过 Tracker1 中的 Nginx 来访问
http://192.168.80.30:8000/group1/M00/00/00/CgNXGVpddOKANpzbAABdrZgsqUU369_big.jpg
http://192.168.80.30:8000/group2/M00/00/00/CgNXGVpddOKANpzbAABdrZgsqUU369_big.jpg
(2)、通过 Tracker2 中的 Nginx 来访问
http://192.168.80.31:8000/group1/M00/00/00/CgNXGVpddOKANpzbAABdrZgsqUU369_big.jpg
http://192.168.80.31:8000/group2/M00/00/00/CgNXGVpddOKANpzbAABdrZgsqUU369_big.jpg

  每一个Tracker中的Nginx都单独对后端的Storage组做了负载均衡,但整套FastDFS集群,如果想对外提供统一的文件访问地址,还需要对两个Tracker中的Nginx进行HA集群

配置Tracker服务器高可用、反向代理与负载均衡

其实上面可以通过30或31的8000端口进行文件访问了,下面统一端口,对30和31再进行一次负载均衡。

使用Keepalived + Nginx组成的高可用负载均衡集群,做两个Tracker节点中Nginx的负载均衡。

这里Nginx也可以用Haproxy代替。关于Keepalived和 Haproxy的安装和介绍,在 备胎的养成记KeepAlived实现热备负载 和 入坑系列之HAProxy负载均衡 中作过详细描述。

这里使用Nginx,将Keepalived 和 Nginx 安装到 28和29上,VIP为27。

vi /opt/nginx/conf/nginx.conf

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
## FastDFS Tracker Proxy
upstream fastdfs_tracker {
server 192.168.80.30:8000 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.80.31:8000 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500502503504/50x.html;
location = /50x.html {
root html;
}
## FastDFS Proxy
location /dfs {
root html;
index index.html index.htm;
proxy_pass http://fastdfs_tracker/;
proxy_set_header Host $http_host;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 300m;
}
} 
}

 

启动Nginx

/opt/nginx/sbin/nginx
设置开机启动:
vi /etc/rc.local## 加入以下配置
/opt/nginx/sbin/nginx
chmod +x /etc/rc.local #centos7

通过VIP访问文件

http://192.168.80.27:8000/dfs/group1/M00/00/00/CgNXGVpddOKANpzbAABdrZgsqUU369_big.jpg
http://192.168.80.27:8000/dfs/group2/M00/00/00/CgNXGVpddOKANpzbAABdrZgsqUU369_big.jpg

   以上就是整个配置过程,看起来是非常的繁杂,所以一定要先弄清整个的部署架构,然后每个插件是用来做什么的都要清楚,后面如果要扩展的话就有个清晰的思路。

  环境搭建只是开始,真正的使用、优化才是重点,所以耐心的看吧。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
5月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
9月前
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
3196 57
|
7月前
|
应用服务中间件 Linux 网络安全
使用Nginx免费版与Keepalived实现高可用性High Availablity方案
本文介绍了如何使用Nginx免费版与Keepalived实现高可用性(HA)方案,涵盖环境搭建、Keepalived安装配置、版本升级及主从模式设置。通过虚拟机测试,结合CentOS与宝塔,详细说明VIP配置与服务启动流程,助你构建稳定可靠的Web高可用架构。
|
9月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
384 11
|
9月前
|
消息中间件 缓存 算法
分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡
分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡
703 0
分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡
|
11月前
|
存储 人工智能 固态存储
DeepSeek开源周第五弹之一!3FS:支撑V3/R1模型数据访问的高性能分布式文件系统
3FS是DeepSeek开源的高性能分布式文件系统,专为AI训练和推理任务设计,提供高达6.6 TiB/s的读取吞吐量,支持强一致性保障和通用文件接口,优化AI工作负载。
1631 2
DeepSeek开源周第五弹之一!3FS:支撑V3/R1模型数据访问的高性能分布式文件系统
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
290 5
|
自然语言处理 搜索推荐 数据库
高性能分布式搜索引擎Elasticsearch详解
高性能分布式搜索引擎Elasticsearch详解
446 4
高性能分布式搜索引擎Elasticsearch详解
|
存储
cephFS高可用分布式文件系统部署指南
关于如何部署高可用的cephFS分布式文件系统,包括集群的搭建、验证高可用性以及实现两主一从架构的详细指南。
1230 10