FastDFS 集群搭建

两台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 集群搭建)