一、简介

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

  FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。

存储节点存储文件,完成文件管理的所有功能:就是这样的存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。
跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
安装顺序:
1)FDFS的Tracker
2)FDFS的Storage
3)Tracker安装Nginx
4)Storage安装Fast-nginx-module、Nginx
5)安装代理:Nginx1、Nginx2+keepalive
fastdfs-nginx-module 作用说明
老版本存在的问题,文件过程中存在延迟问题?
解决方法:安装fastdfs-nginx-module
FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储,但是同组存储服务器之间需要进行文件复制, 复制的过程中会造成同步延迟的问题。
假设 Tracker 服务器将文件上传到了 192.168.56.11,上传成功后文件 ID已经返回给客户端。此时 FastDFS 存储集群机制会将这个文件同步到同组存储 192.168.56.12,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 192.168.56.12 上取文件,就会出现文件无法访问的错误。而 fastdfs-nginx-module 可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。
(解压后的 fastdfs-nginx-module 在 nginx 安装时使用)
二、服务器规划
2.1、主机规划

2.2、FastDFS系统结构图

2.3、磁盘目录规划
说明
位置
所有安装包
/usr/local/src
数据存储位置
/home/dfs/
#这里我为了方便把日志什么的都放到了dfs
三、公共组件安装
 
以下服务器安装的公共组件,不有做任何配置,仅安装组件。
【百度网盘存储相关组件下载链接】: fastdfs-v6.03
 
3.1、安装公共组件的查看主机表格。
 

3.2、编译环境:

3.2.1、依赖软件包:
yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y
3.2.2、系统环境准备:
 
[root@ ~]# uname -r
3.10.0-327.el7.x86_64
[root@ ~]# sestatus
SELinux status: disabled
[root@ ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
 
3.3、安装公共组件说明
安装公共组件的主机包含:192.168.56.11、192.168.56.12、192.168.56.13、192.168.56.14、192.168.56.40、192.168.56.45
 
3.3.1、目录创建
mkdir /home/dfs #创建数据存储目录
cd /usr/local/src #切换到安装目录准备下载安装包
 
3.3.2、安装libfatscommon
git clone https://github.com/happyfish100/libfastcommon.git --depth 1
cd libfastcommon/
./make.sh && ./make.sh install #编译安装
 
3.3.3、安装FastDFS
cd ../ #返回上一级目录
git clone https://github.com/happyfish100/fastdfs.git --depth 1
cd fastdfs/
./make.sh && ./make.sh install #编译安装
#配置文件准备
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf #客户端文件,测试用
 再次提醒:以上组件需要在Tracker1、Tracker2、Storage1、Storage2、Storage3、Storage4。
 
四、配置tracker服务器(192.168.56.40、192.168.0.45)

4.1、修改tracker配置文件
vim /etc/fdfs/tracker.conf
# 修改的内容如下:
disabled=false              # 启用配置文件
port=22122                  # tracker服务器端口(默认22122)
base_path=/home/dfs         # 存储日志和数据的根目录
store_lookup=0              # 轮询方式上传

4.2、启动tracker服务器
cp /usr/local/src/fastdfs/init.d/fdfs_storaged
chmod +x /etc/rc.d/init.d/fdfs_trackerd
/etc/init.d/fdfs_trackerd start
或者
systemctl start fdfs_trackerd
或者
fdfs_trackerd /etc/fdfs/tracker.conf start

初次启动,会在/data/fastdfs/tracker目录下生成logs、data两个目录。
drwxr-xr-x 2 root root 178 May  3 22:34 data
drwxr-xr-x 2 root root  26 May  2 18:57 logs

检查FastDFS Tracker Server是否启动成功:
ps aux | grep fdfs_trackerd

4.3、tracker server的关闭命令
/etc/init.d/fdfs_trackerd stop
或者
systemctl stop fdfs_trackerd
或者
fdfs_trackerd /etc/fdfs/tracker.conf stop

4.4、设置tracker server开机启动
  chkconfig fdfs_trackerd on

配置文件准备:cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf

4.5、192.168.56.11、192.168.56.12修改storage配置文件
vim /etc/fdfs/storage.conf
# 修改的内容如下:
disabled=false     # 启用配置文件
port=23000                           # storage的端口号,同一个组的 storage 端口号必须相同
group_name=group1
base_path=/home/dfs                  # 存储日志和数据的根目录
store_path0=/home/dfs                # 第一个存储目录
store_path_count=1                   #存储路径个数,需要和store_path个数匹配
tracker_server=192.168.56.40:22122   # tracker服务器的IP地址和端口
tracker_server=192.168.56.45:22122   # 多个tracker直接添加多条配置

配置group_name
不同分组配置不同group_name,第一组为group1, 第二组为group2

4.6、192.168.56.13、192.168.56.14修改storage配置文件
vim /etc/fdfs/storage.conf
# 修改的内容如下:
disabled=false     # 启用配置文件
port=23000                                         # storage的端口号,同一个组的 storage 端口号必须相同
group_name=group2
base_path=/home/dfs       # 存储日志和数据的根目录
store_path0=/home/dfs     # 第一个存储目录
store_path_count=1                    #存储路径个数,需要和store_path个数匹配
tracker_server=192.168.56.40:22122    # tracker服务器的IP地址和端口
tracker_server=192.168.56.45:22122    # 多个tracker直接添加多条配置

4.7、启动storage服务器
/etc/init.d/fdfs_storaged start
或者
systemctl start fdfs_storaged
或者
fdfs_storaged /etc/fdfs/tracker.conf start

初次启动,会在/home/dfs目录下生成logs、data两个目录。
drwxr-xr-x 259 root root 8192 May  3 23:06 data
drwxr-xr-x   2 root root   26 May  2 19:12 logs

检查FastDFS Tracker Server是否启动成功:
ps aux | grep fdfs_storaged

所有 Storage 节点都启动之后,可以在任一 Storage 节点上使用如下命令查看集群信息:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
部分截图信息

看到存储节点状态为 ACTIVE 则表示已生效。
 
4.8、storage server的关闭命令
/etc/init.d/fdfs_storaged stop
或者 systemctl stop fdfs_storaged
或者 fdfs_storaged /etc/fdfs/tracker.conf stop
 
4.9、设置storage server开机启动
chkconfig fdfs_storaged on
 
五、文件上传测试(192.168.56.14)
5.1、修改Tracker服务器客户端配置文件
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
vim /etc/fdfs/client.conf # 修改以下配置,其它保持默认
base_path=/home/dfs
tracker_server=192.168.56.40:22122 # tracker服务器IP和端口
tracker_server=192.168.56.45:22122 #tracker服务器IP2和端口
 
5.2、执行文件上传命令
#/usr/local/src/beijing.jpg 是需要上传文件路径 /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/beijing.jpg 返回文件ID号:group2/M00/00/00/wKg4DV2x5f2AVOoHAAR_vqG9FTg399.jpg
(能返回以上文件ID,说明文件已经上传成功)
 
5.3、报错修改
修改vim /etc/fdfs/client.conf 修改两处
 
六、在storage节点安装Nginx和fastdfs-nginx-module模块
需要安装的主机含:192.168.56.11、192.168.56.12、192.168.56.13、192.168.56.14
 
6.1、Nginx和fastdfs-nginx-module安装方法
6.1.1、安装fastdfs-nginx-module
cd ../ #返回上一级目录 git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1
cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
 
6.1.2、安装nginx
wget http://nginx.org/download/nginx-1.16.1.tar.gz #下载nginx压缩包
tar -zxvf nginx-1.16.1.tar.gz #解压
cd nginx-1.16.1 #添加fastdfs-nginx-module模块
./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/
make && make install #编译安装
 
6.2、fastdfs-nginx-module配置修改
6.2.1、复制 fastdfs-nginx-module 源码中的配置文件到 /etc/fdfs 目录,并修改
cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
 
6.2.2、192.168.56.11和192.168.56.12修改配置:
vim /etc/fdfs/mod_fastdfs.conf
#需要修改的内容如下
tracker_server=192.168.56.40:22122 # 服务器1
tracker_server=192.168.56.45:22122 # 服务器2
url_have_group_name=true
store_path0=/home/dfs
group_name=group1
 
6.2.3、192.168.56.13和192.168.56.14修改配置:
vim /etc/fdfs/mod_fastdfs.conf
#需要修改的内容如下
tracker_server=192.168.56.40:22122 # 服务器1
tracker_server=192.168.56.45:22122 # 服务器2
url_have_group_name=true
store_path0=/home/dfs
group_name=group2
注意group_name的设置,如果是group1就设置为group1,如果是group2就设置为group2。
 
6.2.4、复制http.conf、mime.types
cd /usr/local/src/fastdfs/conf
cp http.conf mime.types /etc/fdfs/
提示:如果没有这两个文件,会出现不能访问nginx:8888的端口
 
6.2.5、192.168.56.11、12、13、14配置 Nginx,简洁版nginx配置样例
user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8888;
server_name localhost;
location ~/group[1-2]/M00
{
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html { root html;
}
}
}
说明:
A、8888 端口值是要与/etc/fdfs/storage.conf中的 http.server_port=8888 相对应,因为 http.server_port 默认为 8888,如果想改成 80,则要对应修改过来。
B、Storage 对应有多个 group 的情况下,访问路径带 group 名,如/group1/M00/00/00/xxx,对应的 Nginx 配置为:
location ~/group([0-9])/M00 { ngx_fastdfs_module; }
C、如查下载时如发现老报 404,将 nginx.conf 第一行 user nobody 修改为 user root 后重新启动。
 
6.2.7、启动Nginx
/usr/local/nginx/sbin/nginx
 
6.2.8、通过浏览器访问测试时上传的文件
 
七、在tracker节点(192.168.56.40、192.168.56.45)安装Nginx
7.1、 在 tracker 上安装的 nginx 主要提供 http 访问的反向代理、负载均衡以及缓存服务
cd nginx-1.16.1
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre --with-http_realip_module
make && make install
 
7.2、配置nginx负载均衡和缓存
user root;
worker_processes 1;
events {
worker_connections 1024;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
upstream fdfs_group1 {
server 192.168.56.11:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.56.12:8888 weight=1 max_fails=2 fail_timeout=30s;
}
upstream fdfs_group2 {
server 192.168.56.13:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.56.14: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_pass http://fdfs_group2;
}
location /group2/M00 {
proxy_pass http://fdfs_group2;
}
}
}

7.3、启动Nginx

/usr/local/nginx/sbin/nginx
 
 八、在Nginx代理(192.168.56.20、192.168.56.25)安装HA
8.1、复制http.conf、mime.types
cd /usr/local/src/fastdfs/conf
cp http.conf mime.types /etc/fdfs/
 
8.2、两台服务器做Nginx+keepalive组建的HA集群;
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 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 /tmp/cache/nginx/proxy_cache levels=1:2 keys_zone=http-cache:200m max_size=1g inactive=30d;
proxy_temp_path /tmp/cache/nginx/proxy_cache/tmp; upstream fdfs_group1 {
server 192.168.56.40:8000 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.56.45:8000 weight=1 max_fails=2 fail_timeout=30s;
}
upstream fdfs_group2 {
server 192.168.56.40:8000 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.56.45:8000 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
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;
}
#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;
}
}
}
 
8.3、建立缓存目录
mkdir -p /tmp/cache/nginx/proxy_cache mkdir -p /tmp/cache/nginx/proxy_cache/tmp
 
8.4、启动服务
/usr/local/nginx/sbin/nginx -t
/usrl/local/nginx/sbin/nginx
 
9、测试
[root@192.168.56.40 src]# fdfs_upload_file /etc/fdfs/client.conf beijing1.jpg
group2/M00/00/00/wKg4DV2wbUCAehX0AA_O6LMvcdg092.jpg
 
 浏览器访问:http://192.168.56.150/group2/M00/00/00/wKg4DV2wbUCAehX0AA_O6LMvcdg092.jpg
[root@192.168.56.45 src]# fdfs_upload_file /etc/fdfs/client.conf beijing2.jpg
group1/M00/00/00/wKg4DF2wbTSAHksAAAStIAR5bms782.jpg
 
 浏览器访问:http://192.168.56.150/group1/M00/00/00/wKg4DF2wbTSAHksAAAStIAR5bms782.jpg
 
 
 
 
 
 
 

FastDFS集群-安装说明的更多相关文章

  1. FastDFS 集群 安装 配置

    这篇文章介绍如何搭建FastDFS 集群 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的 ...

  2. FastDFS集群安装

    集群安装1.FastDFS安装 Tracker,nginx 192.168.56.113       192.168.56.114 storage group1      192.168.56.115 ...

  3. fastdfs集群安装过程_学习笔记

    最终效果 初始化为6个节点 在/usr/local/software 目录下上传需要用到tar包,分别在各个节点上传 使用scp 将本地software目录复制到其他节点上 73.74为 tracke ...

  4. 集群 安装 配置FastDFS

    FastDFS 集群 安装 配置 这篇文章介绍如何搭建FastDFS 集群 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载 ...

  5. 一张图讲解最少机器搭建FastDFS高可用分布式集群安装说明

     很幸运参与零售云快消平台的公有云搭建及孵化项目.零售云快消平台源于零售云家电3C平台私有项目,是与公司业务强耦合的.为了适用于全场景全品类平台,集团要求项目平台化,我们抢先并承担了此任务.并由我来主 ...

  6. Dubbo入门到精通学习笔记(十七):FastDFS集群的安装、FastDFS集群的配置

    文章目录 FastDFS集群的安装 FastDFS 介绍(参考:http://www.oschina.net/p/fastdfs) FastDFS 上传文件交互过程: FastDFS 下载文件交互过程 ...

  7. Linux安装fastdfs集群部署

    过程问题: make: gcc:命令未找到 解决: yum -y install gcc 一.环境和版本: Linux环境:CentOS 7.6 libfastcommon版本:1.0.39 Fast ...

  8. 19.fastDFS集群理解+搭建笔记

    软件架构理解 1FastDFS介绍 1.1什么是FastDFS FastDFS是用c语言编写的一款开源的分布式文件系统.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并 ...

  9. FastDfs集群docker化部署

    初识分布式文件系统FastDFS- 1.分布式与集群的区别 区别:集群是个物理形态,分布式是个工作方式.只要是一堆机器,就可以叫集群,他们是不是一起协作着干活,这个谁也不知道:一个程序或系统,只要运行 ...

随机推荐

  1. [Linux] Linux下undefined reference to ‘pthread_create’问题解决

    问题的原因:pthread不是Linux下的默认的库,也就是在链接的时候,无法找到phread库中函数的入口地址,于是链接会失败. 解决:在gcc编译的时候,附加要加 -lpthread参数即可解决.

  2. Github 持续化集成 工作流 Npm包自动化发布

    Github 持续化集成 工作流 Npm包自动化发布 简介   持续集成指的是,频繁地(一天多次)将代码集成到主干. 它的好处主要有两个: 快速发现错误.每完成一点更新,就集成到主干,可以快速发现错误 ...

  3. 解决微信小程序开发中wxss中不能用本地图片

    微信小程序开发中wxss中不能用本地图片,我们可以用将我们的图片传到服务器上,然后直接引用在线地址.但是当我们没有服务器时,我们可以用"图床",这个具体可以百度.这里我们用第二种方 ...

  4. 5分钟了解Prometheus

    Prometheus(译:普罗米修斯)用领先的开源监控解决方案为你的指标和警报提供动力(赋能). 1.  概述 1.1.  Prometheus是什么? Prometheus是一个开源的系统监控和警报 ...

  5. 转:LinkedHashMap和HashMap的比较使用

    import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.uti ...

  6. JSP常规内容

    1.forword和redirect的区别? forword是服务器请求资源,服务器直接读取URL,把目标地址URL响应读取出来,然后再把这些内容发送给浏览器.(特点是url和request sess ...

  7. C++进程间通讯方式

    1.剪切板模式. 在MFC里新建两个文本框和两个按钮,点击发送按钮相当于复制文本框1的内容,点击接收按钮相当于粘贴到文本框2内: 发送和接收按钮处功能实现如下: void CClipboard2Dlg ...

  8. js禁止刷新的简单方法

    //禁止用F5键  这个是键盘按下时触发document.onkeydown = function() { if ( event.keyCode==116) {event.keyCode = 0; e ...

  9. 商用hadoop集群的配置命令分布

    角色 安装 hdfs配置 yarn配置 hdfs 格式化 启动yarn服务 启动hdfs服务 master yum install hadoop-hdfs-namenode yum install h ...

  10. mysql replace into使用

    使用mysql插入数据时,我们通常使用的是insert into来处理,replace into有时可以替代insert into功能,但replace into也有自己的用法 准备一张测试表: CR ...