FastDFS教程IV-文件服务器集群搭建
1.简介
- FastDFS文件服务器单节点安装:FastDFS教程Ⅰ-文件服务器安装与Nginx配置
- FastDFS文件服务器扩容:FastDFS教程Ⅲ-文件服务器扩容
- nginx和keepalived实现nginx高可用:nginx和keepalived实现虚拟ip配置
2.搭建环境
- 服务器1:ip 10.63.0.154,在上面安装FastDFS,nginx,keepalived
- 服务器2:ip 10.63.0.155,在上面安装FastDFS,nginx,keepalived
本次采用两台服务器,都分别安装完整的单节点文件服务器。安装完成后,设置服务器1和服务器2上面的storage分别属于group1和group2。两个storage的tracker地址设置为两个,具体关系如下:

简要说明:
- 把服务器1和服务器2利用keepalived做一个虚拟ip:10.63.0.158
- 为了便于展示特意把tracker和storage抽象成了两块,其实是在一台服务器上面。10.63.0.155的tracker指向的存储地址为10.63.0.155的storage和10.63.0.154的storage。10.63.0.154上面的tracker指向存储地址同理。
- 在服务器上面配置了nginx负载均衡,在服务器1上面的文件可通过服务器1和服务器2的ip访问。在服务器2上面的文件同理可以访问。
- 通过虚拟的ip可上传文件到服务器1和服务器2,并可访问。
一个tracker跟踪器配置多个storage的方法参考FastDFS文件服务器扩容文档。分别在服务器1和服务器2上面配置好文件后,启动服务,在两台服务器中输入指令:/usr/bin/fdfs_monitor /etc/fdfs/storage.conf。截图如下:

文件服务器配置好后,利用keepalived做虚拟ip,具体操作请参考nginx和keepalived实现nginx高可用文档,虚拟ip设置成功后访问截图如下:

3.结果展示
配置好文件服务器后,程序调用虚拟ip地址10.63.0.158可上传文件,在服务器上面测试时,直接调用文件上传命令如:/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/1.png 上传文件,在服务器1和服务器2中上传的文件均可通过虚拟ip10.63.0.158访问。演示界面如下:

4.分析说明
仔细梳理整个文件上传,存储流程。在两台服务器上面搭建的这一套文件服务器并不能算一个完整的文件服务器集群。在tracker指向storage的设计模式时,是采用了nginx代理分发的模式。目前一个是自身,一个是另外一台服务器,以后再次扩展存储服务器时,可继续沿用。但是在keepalived做nginx高可用时,并没有做基于tracker的负载分发,笔者也尝试在现有服务器上面做nginx.conf文件配置,但由于本身又设置了tracker到storage的分发,keepalived到tracker的分发并未生效。所以,目前两台文件服务器一个虚拟ip的模式,算是主备的关系。
由于设置在服务器10.63.0.154上面的keepalived的优先值高于在10.63.0.155服务器上面的优先值,故当服务器10.63.0.154正常运作时,文件上传只会走服务器10.63.0.154上面的tracker服务,tracker根据配置规则存储文件到group1下面的存储器或group2下面的存储器。当服务器10.63.0.154出现异常时,keepalived已经不可用,文件上传会走备用的服务器10.63.0.155上面的tracker服务存储文件。
文件服务器集群搭建目前需要四台服务器,在上面主备模式基础上,在加上两台服务器可做集群处理。集群关系图如下:

额外增加两台服务器,专门做keepalived与nginx的负载高可用,通过nginx管理后面两台服务器的tracker服务,做代理转发。可完成文件服务器集群搭建。其中,在两台新服务器的nginx.conf配置文件如下:
#user nobody;
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;
} 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; upstream fastdfs_tracker {
server 10.63.0.154:8888 weight=1 max_fails=2 fail_timeout=30s;
server 10.63.0.155:8888 weight=1 max_fails=2 fail_timeout=30s;
} server {
listen 8888;
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location /fastdfs {
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;
} #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;
}
}
}
在实际使用中,通常是把tracker服务和storage服务安装在不同的服务器上,参考CSDN一位大牛的明细设计方案如下:

设计介绍文档地址:手把手教你搭建FastDFS集群(下) ,该博主一共发布了上中下三篇文章,明确详细的介绍了文件服务器的搭建过程,经过测试可用,可谓是业界良心。在整个方案中,没有涉及到文件服务器迁移模块的知识,没有采用storage_ids.conf的id配置模式,不便迁移。
FastDFS教程IV-文件服务器集群搭建的更多相关文章
- Solr集群搭建详细教程(一)
一.Solr集群的系统架构 注:欢迎大家转载,非商业用途请在醒目位置注明本文链接和作者名dijia478,商业用途请联系本人dijia478@163.com. SolrCloud(solr 云)是So ...
- 一张图讲解最少机器搭建FastDFS高可用分布式集群安装说明
很幸运参与零售云快消平台的公有云搭建及孵化项目.零售云快消平台源于零售云家电3C平台私有项目,是与公司业务强耦合的.为了适用于全场景全品类平台,集团要求项目平台化,我们抢先并承担了此任务.并由我来主 ...
- Solr集群搭建详细教程(二)
注:欢迎大家转载,非商业用途请在醒目位置注明本文链接和作者名dijia478,商业用途请联系本人dijia478@163.com. 之前步骤:Solr集群搭建详细教程(一) 三.solr集群搭建 注意 ...
- springCloud系列教程01:Eureka 注册中心集群搭建
springCloud系列教程包含如下内容: springCloud系列教程01:Eureka 注册中心集群搭建 springCloud系列教程02:ConfigServer 配置中心server搭建 ...
- fastdfs集群版搭建(一)- storage集群搭建与统一入口访问
前言 接着上篇博客:详细的最新版fastdfs单机版搭建,今天来讲讲fastdfs的集群搭建,限于篇幅,今天先搭建stoarge集群,并实现统一的http访问方式: 没看我上篇博客的小伙伴,最好先去瞅 ...
- 【运维技术】Zookeeper单机以及集群搭建教程
Zookeeper单机以及集群搭建教程 单机搭建 单机安装以及启动 安装zookeeper的前提是必须有java环境 # 选择目录进行下载安装 cd /app # 下载zk,可以去官方网站下载,自己上 ...
- kubernetes(K8S)快速安装与配置集群搭建图文教程
kubernetes(K8S)快速安装与配置集群搭建图文教程 作者: admin 分类: K8S 发布时间: 2018-09-16 12:20 Kubernetes是什么? 首先,它是一个全新的基于容 ...
- RabbitMQ入门教程(十四):RabbitMQ单机集群搭建
原文:RabbitMQ入门教程(十四):RabbitMQ单机集群搭建 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://b ...
- mysql集群搭建教程-基础篇
计算机一级考试系统要用集群,目标是把集群搭建起来,保证一个库dang了,不会影响程序的运行.于是在孟海滨师哥的带领下开始了我的第一次搭建mysql集群,首先看了一些关于集群的资料,然后根 ...
随机推荐
- HTTP Error 500.19 - Internal Server Error
1.使用svn对项目进行管理 2.之前都是平安无事,忽然有一天报错:HTTP Error 500.19 - Internal Server Error,如图: 3.经过各种挣扎和求证,最后发现是项目. ...
- my dream
我的梦想(践踏一切可以践踏的,放弃一切必须放弃的,然后朝着自己认为的方向努力,只要自己认为对了就可以了(但是最好能考虑方面全一点,这就叫尽力了)我想要的生活怎么那么醉我想要的食物怎么那么碎我最爱的女孩 ...
- 读书笔记-你不知道的JS上-this
关于this 与静态词法作用域不用,this的指向动态绑定,在函数执行期间才能确定.感觉有点像C++的多态? var a = 1; var obj = { a: 2, fn: function() { ...
- grunt-contrib-connect自动刷新html页面
grunt-contrib-connect可以在我们开发的时候自动刷新页面,省去了手动刷新的时间. 下面说一下如何配置grunt-contrib-connect 1.下载插件包 npm install ...
- Python Web框架篇:Django cookie和session
part 1 概念 在Django里面,cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话. 两者最大的区别是cookie的信息是存放在浏览器客户端的,而sessio ...
- code forces 436 D. Make a Permutation!
D. Make a Permutation! time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- HDU 5791 Two(训练题002 F)
Description Alice gets two sequences A and B. A easy problem comes. How many pair of sequence A' and ...
- Page visibility 页面可见性
一直以来,判断页面是不是当前可见标签,浏览器有没有缩小都是比较麻烦的. 通过页面可见性API可以获得相关信息document.hidden 判断页面当前是不是可见的document.visibi ...
- Problem E: 分数类的输出
Problem E: 分数类的输出 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2699 Solved: 1227[Submit][Status][ ...
- 【机器学习】TensorFlow学习(一)
感谢中国人民大学胡鹤老师,课讲得非常好~ 首先,何谓tensor?即高维向量,例如矩阵是二维,tensor是更广义意义上的n维向量(有type+shape) TensorFlow执行过程为定义图,其中 ...