FastDFS部署 实际项目

1. FastDFS服务端有2个角色 分别是tracker(跟踪器(或说是调度器会更合适)) 和 storage(存储节点)。
2. tracker负责调度和负载均衡,并不需要存储文件的索引信息,因为文件上传后 stroage 返回给客户端的文件ID中就包含了组名、文件相对路径和文件名等(文件ID还包含了文件大小、时间戳、源storage server IP地址、文件内容校验码、随机数等), client可以根据文件ID直接定位到文件所在的组(但具体哪个storage server下载就需要询问tracker server)。
3. storage负责文件的管理(包括: 存储,同步,提供存取接口),并对文件的meta data(元数据)进行管理,meta data就是指文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,文件的meta data是文件属性列表,可以包含多个键值对。
4. tracker 和 storage都可以由一台或多台服务器构成,均可以随时增加或减少而不影响线上服务(存储卷中只有一台服务器除外,详细见存储原理)。其中 tracker 所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
存储原理:1. 为了支持大容量,storage采用了 "分卷" 的组织方式,整个存储系统由一个或多个卷组成(相当于raid0)
2. 卷与卷之间的文件是相互独立的,所有卷的容量累加起来就是整个存储系统的容量。
3. 其中一个卷 可以由一台或多台存储服务器组成,同一个卷下的存储服务器中的文件都是相同的(相当于raid1,所以一般由2台服务器组成一个卷,卷的容量以卷内服务器磁盘空间最小的为准),卷中的多台存储服务器起到了冗余和负载均衡的作用。
4. 经过第 1、3点的介绍,就可以知道,整个FastDFS的存储是类似raid10的逻辑,底层分卷 卷中做raid1 再把所有卷通过raid0逻辑叠加起来。
5. storage接收到写文件请求时,会根据配置好的规则 选择其中一个存储目录来存储文件。
6. 为了避免单个目录下的文件数太多,storage第一次启动时,会在每个数据存储目录里创建2级子目录,每级256个,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后直接以本地文件存储到该目录中。(所以才能用nginx的方式来读取该文件 见后面的实验)
6. 在卷中增加服务器时,同步文件由系统自动完成,同步完成后,系统会自动将新增服务器上线提供服务
7. 当存储空间不足时,只需要动态添加卷,这样就扩大了存储系统的容量
上传和下载过程:
-- 注: FastDFS的文件标识由两个部分组成: 卷名和文件名 缺一不可
上传过程
1. client询问tracker上传到的storage,不需要附加参数;
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件上传。
下载过程
1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件下载。
服务器角色:
192.168.5.231 tracker
192.168.5.233 group1/stroage1
192.168.5.234 group1/storage2
==========================每台服务器fastdfs安装通用步骤==========================
1,下载fastdfs v5.05
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
2, 下载libfastcommon
tar -xzvf V1.0.7.tar.gz
cd libfastcommon-1.0.7/
./make.sh -- 里面自带的安装脚本
./make.sh install
3, 安装fastdfs
cd ..
tar -xzvf V5.05.tar.gz
cd fastdfs-5.05
./make.sh -- 里面自带的安装脚本
./make.sh install

-- 安装后 命令在/usr/bin/目录下 配置文件在 /etc/fdfs/目录下
==========================每台服务器fastdfs安装通用步骤==========================
一,部署tracker节点,在231上
1,按上面步骤安装fastdfs
2,生成tracker配置文件
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
3,修改tracker配置文件
vim /etc/fdfs/tracker.conf
修改以下内容
disabled=false -- 表示此配置文件有效
port=22122 -- tracker的端口 默认也是22122
base_path=/home/fastdfs -- tracker存放数据文件(记录storage和tracker情况的文件)和日志的目录(需要预先创建)
store_lookup=2 -- 上传文件时 选择哪个组(卷)的策略 数字意思如下
http.server_port=8080 -- 从4.05版本就移除了此功能 配了也没用

{
store_lookup=2
# the method of selecting group to upload files
# 0: round robin
# 1: specify group
# 2: load balance, select the max free space group to upload file
}
4,-- 创建数据目录(刚刚配置文件指定的目录)
mkdir /home/fastdfs
5,-- 启动tracker
fdfs_trackerd /etc/fdfs/tracker.conf start
6,-- 设置开机自启动
echo 'fdfs_trackerd /etc/fdfs/tracker.conf start' >> /etc/rc.local
7,--查看
netstat -tnlp | grep 22122 -- 查看监听情况
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 28803/fdfs_trackerd
tail -f /home/fastdfs/logs/trackerd.log -- 查看tracker的日志 看有没有报错
============================================================================
二,部署storage节点
--在233,234上部署
1,按上面步骤安装fastdfs
2,生成storage配置文件
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
3,修改storage配置文件
vim /etc/fdfs/storage.conf
修改以下内容
disabled=false -- 表示此配置文件有效
group_name=group1 -- 组名(组就是上面介绍的卷)
port=23000 -- 端口 23000 默认也是23000 同一组内的节点 端口必须一致(其实也没必要改 建议所有组所有节点都一致)
base_path=/home/fastdfs -- storage的日志目录(需要启动前创建)
store_path_count=1 -- 表示有多少个存储目录 需要与存储目录数量匹配
store_path0=/home/fastdfs -- 真正存储数据的目录 生产环境中应该和日志目录分开 而且是一个拥有大空间的分区 可以设置多个存储路径(如 store_path1)
tracker_server=192.168.5.231:22122 -- 指定tracker_server的IP
4,创建存储目录
mkdir /home/fastdfs
5,运行storage
fdfs_storaged /etc/fdfs/storage.conf start 第一次启动创建256*256个目录
6,查看情况
netstat -tnlp -- 查看端口监听情况
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 30907/fdfs_storaged
tail -f /home/fastdfs/logs/storaged.log -- 查看日志 查看启动情况
***记得在233 和 234上都部署为storage 并且在同一个组(group 或叫卷) 然后再继续下面的步骤
-- 使用monitor命令查看storage情况 -- 在任意一台storage上操作
测试:上传文件到fastdfs
上传文件使用命令上传(当然 程序要使用api) 下载则要另外配置nginx
1,生成client配置文件
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
2,修改配置文件
vim /etc/fdfs/client.conf
修改以下内容
base_path=/tmp -- 这里先临时放tmp目录下
tracker_server=192.168.5.231:22122 -- 指定tracker_server的IP地址
3,测试上传
fdfs_upload_file /etc/fdfs/client.conf /a.png -- 上传a.png这个文件到fastdfs
group1/M00/00/00/wKgF6VgO69WAW6kgAAULPRl0gCs682.png -- 上传成功后 会返回这个文件 的访问路径 这个路径要记录下来 以后的实验需要用到

===========================下载============================
FastDFS+Nginx实现http协议下载
-- nginx结合 fastdfs-nginx-module插件去实现http协议下载 在所有storage节点和tracker节点都需要安装nginx
原理介绍:
1. storage节点中的nginx 主要是结合fastdfs-nginx-module模块提供http的访问服务 同时解决group中storage服务器的同步延迟问题。
2. tracker节点中的nginx 主要是提供http访问的反向代理、负载均衡以及缓存服务
服务器角色:
192.168.5.231 tracker + nginx
192.168.5.233 group1/stroage1 + nginx + fastdfs-nginx-module
192.168.5.234 group1/storage2 + nginx + fastdfs-nginx-module

nginx及模块下载
1,下载nginx
2,下载fastdfs-nginx-module v1.15
storage上安装nginx
-- 在233 和 234上操作 -- 这里先在5.233上操作 然后把相关内容复制去5.234
-- storage节点中的nginx 主要是结合fastdfs-nginx-module模块提供http的访问服务 同时解决group中storage服务器的同步延迟问题。
1,安装nginx依赖
yum install -y zlib-devel pcre-devel openssl-devel
(我刚才装的时候openssl-devel报错了,我手动下载了该依赖)
(解压:tar -xzvf ./openssl-1.0.1t.tar.gz
配置:cd openssl-1.0.1t/
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl
编译安装:make && make install)
2,解决fastdfs-nginx-module模块的路径问题
tar -xzvf fastdfs-nginx-module_v1.16.tar.gz
cd fastdfs-nginx-module/src
vim config -- 修改模块的配置文件
修改以下内容
要修改的行: CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
修改成这样: CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
3,编译安装nginx
tar -xzvf nginx-1.8.1.tar.gz
cd nginx-1.8.1
./configure --prefix=/usr/local/nginx --with-pcre --add-module=../fastdfs-nginx-module/src -
- 这里暂时只with这个实验必要的模块 生产环境中可以按需添加模块
make && make install
4,复制fastdfs-nginx-module模块的配置文件到fastdfs的配置目录
cp /fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
5,修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
将server段的listen端口改为8080
listen 8080;
location ~ /group1/M00 { -- 匹陪url 其中group1是该storage节点所属组的组名 对应storage配置文 件中的 group_name
root /home/fastdfs/data; -- 根目录指向storage的存储目录 对应storage配置文件中的store_path0中的路径
ngx_fastdfs_module; -- 调用ngx_fasdfs_module模块
}
6,修改ngx_fastdfs_module模块的配置文件
vim /etc/fdfs/mod_fastdfs.conf
修改以下内容
base_path=/home/fastdfs -- 保存日志的目录(跟storage.conf配置一样即可) 但实际上日志默认会输出到nginx的error.log 除非修改了log_filename参数
tracker_server=192.168.5.231:22122 -- tracker_server的IP地址 有多个tracker_server就需要写多个tracker_server
storage_server_port=23000 -- storage服务器的端口号
group_name=group1 -- 当前storage节点所属的group名
url_have_group_name = true -- 文件url中是否有group名(这个看刚刚上传文件后返回的url而定)
store_path_count=1 -- 存储路径个数(跟storage.conf配置一样即可)
store_path0=/home/fastdfs -- 存储路径(跟storage.conf配置一样即可)
group_count = 1 -- 整个fastdfs有多少个组 这里暂时是1个
在最后添加以下内容
[group1] -- 第1个组的详细信息
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/home/fastdfs
7,建立M00至存储目录的软连接
ln -s /home/fastdfs/data/ /home/fastdfs/data/M00
8,复制fastdfs源码目录里与http功能相关的文件到fastdfs配置文件目录(不然nginx启动会报错)
9,启动nginx
/usr/local/nginx/sbin/nginx
10,访问上传的图片
192.168.5.233:8080/group1/M00/00/00/wKgF6VgO69WAW6kgAAULPRl0gCs682.png

==============================tracker安装nginx=================================
在231上操作
tracker上的nginx主要是为了反向代理给storage上的nginx和负载均衡和实现缓存
1,如上,安装必要依赖,编译安装nginx
2,修改配置文件
在http区域添加以下内容
upstream fdfs_group1 {
server 192.168.5.233:8080;
server 192.168.5.234:8080;
}
在server区域修改以下内容
listen 8080;
在server区域添加以下内容
location /group1/M00{ -- 匹配group1/M00的url 如果有group2 3 就要配置多个
proxy_next_upstream http_502 http_504 error timeout invalid_header; -- 后端这些错误的就切换到upstream里的下一个后端服务器 所以我感觉他解决同步延迟问题是通过这里来解决
proxy_pass http://fdfs_group1; -- 反向代理给名为fdfs_group1的upstream
#expires 30d;
}

运行nginx
/usr/local/nginx/sbin/nginx
访问上传的图片
192.168.5.231:8080/group1/M00/00/00/wKgF6VgO69WAW6kgAAULPRl0gCs682.png
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

javafanwk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值