两台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 = 2
[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