(二)FastDFS 高可用集群架构学习---搭建
一、单group 单磁盘 的 FastDFS 集群
a、前期准备
1、系统软件说明:
| 名称 | 说明 |
| CentOS | 7.x(安装系统) |
| libfastcommon | FastDFS分离出的一些公用函数包 |
| FastDFS | FastDFS本体 |
| fastdfs-nginx-module | FastDFS和nginx的关联模块,解决组内同步延迟问题 |
| nginx | Web访问 storage Server 文件 |
2、设备准备

3、基础环境准备
目录准备:
| 存放安装包: | /opt/fastdfs |
| 日志和数据存储位置: | /data/fastdfs |
| nginx安装目录: | /home/software/nginx |
#mkdir -p /opt/fastdfs /data/fastdfs /home/software/nginx
准备基础系统环境:
1 yum groups install Development Tools -y
2 yum install perl -y
3 yum -y install vim wget lrzsz #基础工具
4 yum -y install gcc-c++ zlib-devel pcre-devel #nginx 依赖
安装包准备:
| libfastcommon | https://github.com/happyfish100/libfastcommon/archive/V1.0.39.tar.gz |
| FastDFS | https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz |
| Nginx | wget http://nginx.org/download/nginx-1.14.0.tar.gz |
| fastdfs-nginx-module | https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz |

b、部署集群
1、安装软件
####安装 libfastcommon
$ cd /opt/fastdfs
$ tar -zxvf libfastcommon-1.0.39.tar.gz
$ cd libfastcommon-1.0.39/
$ ./make.sh
$ ./make.sh install ####安装 FastDFS
$ cd /opt/fastdfs
$ tar -zxvf fastdfs-5.11.tar.gz
$ cd fastdfs-5.11/
$ ./make.sh
$ ./make.sh install ####安装 fastdfs-nginx-module
$ cd /opt/fastdfs
$ tar -zxvf fastdfs-nginx-module-1.20.tar.gz ####安装 Nginx
$ cd /opt/fastdfs
$ tar -zxvf nginx-1.14.0.tar.gz
$ cd nginx-1.14.0
$ ./configure --prefix=/home/software/nginx --add-module=/opt/fastdfs/fastdfs-nginx-module-1.20/src
$ make && make install ###如果报错:#include "common_define.h" 报错如下图:
修改/opt/fastdfs/fastdfs-nginx-module-1.20/src/config 文件为如下:
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
然后重新:
$ ./configure --prefix=/home/software/nginx --add-module=/opt/fastdfs/fastdfs-nginx-module-1.20/src
$ make && make install

2、配置 tracker server( node1和node2 配置)
$ mv /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf #准备配置文件
$ vim /etc/fdfs/tracker.conf #需要修改的内容如下
bind_addr=服务器IP
port=22122 # tracker服务器端口(默认22122,一般不修改)
base_path=/data/fastdfs # 存储日志和数据的根目录
max_connections=1024
work_threads=4
store_lookup=2 #load balance, select the max free space group to upload file
store_server=0 #"0"代表轮询,下同
store_path=0
download_server=0
reserved_storage_space = 25%
log_level=debug
run_by_group=root
run_by_user=root
#编辑启动文件
$ vim /usr/lib/systemd/system/fastdfs-tracker.service
[Unit]
Description=The FastDFS File server
After=network.target remote-fs.target nss-lookup.target [Service]
Type=forking
ExecStart=/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
ExecStop=/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop
ExecRestart=/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart [Install]
WantedBy=multi-user.target #### 加载配置,启动服务 ####
$ systemctl daemon-reload
$ systemctl enable fastdfs-tracker.service
$ systemctl start fastdfs-tracker.service
$ netstat -tulnp #查看服务是否启动,端口是否打开
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1034/master
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 2263/fdfs_trackerd
3、配置 Storage server (node1,node2,node3 配置)
$ mv /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
$ vim /etc/fdfs/storage.conf #需要修改的内容如下
bind_addr=每服务器IP
port=23000 # storage服务端口(默认23000,一般不修改)
base_path=/data/fastdfs # 数据和日志文件存储根目录
max_connections=1024
work_threads=4
sync_wait_msec=50 #同步文件时,如果从binlog中没有读到要同步的文件,休眠N毫秒后重新读取。0表示不休眠,立即再次尝试读取。出于CPU消耗考虑,不建议设置为0。如何希望同步尽可能快一些,可以将本参数设置得小一些,比如设置为10ms
sync_interval=0
sync_start_time=00:00
sync_end_time=23:59
write_mark_file_freq=500 # 同步完N个文件后,把storage的mark文件同步到磁盘.注:如果mark文件内容没有变化,则不会同步
store_path0=/data/fastdfs # 第一个存储目录
subdir_count_per_path=256
tracker_server=192.168.3.50:22122 # tracker服务器IP和端口
tracker_server=192.168.3.53:22122 # tracker服务器IP和端口
log_level=debug
run_by_group=root
run_by_user=root
http.server_port=8888 # http访问文件的端口(默认8888,看情况修改,和nginx中保持一致) #编辑启动文件
$ vim /usr/lib/systemd/system/fastdfs-storage.service [Unit]
Description=The FastDFS File server
After=network.target remote-fs.target nss-lookup.target [Service]
Type=forking
ExecStart=/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
ExecStop=/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop
ExecRestart=/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart [Install]
WantedBy=multi-user.target #### 加载配置,启动服务 ####
$ systemctl daemon-reload
$ systemctl enable fastdfs-storage.service
$ systemctl start fastdfs-storage.service
$ netstat -tulnp #查看服务是否启动,端口是否打开
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1034/master
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 2263/fdfs_trackerd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 597/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1115/sshd
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 2338/fdfs_storaged
#### 查看集群状态 ####
$ fdfs_monitor /etc/fdfs/storage.conf list

4、配置测试 Client(任意node上配置,用于测试上传文件)
$ mv /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
$ vim /etc/fdfs/client.conf #需要修改的内容如下
connect_timeout=30
network_timeout=60
base_path=/data/fastdfs
tracker_server=192.168.3.50:22122 # tracker服务器IP和端口
tracker_server=192.168.3.53:22122 # tracker服务器IP和端口 #### 测试上传文件 aa.jpg ####
$ fdfs_upload_file /etc/fdfs/client.conf aa.jpg #aa.jpg 为要上传的图片
注:返回的文件名需要记录下后期web 访问时需要用到。
返回如下:group1/M00/00/00/wKgDMmD5PSGAUexsAAYevEPlQIk762.jpg

5、配置astdfs-nginx-module 和 Nginx (node1,node2,node3 配置)
####配置 fastdfs-nginx-module ####
$ cp /opt/fastdfs/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs
$ vim /etc/fdfs/mod_fastdfs.conf #需要修改的内容如下
connect_timeout=2
network_timeout=30
group_name=group1
tracker_server=192.168.3.50:22122 # tracker服务器IP和端口
tracker_server=192.168.3.53:22122 # tracker服务器IP和端口
base_path=/data/fastdfs
load_fdfs_parameters_from_tracker=true
storage_sync_file_max_delay = 86400
use_storage_id = false
url_have_group_name = true #设置url中是否包含group名字,必须包含,否则无法正常反问到文件
store_path0=/data/fastdfs
log_level=info
#### 配置 Nginx ####
$ cp /opt/fastdfs/fastdfs-5.11/conf/http.conf /etc/fdfs/ #供nginx访问使用
$ cp /opt/fastdfs/fastdfs-5.11/conf/mime.types /etc/fdfs/ #供nginx访问使用
$ vim /home/software/nginx/conf/nginx.conf #修改和添加如下配置
修改端口:8888
添加配置:location /group1/ {
root /data/fastdfs;
ngx_fastdfs_module;
}
#具体如下图 $ cd /home/software/nginx/sbin
$ ./nginx -V #查看安装详情
$ ./nginx -v #查看版本
$ ./nginx -t -c /home/software/nginx/conf/nginx.conf #检测配置文件
$ ./nginx #启动nginx
$ pkill -9 nginx #停止nginx

检测结果如下:is ok,表示配置没有问题

6、浏览器访问:访问如下链接,均返回相同结果。
http://192.168.3.50:8888/group1/M00/00/00/wKgDMmD5PSGAUexsAAYevEPlQIk762.jpg
http://192.168.3.53:8888/group1/M00/00/00/wKgDMmD5PSGAUexsAAYevEPlQIk762.jpg
http://192.168.3.58:8888/group1/M00/00/00/wKgDMmD5PSGAUexsAAYevEPlQIk762.jpg

二、多group 多磁盘 的 FastDFS 集群
较之前变化如下:
1、目录准备:
| 存放安装包: | /opt/fastdfs |
| 数据存储位置: | /data/fastdfs |
| nginx安装目录: | /home/software/nginx |
| 磁盘存储目录: | /data/dataN(N:表示磁盘编号) |
#mkdir -p /opt/fastdfs /data/fastdfs /home/software/nginx
2、设备变化

3、配置变化:
#### storage.conf 、mod_fastdfs.conf #####
group_name= 更具规划分组写入名称,例:group1,group2,group3
store_path_count= 2 # 磁盘数量,本案例中有两个磁盘
store_path0=/data/data1
store_path1=/data/data2 #### nginx.conf ####
添加配置:location /group1/ { #此处名称为所属组名称,本案例:group1-3
root /data/fastdfs;
ngx_fastdfs_module;
}
4、多组模式。组内的每个Nginx 只能提供访问本组内部的数据,不能访问其他组数据,因此前边需要在加一层Nginx 代理。
yum -y install vim nginx
vim /etc/nginx/nginx.conf
user root;
include /etc/nginx/conf.d/*.conf;
## 添加如下信息
upstream fdfs_group01 {
server 192.168.3.20:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.3.51:8888 weight=1 max_fails=2 fail_timeout=30s;
}
upstream fdfs_group02 {
server 192.168.3.38:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.3.53:8888 weight=1 max_fails=2 fail_timeout=30s;
}
upstream fdfs_group03 {
server 192.168.3.49:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.3.58:8888 weight=1 max_fails=2 fail_timeout=30s;
} server {
listen 80;
server_name 192.168.3.55;
#root /usr/share/nginx/html; location /group1/ {
proxy_pass http://fdfs_group01;
}
location /group2/ {
proxy_pass http://fdfs_group02;
}
location /group3/ {
proxy_pass http://fdfs_group03;
}
注:如果没有关闭SElinux,临时关闭,需要在fastdfs 节点上执行以下下命令Nginx 才可以被正常代理。
# setenforce 0
# setsebool -P httpd_can_network_connect 1
在客户端访问如下链接均显示正常:
192.168.3.55/group1/M00/00/00/wKgDFGD6b9KALiDLAAYevEPlQIk376.jpg
192.168.3.55/group1/M01/00/00/wKgDFGD6cNGAXGzwAAT4rd1P2iI215.jpg
192.168.3.55/group2/M00/00/00/wKgDNWD6cFyAEm30AAYevEPlQIk448.jpg
192.168.3.55/group2/M01/00/00/wKgDJmD6cQOAXzi1AAT4rd1P2iI341.jpg
192.168.3.55/group3/M00/00/00/wKgDOmD6cHuAcdpIAAT4rd1P2iI451.jpg
192.168.3.55/group3/M01/00/00/wKgDMWD6cH6AD1ZQAAT4rd1P2iI173.jpg
(二)FastDFS 高可用集群架构学习---搭建的更多相关文章
- (一)FastDFS 高可用集群架构学习---简介
1.什么是FastDFS FastDFS 是余庆老师用c语言编写的一筐开源的分布式文件系统,充分考虑了冗余备份,负载均衡,线性扩容等机制,并注重高可用.高性能等指标,使用FastDFS可以很容易搭建一 ...
- (三)FastDFS 高可用集群架构学习---Client 接口开发
一.Python3 与 FastDFS 交互 1.安装 py3fdfs模块 # pip3 install py3Fdfs 2.测试使用 py3Fdfs 与 Fastdfs 集群交互(上传文件) fro ...
- FastDFS高可用集群架构配置搭建
一.基本模块及高可用架构 FastDFS 是余庆老师开发的一个开源的高性能分布式文件系统(DFS). 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡. FastDFS 系统有 ...
- FastDFS高可用集群架构配置搭建及使用
一,概述FastDFS 是一个开源的高性能分布式文件系统(DFS). 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡.FastDFS 系统有三个角色:跟踪服务器(Tracker ...
- (四)FastDFS 高可用集群架构学习---后期运维--基础知识及常用命令
1.fastdfs 七种状态 FDFS_STORAGE_STATUS:INIT :初始化,尚未得到同步已有数据的源服务器 FDFS_STORAGE_STATUS:WAIT_SYNC :等待同步,已得到 ...
- Java高可用集群架构与微服务架构简单分析
序 可能大部分读者都在想,为什么在这以 dubbo.spring cloud 为代表的微服务时代,我要还要整理这种已经"过时"高可用集群架构? 本人工作上大部分团队都是7-15人编 ...
- MongoDB 高可用集群架构简介
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. 转载自严澜的博文——<如何搭建高效的 ...
- 构建MHA实现MySQL高可用集群架构
一.MHA简介 MHA(Master HighAvailability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开 ...
- MYSQL高可用集群架构-MHA架构
1 MHA简介:MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司 ...
随机推荐
- Java面向对象系列(6)- 封装详解
封装 该露的露,该藏得藏 我们程序设计要追求"高内聚,低耦合".高内聚就是类得内部数据操作细节自己完成,不允许外部干涉:低耦合:仅暴露少量得方法给外部使用 封装(数据得隐藏) 通常 ...
- mysql 添加远程访问
第一种:mysql 5.0(两种方式) 一. 在命令窗口输入,mysql -u root -p 回车,并输入密码 执行 use mysql 执行下面句子,查看权限,root默认权限为localhos ...
- 关于我刚开始学习c语言的这档事
关于我刚开始学习C语言的这档事 就在9月20日下午,记得王老师曾提及三类人,一类专注于自己内心的感受:一类人专注于探索与创造:还有一类专注于效率的最大化.思绪不禁回想到11号至今的学习过程-- 我的学 ...
- 联表多字段update更新语句
前言 最近需要写联表多字段update更新语句,发现不同的数据库,SQL语法也不一样,正好我这里有MySQL.Oracle.PgSQL三种数据库环境,分别练习.实操这三种数据库的联表update语句 ...
- 三种方法求解最大子区间和:DP、前缀和、分治
题目 洛谷:P1115 最大子段和 LeetCode:最大子序和 给出一个长度为 \(n\) 的序列 \(a\),选出其中连续且非空的一段使得这段和最大. 挺经典的一道题目,下面分别介绍 \(O(n) ...
- node-gyp项目命名BUG
当我们编写node原生模块的时候,免不了对node-gyp项目进行命名,在node-gyp进行build的时候,会跟binding.gyp配置文件中的target_name生成对应的原生模块.但是,如 ...
- IPtable防火墙概念介绍
1.iptables安全优化 1.不配外网,做代理转发或者防火墙映射 2.并发过大,不建议开启防火墙 2.防火墙的工作流程: 按照配置规则的顺序自上而下,从前到后进行过滤 如果匹配上新规则,表明是阻止 ...
- Python | 一键生成九宫格图片
一键生成九宫格图片 首先我们准备几张图片: 将代码文件放在放置图片的地方,用软件打开: 点击运行,在当前目录下会生成一个文件夹: 打开新生成的文件夹: 打开对应图片的名称文件夹: 如果不想图片被分成9 ...
- Linux中的文件使用FTP进行文件备份
注意!!! 本文是在linux中进行ftp备份(备份到另一个linux服务器) 上传思路: 1.每次上传文件时, 后台接收文件, 使用transferTo上传到Linux服务器 2.把文件路径 + F ...
- spring提供的可拓展接口
接口:SmartLifecycle(https://www.jianshu.com/p/7b8f2a97c8f5)