在上一篇 分布式文件系统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

  1. group_name=group1 # 组名(第一组为group1,第二组为group2,依次类推...)
  2. base_path=/data/fastdfs/storage # 数据和日志文件存储根目录
  3. store_path0=/data/fastdfs/storage # 第一个存储目录,第二个存储目录起名为:store_path1=xxx,其它存储目录名依次类推...
  4.  
  5. tracker_server=192.168.80.30:# tracker服务器IP和端口
  6. tracker_server=192.168.80.31:# 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

  1. ./configure \
  2. --prefix=/opt/nginx \
  3. --pid-path=/opt/nginx/nginx.pid \
  4. --lock-path=/opt/nginx.lock \
  5. --error-log-path=/opt/nginx/log/error.log \
  6. --http-log-path=/opt/nginx/log/access.log \
  7. --with-http_gzip_static_module \
  8. --http-client-body-temp-path=/opt/nginx/client \
  9. --http-proxy-temp-path=/opt/nginx/proxy \
  10. --http-fastcgi-temp-path=/opt/nginx/fastcgi \
  11. --http-uwsgi-temp-path=/opt/nginx/uwsgi \
  12. --http-scgi-temp-path=/opt/nginx/scgi \
  13. --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

  1. base_path=/data/fastdfs/storage
  2. tracker_server=192.168.80.30:
  3. tracker_server=192.168.80.31:
  4. storage_server_port=23000
    group_name=group1 # 第一组storage的组名
  5. url_have_group_name=true
  6. store_path0=/data/fastdfs/storage
  7. group_count=
  8. [group1]
  9. group_name=group1
  10. storage_server_port=
  11. store_path_count=
  12. store_path0=/data/fastdfs/storage
  13. [group2]
  14. group_name=group2
  15. storage_server_port=
  16. store_path_count=
  17. store_path0=/data/fastdfs/storage

注意:

32和33  group_name=group1

34和35  group_name=group2

配置nginx

vim /opt/nginx/conf/nginx.conf

  1. nginx的配置文件中添加一个Server
  2. server {
  3. listen 8888;
  4. server_name localhost;
  5.  
  6. location ~/group([0-9])/M00/{
  7. ngx_fastdfs_module;
  8. }
  9. }

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进行编译安装

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

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

vi /opt/nginx/conf/nginx.conf

添加以下内容

  1. #设置缓存
  2. server_names_hash_bucket_size ;
  3. client_header_buffer_size 32k;
  4. large_client_header_buffers 32k;
  5. client_max_body_size 300m;
  6. proxy_redirect off;
  7. proxy_set_header Host $http_host;
  8. proxy_set_header X-Real-IP $remote_addr;
  9. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout ;
  10. proxy_send_timeout ;
  11. proxy_read_timeout ;
  12. proxy_buffer_size 16k;
  13. proxy_buffers 64k;
  14. proxy_busy_buffers_size 128k;
  15. proxy_temp_file_write_size 128k; #设置缓存存储路径、存储方式、分配内存大小、磁盘最大空间、缓存期限
  16. proxy_cache_path /data/fastdfs/cache/nginx/proxy_cache keys_zone=http-cache:100m;
  17. #设置 group1 的服务器
  18. upstream fdfs_group1 {
  19. server 192.168.80.32: weight= max_fails= fail_timeout=30s;
  20. server 192.168.80.33: weight= max_fails= fail_timeout=30s;
  21. }
  22. #设置 group2 的服务器
  23. upstream fdfs_group2 {
  24. server 192.168.80.34: weight= max_fails= fail_timeout=30s;
  25. server 192.168.80.35: weight= max_fails= fail_timeout=30s;
  26. }
  27.  
  28. server {
  29. listen 8000;
  30. server_name localhost;
  31. #charset koi8-r;
  32. #access_log logs/host.access.log main;
  33.  
  34. #设置 group 的负载均衡参数
  35. location /group1/M00 {
  36. proxy_next_upstream http_502 http_504 error timeout invalid_header;
  37. proxy_cache http-cache;
  38. proxy_cache_valid 12h;
  39. proxy_cache_key $uri$is_args$args;
  40. proxy_pass http://fdfs_group1;
  41. expires 30d;
  42. }
  43.  
  44. location /group2/M00 {
  45. proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_cache http-cache;
  46. proxy_cache_valid 12h;
  47. proxy_cache_key $uri$is_args$args;
  48. proxy_pass http://fdfs_group2;
  49. expires 30d;
  50. }
  51.  
  52. #设置清除缓存的访问权限
  53. location ~/purge(/.*) {
  54. allow 127.0.0.1;
  55. allow 192.168.80.0/;
  56. deny all;
  57. proxy_cache_purge http-cache $$is_args$args;
  58. }
  59. #error_page /.html;
  60. # redirect server error pages to the static page /50x.html
  61. #
  62. error_page /50x.html;
  63. location = /50x.html {
  64. root html;
  65. }
  66. }

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

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

启动Nginx

  1. /opt/nginx/sbin/nginx
  2. 设置开机启动:
  3. vi /etc/rc.local## 加入以下配置
  4. /opt/nginx/sbin/nginx
  5. 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。

  1. vi /opt/nginx/conf/nginx.conf
  2.  
  3. http {
  4. include mime.types;
  5. default_type application/octet-stream;
  6. sendfile on;
  7. keepalive_timeout ;
  8. ## FastDFS Tracker Proxy
  9. upstream fastdfs_tracker {
  10. server 192.168.80.30: weight= max_fails= fail_timeout=30s;
  11. server 192.168.80.31: weight= max_fails= fail_timeout=30s;
  12. }
  13. server {
  14. listen 80;
  15. server_name localhost;
  16. location / {
  17. root html;
  18. index index.html index.htm;
  19. }
  20. error_page /50x.html;
  21. location = /50x.html {
  22. root html;
  23. }
  24. ## FastDFS Proxy
  25. location /dfs {
  26. root html;
  27. index index.html index.htm;
  28. proxy_pass http://fastdfs_tracker/;
  29. proxy_set_header Host $http_host;
  30. proxy_set_header Cookie $http_cookie;
  31. proxy_set_header X-Real-IP $remote_addr;
  32. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  33. proxy_set_header X-Forwarded-Proto $scheme;
  34. client_max_body_size 300m;
  35. }
  36. }
  37. }

启动Nginx

  1. /opt/nginx/sbin/nginx
  2. 设置开机启动:
  3. vi /etc/rc.local## 加入以下配置
  4. /opt/nginx/sbin/nginx
  5. 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

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

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

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

  1. 高可用高性能分布式文件系统FastDFS实践Java程序

    在前篇 高可用高性能分布式文件系统FastDFS进阶keepalived+nginx对多tracker进行高可用热备 中已介绍搭建高可用的分布式文件系统架构. 那怎么在程序中调用,其实网上有很多栗子, ...

  2. Keepalived+Nginx提供前端负载均衡+主从双机热备+自动切换

    原文链接:http://unun.in/linux/156.html 方案: 采用两台Nginx服务器作为前端,提供静态web内容,分发web请求,一主一从,Keepalived实现状态监测,保证 N ...

  3. 分布式文件系统FastDFS动态扩容

    当用户量越来越大,则集群中某个group总会到达其极限,这时就得扩展集群的容量了. FastDFS的扩容分为对group纵向扩容和横向扩容 纵向扩容 指在同一个group组中增加服务器,实现数据冗余, ...

  4. 【FastDFS】如何打造一款高可用的分布式文件系统?这次我明白了!!

    写在前面 前面我们学习了如何基于两台服务器搭建FastDFS环境,而往往在生产环境中,需要FastDFS做到高可用,那如何基于FastDFS打造一款高可用的分布式文件系统呢?别急,今天,我们就一起来基 ...

  5. FastDFS是使用c语言编写的开源高性能分布式文件系统

    FastDFS是什么 FastDFS是使用c语言编写的开源高性能分布式文件系统 是由淘宝开发平台部资深架构师余庆开发,FastDFS孵化平台板块 他对文件进行管理,功能包括文件存储,文件同步,文件访问 ...

  6. [转]分布式文件系统FastDFS架构剖析

    [转]分布式文件系统FastDFS架构剖析 http://www.programmer.com.cn/4380/ 文/余庆 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实 ...

  7. (转)淘淘商城系列——分布式文件系统FastDFS

    http://blog.csdn.net/yerenyuan_pku/article/details/72801777 商品添加的实现,包括商品的类目选择,即商品属于哪个分类?还包括图片上传,对于图片 ...

  8. 【转】分布式文件系统FastDFS架构剖析

    FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能通过专有API对文件进行存取访问,不支持POSIX接口方式, ...

  9. 分布式文件系统 - FastDFS 简单了解一下

    别问我在哪里 也许我早已不是我自己,别问我在哪里,我一直在这里. 突然不知道说些什么了... 初识 FastDFS 记得那是我刚毕业后进入的第一家公司,一个技术小白进入到当时的项目组后,在开发中上传用 ...

随机推荐

  1. SQL语句 insert into 语句的写法

    方式1: INSERT INTO t1(field1,field2) VALUE('001','002'); 最好的做法明确插入的每一列,列于查错,而且漏列的几率会降低! 方式2: INSERT IN ...

  2. iOS 页面之间的专长动画控制器间的转换

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 24.0px; font: 14.0px "Heiti SC Light" ...

  3. 解决author波浪线Spellchecker inspection helps locate typos and misspelling in your code, comments and literals, and fix them in one click

    自从把默认的头注释的author改成自己的名字以后越看越顺眼,但是发现名字下面一直有个波浪线,强迫症简直不能忍. 然后当你把鼠标放上去,再点击提示上的"more",会看到下面的提示 ...

  4. bzoj 4446: [Scoi2015]小凸玩密室

    Description 小凸和小方相约玩密室逃脱,这个密室是一棵有n个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯 泡即可逃出密室.每个灯泡有个权值Ai,每条边也有个权值bi.点亮第1个灯泡不需要 ...

  5. NOI 2009 诗人小G

    题目描述 Description 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行 ...

  6. shell脚本异步日志分析-接口耗时、可用率

    背景:现有日志接入日志报表大盘,为了避免作业高峰期间(双十一),系统也要观测系统整体情况,因此提出了观测近五分钟,接口成功率以及耗时等工具(默认统计最近五分钟,并进行结果汇总统计) 使用说明 前提:p ...

  7. Sublime Text 使用教程

    Sublime Text 是一款非常轻量级而且功能十分强大的编辑器,支持大量插件,深受前端开发者的喜爱.多的不说,我们直接进入正题. 1.下载 ①.官网下载地址:http://www.sublimet ...

  8. 例子:js超级玛丽小游戏

    韩顺平_轻松搞定网页设计(html+css+javascript)_第34讲_js超级玛丽小游戏_学习笔记_源代码图解_PPT文档整理 采用面向对象思想设计超级马里奥游戏人物(示意图) 怎么用通过按键 ...

  9. 未能解析此远程名称: 'www.***.com' 解决办法

    今天发布网站的时候在本机IIS上调试完全没问题,但发布到远程服务器上却出现了如下错误: 原因:远程服务器的DNS解析失败,不能对类似于'www.***.com' 的网站解析,所以我们要进行手动解析. ...

  10. SQL2005 到 SQL2008R2 发布订阅----发布'xxxxx'的初始快照尚不可用。

    步骤略! SQL2005 到 SQL2008R2 发布订阅----发布'xxxxx'的初始快照尚不可用. 发布库快照已经创建完成为什么到订阅就快照不可用呢! 订阅通过日志读取代理解析! 查了下代理安全 ...