提前准备的包:fastdfs、libfastcommon、libevent、nginx、fastdfs-nginx-module、ngx_cache_purge、keepalived(不需要VIP或只有一个tracker则不需要keepalived)
链接:https://pan.baidu.com/s/1rJujp6kLkMmbPXFm3x1lOA
提取码:vsu3
注:libfastcommon、libevent根据fastdfs版本不通所需不同,为了不报错我都安装上了
nginx、fastdfs-nginx-module这两个版本一定要对应好,不然编译会报错我用的5.08版本和1.16
服务器准备:两台tracker调度器
两台storage存储服务器(分别为group1、group2,生产中最好一个group对应多个storage)
1.fastdfs安装(所有服务器)
解决依赖:yum install -y make cmake gcc gcc-c++ gettext gettext-devel libXft libXft-devel libXpm libXpm-devel autoconf libXtst-devel zlib-devel libpng-devel glib-devel automake libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
解压并安装依赖包libfastcommon(直接cd进去./make.sh && ./make.sh install)
因为FastDFS主程序设置的lib目录是/usr/local/lib,所以需要创建软链接
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
解压并源码编译安装依赖libevent
解压并安装fastdfs(cd进去./make.sh && ./make.sh install)
查看服务脚本/etc/init.d/fdfs_storaged(tracker)中的命令路径是否正确(正确路径在/usr/bin/下,一般新版本fastdfs路径无需修改),不正确就修改
编辑跟踪器配置文件(两台tracker上操作)
vim /etc/fdfs/tracker.conf // 修改的内容如下(其它参数保留默认配置)
disabled=false //启用配置文件
port=22122 //tracker 的端口号,一般采用 22122 这个默认端口
base_path=/fastdfs //tracker 的数据文件和日志目录
store_lookup=0 //采取轮巡方式选择要上传的组进行存储,默认2
创建基础数据目录(参考基础目录 base_path 配置):
mkdir -p /fastdfs
启动Tracker服务:/etc/init.d/fdfs_trackerd start
设置FastDFS跟踪器开机启动:chkconfig fdfs_trackerd on
/etc/rc.d/rc.local----->/etc/init.d/fdfs_trackerd start
编辑存储器配置文件(两台storage上操作)
vim /etc/fdfs/storage.conf
disabled=false //启用配置文件
group_name=group1 //组名(第一组为 group1,第二组为 group2)
port=23000 //storage 的端口号
base_path=/fastdfs //设置 storage 的日志目录
store_path0=/fastdfs //存储路径
store_path_count=1 //存储路径个数,需要和 store_path 个数匹配
tracker_server=192.168.10.200:22122 //tracker 服务器的 IP 地址和端口
tracker_server=192.168.1.201:22122 //多个 tracker 直接添加多条配置
http.server_port=8888 //设置 http 端口号
创建基础数据目录(参考基础目录 base_path 配置)
mkdir -p /fastdfs
启动并设置开机自启(同tracker)
Storage查看集群信息: /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
测试文件上传下载:
修改client的配置:vi /etc/fdfs/client.cnf
base_path=/fastdfs
tracker_server=192.168.10.200:22122
tracker_server=192.168.10.201:22122
将测试图片上传到FastDFS存储里(client端执行)
fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/test.png
group1/M00/00/00/wKgKylqTsFCAdeEuAAKHUIZ3K9s287.png
验证:在group1对应的storage服务器的文件存储文件夹内查看到该文件则实验成功
生产环境中一个组一般对应多个storage服务器,相同组的storage内文件完全相同(通过彼此复制)
2.结合nginx、fastdfs-nginx-module使用(两台storage中操作)
目的:使用nginx做web页面便捷访问图片,fastdfs-nginx-module起到重定向源文件的作用(生产中一个组对应多个storage,当文件传到其中一台storage中后,多个同组storage复制该文件,有时候会产生复制延迟就导致了客户端访问另一台同组storage获取该文件时获取不到的情况,而这个模块就可以将请求重定向到源存储服务器来获取该文件,避免客户端由于复制延迟导致的文件无法访问错误)
解压nginx、fastdfs-nginx-module
编辑模块配置:vim /usr/local/src/fastdfs-nginx-module/src/config
将
CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
修改为:
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
源码编译nginx:
./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src
Make&&make install
复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录,并修改
cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
connect_timeout=10
base_path=/tmp
tracker_server=192.168.10.200:22122
tracker_server=192.168.10.201:22122
storage_server_port=23000
group_name=group1 #不同组对应的storage中配置的group名不一样
url_have_group_name = true
store_path0=/fastdfs
group_count = 2
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/fastdfs
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/fastdfs
复制 FastDFS 的http.conf mime.types配置文件到/etc/fdfs 目录
在/fastdfs 文件存储目录下创建软连接,将其链接到实际存放数据的目录
ln -s /fastdfs/data/ /fastdfs/storage/data/M00
编辑nginx主配置文件nginx.conf:在里面添加:
server {
listen 8888;
server_name localhost;
location ~/group1/M00 { //组2机器内此处修改为group2
#alias /fastdfs/data;
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
启动nginx
测试浏览器访问已上传的文件
本地浏览:http://stouage1IP:8888/group1/M00/00/00/wKgKylqTsFCAdeEuAAKHUIZ3K9s287.png
3.fastdfs结合ngx_cache_purge、nginx使用(在两台tracker上配置)
在tracker上安装的nginx主要为了提供 http 访问的反向代理、负载均衡以及缓存服务,实现客户端访问tracker的IP轮询获取多个storage服务器的数据
解压:ngx_cache_purge、nginx
源码编译安装nginx:
./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/ngx_cache_purge-2.3 && make && make install
配置 Nginx,设置负载均衡以及缓存
vi nginx.conf
worker_processes 8;
events {
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
charset utf-8;
######
## set access log format
######
log_format main '$http_x_forwarded_for $remote_addr $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_cookie" $host $request_time';
#######
## http setting
#######
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
proxy_cache_path /fastdfs/cache/nginx/proxy_cache levels=1:2 keys_zone=mycache:20m max_size=2048m inactive=60m;
proxy_temp_path /fastdfs/cache/nginx/proxy_cache/tmp;
fastcgi_connect_timeout 3000;
fastcgi_send_timeout 3000;
fastcgi_read_timeout 3000;
fastcgi_buffer_size 256k;
fastcgi_buffers 8 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
client_header_timeout 600s;
client_body_timeout 600s;
# client_max_body_size 50m;
client_max_body_size 100m;
client_body_buffer_size 256k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
gzip_vary on;
upstream fdfs_group1 {
server 192.168.10.202:8888 weight=1 max_fails=2 fail_timeout=30s;
}
upstream fdfs_group2 {
server 192.168.10.203:8888 weight=1 max_fails=2 fail_timeout=30s;
}
server{
listen 8000;
server_name localhost;
access_log /usr/local/nginx/logs/lb_access.log main;
error_log /usr/local/nginx/logs/lb_error.log;
location /group1/M00 {
proxy_pass http://fdfs_group1;
}
location /group2/M00 {
proxy_pass http://fdfs_group2;
}
#设置清除缓存的访问权限
location ~/purge(/.*) {
allow 127.0.0.1;
allow 114.242.193.201;
allow 192.168.10.0/24;
deny all;
proxy_cache_purge mycache $host$1$is_args$args ;
}
}
}
按以上 nginx 配置文件的要求,创建对应的缓存目录
ulimit 65535
mkdir -p /fastdfs/cache/nginx/proxy_cache
mkdir -p /fastdfs/cache/nginx/proxy_cache/tmp
启动nginx
测试浏览器访问已上传的文件
本地浏览:http://trackerIP:8000/group1/M00/00/00/wKgKylqTsFCAdeEuAAKHUIZ3K9s287.png
以上是简单配置,多次测试可以发现,每一个Tracker中的 Nginx都单独对后端的Storage存储服务器组做了负载均衡,
但整套FastDFS 集群如果想对外提供统一的文件访问地址,还需要对两个Tracker中的Nginx进行HA集群。
即对Fastdfs_tracker_t1(192.168.10.200)和Fastdfs_tracker_t2(192.168.10.201)做keepalived+nginx的高可用。
192.168.10.200 Master
192.168.10.201 Slave
192.168.10.210 VIP