美文网首页
FastDFS 集群搭建

FastDFS 集群搭建

作者: 天马行空_9f6e | 来源:发表于2021-04-27 17:13 被阅读0次

    两台Tracker服务器 主机1(192.168.1.101)、主机2(192.168.1.102)

    四台storage服务器 主机3(192.168.1.103)、主机4(192.168.1.104)、主机5(192.168.1.105)、主机6(192.168.1.106)

    需要实现通过请求两台Tracker服务器上来访问四台storage服务器上的文件


    主机1、主机2安装Tracker

    安装方法:FastDFS简单配置应用

    修改tracker.conf文件中group的负载策略

    vi /etc/fdfs/tracker.conf

    配置文件中的store_lookup,这个属性的可选值有0,1,2。分别代表:

    # 0: 轮询

    # 1: 指定卷,通过卷名指定访问某一个卷

    # 2: 访问空闲磁盘空间较大的。是默认的负载策略。

    这里设置为 0

    启动Tracker服务

    /etc/init.d/fdfs_trackerd start


    主机3、主机4、主机5、主机6安装Storage

    安装方法:FastDFS简单配置应用

    修改配置文件 

    vi /etc/fdfs/storage.conf

    修改tracker_server 的ip地址,多个 tracker 直接添加多条配置

    tracker_server=192.168.1.101:22122  ###主机1IP

    tracker_server=192.168.1.102:22122  ###主机2IP

    启动Storage服务

    /etc/init.d/fdfs_storaged start

    使用FastDFS中的Monitor查看:在所有的Storage启动成功后执行下述命令,可查看Storage对应的group存储

    /usr/bin/fdfs_monitor /etc/fdfs/storage.conf

    主机3、主机4、主机5、主机6安装nginx

    安装方法:Centos7安装Tengine

    fastdfs-nginx-module配置

    FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储,同一组group之间会进行数据同步复制,不过同步的时候可能会有延迟,比如我们这里将主机3与主机4设置为group1,主机5跟主机6设置为group2,当向主机3的storage上传文件后,由于数据还没同步到主机4的storage,而此时正好请求从主机4的storage来读取文件的话就会有问题……这时候通过fastdfs-nginx-module,自动检测当发现主机4的文件尚未同步完成的情况,会直接从主机3上面去取文件,从而避免由于同步延迟问题导致文件无法访问错误……


    修改配置文件mod_fastdfs.conf

    vi /etc/fdfs/mod_fastdfs.conf

    ##########start 下面为要修改的内容##########

    connect_timeout=10

    group_name=group1         ###这了主机3、主机4 对应 group 1;主机5、主机6 对应 group 2

    tracker_server=192.168.1.101:22122  ###主机1的IP地址

    tracker_server=192.168.1.102:22122  ###主机2的IP地址

    group_count =  

    [group1]

    group_name=group1

    storage_server_port=23000

    store_path_count=1

    store_path0=/var/data/fastdfs-storage/store

    #store_path1=/home/yuqing/fastdfs1

    [group2]

    group_name=group2

    storage_server_port=23000

    store_path_count=1

    store_path0=/var/data/fastdfs-storage/store

    ##########end 下面为要修改的内容##########

    修改nginx配置文件

    vi /usr/local/tengine/conf/nginx.conf

    ########################## start nginx.conf文件中添加下面内容 ##########################

      location ~ /group([0-9])/M00 {

    # add_header Content-Disposition "attachment;filename=$arg_attname";

        ngx_fastdfs_module;

        }

    ########################## end nginx.conf文件中添加下面内容 ##########################

    以上配置完之后,可以通过fdfs_upload_file命令来上传文件

    fdfs_upload_file /etc/fdfs/client.conf  /root/1.jpg      ###这里上传的图片1.jpg在/root目录下


    然后通过 nginx请求group来直接访问试试

    http://192.168.1.103/group1/M00/00/00/xxssysysjsjshangng.jpg  

    (这里请求访问的时候,如果group1上没有该文件会自动到group2上去找文件)

    在主机1、主机2上安装nginx

    安装方法:Centos7安装Tengine

    修改nginx配置文件加入缓存设置

    vi /usr/local/tengine/conf/nginx.conf

    ########################## start nginx.conf文件中添加下面内容 ##########################

    http {

        include      mime.types;

        default_type  application/octet-stream;

        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

        #                  '$status $body_bytes_sent "$http_referer" '

        #                  '"$http_user_agent" "$http_x_forwarded_for"';

        #access_log  logs/access.log  main;

        #access_log  "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G"  main;

        sendfile        on;

        #tcp_nopush    on;

        #keepalive_timeout  0;

        keepalive_timeout  65;

    #设置缓存

        server_names_hash_bucket_size 128;

        client_header_buffer_size 32k;

        large_client_header_buffers 4 32k;

        client_max_body_size 300m;

        proxy_redirect off;

        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_connect_timeout 90;

        proxy_send_timeout 90;

        proxy_read_timeout 90;

        proxy_buffer_size 16k;

        proxy_buffers 4 64k;

        proxy_busy_buffers_size 128k;

        proxy_temp_file_write_size 128k;

        #设置缓存存储路径、存储方式、分配内存大小、磁盘最大空间、缓存期限 

        #levels=1:2 表示缓存文件有两级目录 1表示第一级目录名为1位数,2表示第二级目录名为2位数

        proxy_cache_path /var/data/cache/nginx/proxy_cache levels=1:2     

        #keys_zone 缓存区域名字,分配200m空间,最大缓存1g,有效期30天

        keys_zone=http-cache:200m max_size=1g inactive=30d;

        proxy_temp_path /var/data/cache/nginx/proxy_cache/tmp;

        #设置 group1 的服务器

        upstream fdfs_group1 {

          server 192.168.1.3:80 weight=1 max_fails=2 fail_timeout=30s; 

          server 192.168.1.4:80 weight=1 max_fails=2 fail_timeout=30s;

        }

        #设置 group2 的服务器

        upstream fdfs_group2 {

          server 192.168.1.5:80 weight=1 max_fails=2 fail_timeout=30s;

          server 192.168.1.6:80 weight=1 max_fails=2 fail_timeout=30s;

        }

        #gzip  on;

            listen      80;

            #charset koi8-r;

            #access_log  logs/host.access.log  main;

            #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;

        server_name  localhost;

        location /group1/M00 {

                proxy_next_upstream http_502 http_504 error timeout invalid_header;

                proxy_cache http-cache;

                proxy_cache_valid  200 304 12h;

                proxy_cache_key $uri$is_args$args;

                proxy_pass http://fdfs_group1;

                expires 30d;

        }

        location /group2/M00 {

                proxy_next_upstream http_502 http_504 error timeout invalid_header;

                proxy_cache http-cache;

                proxy_cache_valid  200 304 12h;

                proxy_cache_key $uri$is_args$args;

                proxy_pass http://fdfs_group2;

                expires 30d;

        }

    }

    ########################## end nginx.conf文件中添加下面内容 ##########################

    这配置通过主机1则是专门访问主机3、主机4上storage在group1上的资源,通过主机2则是专门访问主机5、主机6上的storage在group2上的资源,这就在主机1与主机2上的nginx里面避免了通过group1去找group2上的资源,或者通过group2去找group1上的资源这种浪费性能的访问方式,同时还给主机1与主机2的nginx配上了缓存


    重启nginx

    /usr/local/tengine/sbin/nginx -s stop

    /usr/local/tengine/sbin/nginx

    这时候尝试通过请求主机1与主机2的IP访问文件

    http://192.168.1.101/group1/M00/00/00/xxxyyyzzz.jpg

    http://192.168.1.102/group2/M00/00/00/zzzyyyxxx.jpg


    手动清理nginx缓存

    下载安装ngx_cache_purge模块,用于清除指定url的缓存

    下载地址:ngx_cache_purge-2.3下载

    vi /usr/local/tengine/conf/nginx.conf

    ########## start 在http { }中添加如下配置  ###########

    #设置清除缓存的访问权限

            location ~/purge(/.*) {

                allow 127.0.0.1;

                allow 192.168.1.0/24;     ###这里的内容对应允许请求的电脑 IP 网段

                deny all;

                proxy_cache_purge http-cache $1$is_args$args;

            }

    ########## end 在http { }中添加如下配置  ###########

    原先通过这种方式请求下载文件后生成了缓存

    http://192.168.1.3/group1/M00/00/00/wKgBBGB9mvOAUm1QAAMBrrZZcK4967.jpg

    现在通过如下请求可清除该缓存

    http://192.168.1.3/purge/group1/M00/00/00/wKgBBGB9mvOAUm1QAAMBrrZZcK4967.jpg

    相关文章

      网友评论

          本文标题:FastDFS 集群搭建

          本文链接:https://www.haomeiwen.com/subject/ziyalltx.html