拉勾课程速推指南-阶段四 模块四 轻量级分布式文件系统FastDFS、阿里云OSS云存储平台(1)
文章内容输出来源:拉勾教育Java高薪训练营
学习心得
【拉勾课程速推指南】学习心得
课程介绍
第四阶段 大型分布式存储系统架构进阶
模块四 轻量级分布式文件系统FastDFS、阿里云OSS云存储平台
本模块对分布式文件系统FastDFS集群架构与原理剖析,使用FastDFS+Nginx搭建高吞吐文件服务器,并对阿里云OSS云存储平台系统讲解。
作业内容
作业一:
搭建FastDFS图片服务器,通过http请求可以访问服务器中图片的动态压缩图。具体要求如下:
在Linux系统中安装FastDFS服务器
可以使用FastDFS自带的工具将文件上传到FastDFS,并可以通过http 访问到对应的图片
可以使用GraphicsMagick工具生成缩略图,通过http访问某个图片时,显示其对应的动态压缩图
作业要求:
提供Linux下的安装步骤文档
课程目录及观看建议
2倍速模式:课程时间2小时,作业时间5小时
***
必看 **
建议看 *
可不看
- 任务一:轻量级分布式文件系统FastDFS
- FastDFS课程介绍(05:55)
- FastDFS基础回顾(16:06)
*
- FastDFS环境搭建和测试(26:21)
***
- FastDFS和Nginx结合(21:54)
***
- Java访问FastDFS(32:53)
- FastDFS架构详解(12:19)
- FastDFS设计理念(09:35)
- 文件上传和下载功能原理(19:22)
- 文件同步、删除等功能原理(14:15)
- FastDFS集群搭建和测试(33:52)
- FastDFS配置和优化(25:55)
- SpringBoot访问FastDFS集群(40:08)
- FastDFS互联网应用实战方案(12:36)
***
作业说明
软件版本
FastDFS 5.11
Nginx 1.15.6
fastdfs-nginx-module 1.20
ngx_devel_kit 0.3.0
lua-nginx-module 0.10.9rc7
LuaJIT 2.0.4
GraphicsMagick 1.3.35
注意事项
-
FastDFS和GraphicsMagick安装流程见参考资料1、2
-
相关软件版本问题,尤其是
lua-nginx-module 0.10.9rc7
,否则会出现各种问题。详情见参考资料3。 -
动态压缩需要配置nginx路由。详情见参考资料4。
作业实现步骤
FastDFS的安装
- 安装编译环境
yum install git gcc gcc-c++ make automake vim wget libevent -y
- 安装libfastcommon基础库
mkdir /root/fastdfs
cd /root/fastdfs
git clone https://github.com/happyfish100/libfastcommon.git --depth 1
cd libfastcommon/
./make.sh && ./make.sh install
- 安装FastDFS
cd /root/fastdfs
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
tar -zxvf V5.11.tar.gz
cd fastdfs-5.11
./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
cp /root/fastdfs/fastdfs-5.11/conf/http.conf /etc/fdfs
cp /root/fastdfs/fastdfs-5.11/conf/mime.types /etc/fdfs
设置配置文件
vim /etc/fdfs/tracker.conf
port=22122
base_path=/home/fastdfs
vim /etc/fdfs/storage.conf
port=23000
# 保存数据和日志文件的根目录
base_path=/home/fastdfs
# 第一个存储目录
store_path0=/home/fastdfs
tracker_server=192.168.0.101:22122
# 需要和nginx中保持一致
http.server_port=8888
- 启动
mkdir /home/fastdfs -p
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
# 查看运行端口
yum install net-tools
netstat -ntlp
- 测试上传
vim /etc/fdfs/client.conf
base_path=/home/fastdfs
tarcker_server=192.168.0.101:22122
上传测试图片
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/fastdfs/pic.png
如果返回 group1/M00/00/00/xxx.png
,则表示成功。
- 安装fastdfs-nginx-module
cd /root/fastdfs
wget https://github.com/happyfinsh100/fastdfs-nginx-module/archive/V1.20.tar.gz
tar -xvf V1.20.tar.gz
cd fastdfs-nginx-module-1.20/src
vim config
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
cp mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
tracker_server=192.168.0.101:22122
url_have_group_name=true
store_path0=/home/fastdfs
mkdir -p /var/temp/nginx/client
- 安装nginx
cd /root/fastdfs
wget http://nginx.org/download/nginx-1.15.6.tar.gz
tar -zxvf nginx-1.15.6.tar.gz
cd nginx-1.15.6/
yum -y install pcre-devel openssl openssl-devel
./configure --add-module=/root/fastdfs/fastdfs-nginx-module-1.20/src
make && make install
/usr/local/nginx/sbin/nginx -V
vim /usr/local/nginx/conf/nginx.conf
server {
listen 8888;
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
}
启动
/usr/local/nginx/sbin/nginx
- 测试下载
先关闭防火墙
systemctl stop firewalld.service
然后浏览器输入 http://192.168.0.101:8888/group1/M00/00/00/xxx.png
GraphicsMagick的安装
需要使用lua脚本调用GraphicsMagick的接口动态生成压缩图片
- 安装lua
cd /root/fastdfs
wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar -zxvf LuaJIT-2.0.4.tar.gz
cd LuaJIT-2.0.4
make && make install
- nginx的lua模块
cd /root/fastdfs
wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
tar -zxvf v0.3.0.tar.gz
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz
tar -zxvf v0.10.9rc7.tar.gz
- 设置环境变量
vim /etc/profile
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
source /etc/profile
- 设置nginx编译参数,并安装
cd /root/fastdfs/nginx-1.15.6
./configure --prefix=/usr/local/nginx
--add-module=/root/fastdfs/fastdfs-nginx-module-1.20/src
--add-module=/root/fastdfs/lua-nginx-module-0.10.9rc7
--add-module=/root/fastdfs/ngx_devel_kit-0.3.0
make && make install
- 测试
vim /usr/local/nginx/conf/nginx.conf
location /lua {
default_type “text/plain”;
content_by_lua “ngx.say("hello, lua")”;
}
- 生成相应模块的软连接,并测试配置是否正确,然后重启nignx
ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx
浏览器访问 http://192.168.0.101:8888/lua
,或者命令行使用 curl http://192.168.0.101:8888/lua
,显示 hello,lua
。
- 下载GraphicsMagick的lib,支持JPEG、PNG
cd /root/fastdfs
wget http://www.imagemagick.org/download/delegates/jpegsrc.v9b.tar.gz
tar -zxvf jpegsrc.v9b.tar.gz
cd jpeg-9b
./configure
make && make install
cd /root/fastdfs
wget http://www.imagemagick.org/download/delegates/libpng-1.6.31.tar.gz
tar -zxvf libpng-1.6.31.tar.gz
cd libpng-1.6.31
./configure
make && make install
- 安装GraphicsMagick
下载安装包,然后上传到虚拟机
http://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/
cd /root/fastdfs
tar -zxvf GraphicsMagick-1.3.35.tar.gz
cd GraphicsMagick-1.3.35
./configure --prefix=/usr/local/GraphicsMagick --enable-shared
make && make install
/usr/local/GraphicsMagick/bin/gm version
- 添加so路径
vim /etc/ld.so.conf
/usr/local/lib
/sbin/ldconfig -v
- 确认安装是否成功,是否支持JPEG、PNG
/usr/local/GraphicsMagick/bin/gm version
- 设置全局命令
vim /etc/profile
export PATH=$PATH:/usr/local/GraphicsMagick/bin
source /etc/profile
- 测试gm命令
gm convert -resize 100x100^ -gravity Center -crop 100x100+0+0 /root/fastdfs/pic.png /root/fastdfs/pic_100x100.png
查看生成后的pic_100x100.png
- 配置动态压缩
创建lua脚本
vim /usr/local/nginx/lua/ImageResizer.lua
local command = "/usr/local/GraphicsMagick/bin/gm convert -auto-orient -strip " .. ngx.var.request_filepath .. " -resize " .. ngx.var.width .. "x" .. ngx.var.height .. " +profile "*" " .. ngx.var.request_filepath .. "_" .. ngx.var.width .. "x" .. ngx.var.height .. "." .. ngx.var.ext;
os.execute(command);
ngx.exec(ngx.var.request_uri);
配置nginx
location /group1/M00 {
root /home/fastdfs/data;
if ($uri ~* ^/group1/M00(.+.(jpg|jpeg|gif|png))_(d+)x(d+).(jpg|jpeg|gif|png)) {
add_header X-Powered-By "Lua GraphicsMagick";
add_header file-path $request_filename;
#lua_code_cache on;
set $request_filepath /home/fastdfs/data$1;
set $width $3;
set $height $4;
set $ext $5;
}
if (!-f $request_filename) {
content_by_lua_file lua/ImageResizer.lua;
}
}
重启nignx
/usr/local/nginx/sbin/nginx -s reload
- 使用浏览器测试动态压缩
访问原图
动态压缩成100×100
参考资料
如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放
nginx-lua-fastdfs-GraphicsMagick安装
nginx 中添加 lua 模块,支持lua脚本以及遇到的坑
Nginx+Lua+GraphicsMagick实现图片自动裁剪/缩放、以及定时清理生成的缩略图