fastdfs集群版搭建(一)- storage集群搭建与统一入口访问
前言
接着上篇博客:详细的最新版fastdfs单机版搭建,今天来讲讲fastdfs的集群搭建,限于篇幅,今天先搭建stoarge集群,并实现统一的http访问方式;
没看我上篇博客的小伙伴,最好先去瞅一眼,这篇博客很多都是基于上篇博客的;
不懂fastfds原理的,可以先去看看:分布式文件系统FastDFS设计原理,了解了原理之后,再来看这篇博客会轻松很多;
环境准备
1、机器准备
VIP:192.168.1.200
centos211(192.168.1.211):nginx + keepalived master
centos212(192.168.1.212:nginx + keepalived backup
centos210(192.168.1.210):tracker
fastdfs4(192.168.1.209):tracker
fastdfs3(192.168.1.208):storage(group2) + fastdfs-nginx-module + nginx
fastdfs2(192.168.1.207):storage(group2) + fastdfs-nginx-module + nginx
fastdfs1(192.168.1.206):storage(group1) + fastdfs-nginx-module + nginx
fastdfs (192.168.1.205):storage(group1) + fastdfs-nginx-module + nginx
2、最终各组件之间的关系图如下
fastdfs安装
无论是tracker还是storage的搭建,都是在fastdfs的基础上进行的,安装好了fastdfs之后,配置tracker或者storage就可以启动tracker服务或者storage服务了;fastdfs安装可参考详细的最新版fastdfs单机版搭建
tracker配置
本文只是简单利用了tracker集群上传了图片,更多的tracker集群 + nginx配置我放在下篇博客讲解
两台tracker机器配置可以完全一致,只需要在trackerd.conf修改如下配置项
base_path=/data/fastdfs/tracker
创建数据目录并启动tracker服务,注意是两台
[root@centos210 fdfs]# mkdir -p /data/fastdfs/tracker
[root@fastdfs4 ~]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
storage配置
group1
两台机器配置可以完全一样,修改storage.conf如下配置项
base_path=/data/fastdfs/storage
store_path0=/data/fastdfs/storage
tracker_server=192.168.1.209:22122
tracker_server=192.168.1.210:22122
group_name=group1
启动group1的两台,并查看日志
[root@fastdfs data]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
[root@fastdfs logs]# tailf /data/fastdfs/storage/logs/storaged.log
fastdfs(205)
fastdfs1(206)
group2
两台机器配置可以完全一样,修改storage.conf如下配置项
base_path=/data/fastdfs/storage
store_path0=/data/fastdfs/storage
tracker_server=192.168.1.209:22122
tracker_server=192.168.1.210:22122
group_name=group2
启动group2的两台,并查看日志
[root@fastdfs data]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
[root@fastdfs logs]# tailf /data/fastdfs/storage/logs/storaged.log
fastdfs2(207)
fastdfs3(208)
可以看到storage都已全部连上tracker,其中tracker 209作为tracker leader
tracker高可用性
从上图中我们可以看到192.168.1.209这台设备是作为tracker的leader的,我们现在人为关掉192.168.1.209的tracker
[root@fastdfs4 data]# /usr/bin/stop.sh /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
storage上日志
[root@fastdfs3 ~]# tailf /data/fastdfs/storage/logs/storaged.log
fastdfs3(208)
fastdfs2(207)
fastdfs1(206)
fastdfs(205)
210已经作为tracker leader了,而tracker 209已经连不上了,因为209的tracker服务停了;再启动209的tracker服务
[root@fastdfs4 ~]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
storage上日志
fastdfs3(208)
fastdfs2(207)
fastdfs1(206)
fastdfs(205)
可以看到4台storage机器都已经重新连接上209的tracker了,只是tracker leader仍是110
java-client图片上传
上传实现可参考上篇博客中实现,只是这次tracker是集群,包括两台机器;我示例是一张图片上传了两次,输出信息如下:
2
组名:group2
路径: M00/00/00/wKgBz1shMB2Abls1AABHO7x65CM887.jpg
2
组名:group2
路径: M00/00/00/wKgB0FshMB2AIBQXAABHO7x65CM071.jpg
根据输出信息可知:group2的两台机器上有图片,而group1的机器上没有,我看具体到机器上看下
group2/M00/00/00/wKgB0FshMB2AIBQXAABHO7x65CM071.jpg,其中group1表示这张图片被保存在了哪个组当中,M00代表磁盘目录,如果电脑只有一个磁盘那就只有M00, 如果有多个磁盘,那就M01、M02...等等
fastdfs-nginx-module配置
到目前为止,我们只是实现了通过java-client上传图片,还是不能通过http来访问图片,通过配置fastdfs-nginx-module和nginx来实现http的图片访问
FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储,但是同组存储服务器之间需要进入文件复制流程,有同步延迟的问题。假设 Tracker 服务器将文件上传到了 192.168.1.207,上传成功后文件 ID已经返回给客户端,此时 FastDFS 存储集群机制会将这个文件同步到同组存储 192.168.1.208,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 192.168.1.208上取文件,就会出现文件无法访问的错误。而 fastdfs-nginx-module 可以重定向文件连接到源服务器(192.168.1.207)上取文件,避免客户端由于复制延迟导致的文件无法访问错误。
在storage服务所在的机器配置fastdfs-nginx-module,4台机器的配置基本一样,示例中则只展示一台机器(fastdfs3)的配置
解压图中fastdfs-nginx-module-master.zip
[root@fastdfs2 00]# cd /opt
[root@fastdfs2 opt]# unzip -o fastdfs-nginx-module-master.zip -d /usr/local
拷贝配置文件
[root@fastdfs2 opt]# cd /usr/local/fastdfs-nginx-module-master/src
[root@fastdfs2 src]# cp mod_fastdfs.conf /etc/fdfs/
编辑配置文件
[root@fastdfs2 src]# cd /etc/fdfs/
[root@fastdfs2 fdfs]# vi mod_fastdfs.conf
修改的地方如下:
base_path=/data/fastdfs/storage
connect_timeout=10 #保留默认值也可以
tracker_server=192.168.1.209:22122
tracker_server=192.168.1.210:22122
url_have_group_name = true #url中是否加上group名
store_path0=/data/fastdfs/storage
group_name=group2 #当前storage所属的组名
group_count = 2 #组的数量,示例中共两组:group1、group2 [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
同组的storage上的mod_fastdfs.conf想通,异组的mod_fastdfs.conf也只是group_name不同,各个storage上的mod_fastdfs.conf具体修改项如下:
fastdfs2(207),与fastdfs3同组,mod_fastdfs.conf修改项一样
base_path=/data/fastdfs/storage
connect_timeout=10 #保留默认值也可以
tracker_server=192.168.1.209:22122
tracker_server=192.168.1.210:22122
url_have_group_name = true #url中是否加上group名
store_path0=/data/fastdfs/storage
group_name=group2 #当前storage所属的组名
group_count = 2 #组的数量,示例中共两组:group1、group2 [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
fastdfs1(206)与fastdfs(205)同组,mod_fastdfs.conf修改项一样
base_path=/data/fastdfs/storage
connect_timeout=10 #保留默认值也可以
tracker_server=192.168.1.209:22122
tracker_server=192.168.1.210:22122
url_have_group_name = true #url中是否加上group名
store_path0=/data/fastdfs/storage
group_name=group1 #当前storage所属的组名
group_count = 2 #组的数量,示例中共两组:group1、group2 [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
nginx安装与配置
storage方的nginx
fastdfs-nginx-module配置好了之后,还是不能通过http请求访问storage中的图片,因为没有http服务;部署nginx提供http服务,集成fastdfs-nginx-module;具体可参考我的博客:详细的最新版fastdfs单机版搭建,里面有讲到集成过程。所有的storage服务器都需要配置
集成好了,配置nginx配置文件:nginx-fdfs.conf
fastdfs(205)
user root;
worker_processes 1;
events {
use epoll; worker_connections 1024;
}
http {
server {
listen 8888;
server_name 192.168.1.205; location ~/group[1]/M00/{
#root /home/FastDFS/fdfs_storage/data;
ngx_fastdfs_module;
}
}
server {
listen 8080;
server_name 192.168.1.205;
location / {
root html;
index index.html index.htm;
}
}
}
fastdfs(206)
user root;
worker_processes 1;
events {
use epoll; worker_connections 1024;
}
http {
server {
listen 8888;
server_name 192.168.1.206; location ~/group[1]/M00/{
#root /home/FastDFS/fdfs_storage/data;
ngx_fastdfs_module;
}
}
server {
listen 8080;
server_name 192.168.1.206;
location / {
root html;
index index.html index.htm;
}
}
}
fastdfs(207)
user root;
worker_processes 1;
events {
use epoll; worker_connections 1024;
}
http {
server {
listen 8888;
server_name 192.168.1.207; location ~/group[2]/M00/{
#root /home/FastDFS/fdfs_storage/data;
ngx_fastdfs_module;
}
}
server {
listen 8080;
server_name 192.168.1.207;
location / {
root html;
index index.html index.htm;
}
}
}
fastdfs(208)
user root;
worker_processes 1;
events {
use epoll; worker_connections 1024;
}
http {
server {
listen 8888;
server_name 192.168.1.208; location ~/group[2]/M00/{
#root /home/FastDFS/fdfs_storage/data;
ngx_fastdfs_module;
}
}
server {
listen 8080;
server_name 192.168.1.208;
location / {
root html;
index index.html index.htm;
}
}
}
以nginx-fdfs.conf为配置文件来启动storage上的nginx:
[root@fastdfs3 sbin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx-fdfs.conf
自此storage方的nginx就配置好了
对外提供服务的nginx
VIP:192.168.1.200
centos211:nginx + keepalived master
centos212:nginx + keepalived backup
两台nginx实现对外服务的高可用,具体搭建过程可参考:nginx实现请求的负载均衡 + keepalived实现nginx的高可用
nginx的配置文件一样:
user root;
worker_processes 1;
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 65;
#gzip on; #设置 group1 的服务器
upstream fdfs_group1 {
server 192.168.1.205:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.206:8888 weight=1 max_fails=2 fail_timeout=30s;
} #设置 group2 的服务器
upstream fdfs_group2 {
server 192.168.1.207:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.208:8888 weight=1 max_fails=2 fail_timeout=30s;
} server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main; #设置 group 的负载均衡参数
location /group1/M00 {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://fdfs_group1;
} location /group2/M00 {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://fdfs_group2;
} #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、keepalived都配置好了后,先启动nginx,再启动keepalived
最终效果
访问http://192.168.1.200/group2/M00/00/00/wKgB0FshMB2AIBQXAABHO7x65CM071.jpg,出现如下美女
总结
1、了解fastdfs的原理很重要,只有理解了搭建起来才顺畅;
2、fastdfs-nginx-module的作用要了解清楚,不是充当nginx的角色哦;
3、对于内存太小的机器,我觉得还是没必要搭建这个集群了;我8G内存,启8个虚拟机中途直接死机了一次......
fastdfs集群版搭建(一)- storage集群搭建与统一入口访问的更多相关文章
- 阿里云重磅发布RDS for SQL Server AlwaysOn集群版
2018年双十一刚过,阿里云数据库发布RDS for SQL Server AlwaysOn集群版,这是业界除微软云SQL Database外,首家云计算公司基于SQL Server最新AlwaysO ...
- Consul集群版容器化部署与应用集成
背景 由于公司目前的主要产品使用的注册中心是consul,consul需要用集群来保证高可用,传统的方式(Nginx/HAProxy)会有单点故障问题,为了解决该问题,我开始研究如何只依赖consul ...
- docker下搭建fastfds集群版
搭建过程参考 作者 https://me.csdn.net/feng_qi_1984 的课程视频 声明:集群版是在我之前写的单机版基础之上进行搭建的,我将安装了fastfds单机版的docker打包成 ...
- Redis单机版以及集群版的安装搭建以及使用
1,redis单机版 1.1 安装redis n 版本说明 本教程使用redis3.0版本.3.0版本主要增加了redis集群功能. 安装的前提条件: 需要安装gcc:yum install g ...
- JAVAEE——宜立方商城08:Zookeeper+SolrCloud集群搭建、搜索功能切换到集群版、Activemq消息队列搭建与使用
1. 学习计划 1.solr集群搭建 2.使用solrj管理solr集群 3.把搜索功能切换到集群版 4.添加商品同步索引库. a) Activemq b) 发送消息 c) 接收消息 2. 什么是So ...
- 快速搭建redis单机版和redis集群版
单机版 第一步:需要安装redis所需的C语言环境,若虚拟机联网,则执行 yum install gcc-c++ 第二步:redis的源码包上传到linux系统 第三步:解压缩redis tar ...
- SpringCloud的入门学习之Netflix-eureka(Eureka的集群版搭建)
1.Eureka单机版的话,可能会出现单点故障,所以要保障Eureka的高可用,那么可以进行搭建Eureka的集群版. 高可用的Eureka的注册中心,将注册中心服务部署到多台物理节点上,形成一个集群 ...
- 搭建集群版Eureka Server
注册中心作为微服务架构中的核心功能,其重要性不言而喻.所以单机版的Eureka Server在可靠性上并不符合现在的互联网开发环境.集群版的Eureka Server才是商业开发中的选择. Eurek ...
- solrcloud集群版的搭建
说在前面的话 之前我们了解到了solr的搭建,我们的solr是搭建在tomcat上面的,由于tomcat并不能过多的承受访问的压力,因此就带来了solrcloud的时代.也就是solr集群. 本次配置 ...
随机推荐
- Mouse Detected Problem
通常分三种情形: 鼠标完全不工作鼠标工作一段时间后不工作鼠标的按钮或者滚轮不工作 必要提交信息:1.鼠标的具体厂商和型号2.鼠标连接PC方式:串口.PS/2.USB或无线USB等:3.鼠标的工作机制: ...
- C++ 提取网页内容系列之二
标 题: C++ 提取网页内容系列作 者: itdef链 接: http://www.cnblogs.com/itdef/p/4171203.html 欢迎转帖 请保持文本完整并注明出处 另外一种下载 ...
- playframework 一步一步来 之 日志 (二)
带着之前的疑问,我们先回顾一下日志相关的知识: 首先是SL4J,SL4J是个什么东西来着?官方解释为:“The Simple Logging Facade for Java (SLF4J) serve ...
- 一不注意,在Unity3D中DllImport 引起的Bug.
单要说这个Bug是很简单,但是得从头说起. 一些大型的网络游戏,或者加载比较多的一些场景时,如果要等待所有模型,贴图等各种资源文件加载完毕才能执行游戏,对用户将会是一个很头大的事情.所以就需要用到动态 ...
- oracle序列的使用
第一天:序列的使用 在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方. 1.Create Sequence 你首先要有CREATE SEQ ...
- clickhouse安装使用文档
Clickhouse简介 Clickhouse是什么 1. 开源的列存储数据库管理系统 2. 支持线性扩展 3. 简单方便 4. 高可靠性 5. 容错(支持多主机异步复制,可以跨多个数据中心部署. 单 ...
- nginx安装以及调优
目录: 1.安装nginx 2.配置nginx 3.调优nginx 4.性能测试 ps:为了方便,文档使用docker容器来操作的. 1.安装nginx 1.1 启动容器.download nginx ...
- python数据结构之直接插入排序
python数据结构之直接插入排序 #-*-encoding:utf-8-*- ''' 直接插入排序: 从序列的第二个元素开始,依次与前一个元素比较,如果该元素比前一个元素大, 那么交换这两个元素.该 ...
- 三.mysql表的完整性约束
mysql表的完整性约束 什么是约束 not null 不能为空的 unique 唯一 = 不能重复 primary key 主键 = 不能为空 且 不能重复 foreign key ...
- linux下报错bash: service: command not found
在linux下操作的时候经常会遇到,bash: service: command not found这个错误,以前在网上找了,照着弄了,也没细看原因,今天又碰到这个问题,就顺便研究一下. 1.通常这种 ...