Fastdfs文件集群管理系统的搭建

提前准备的包: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值