fastdfs 一个group内实现按照不同的项目,指定路径存储.

为什么80%的码农都做不了架构师?>>>   hot3.png

环境介绍:

1: 公司目前有5个项目 A B C D E  日后可能会有所增加.

2: 使用fastdfs存储这5各项目的文件,要求各各项目的文件分开存储,也就是每个项目的文件存储到一个固定的位置.

3:  三台机器ip地址分配如下

    tracker角色 IP:192.168.1.219  

    storageA角色 IP: 192.168.1.215

    storageB角色  IP:192.168.1.216

4: 这里主要记录下实现思路,具体的配置方法都很简单.

---------tracker这台机器  主要有两个服务 fdfs_tracker   和 nginx---------------

tracker.conf的配置文件很简单这里不贴出来了 

nginx的配置文件如下:   nginx负责把访问请求转发给后台的两台storage.

[root@trackerB ~]# cat /usr/local/nginx/conf/nginx.conf | grep -v "#" | grep -v "^$"

user  www;

worker_processes  1;

error_log  logs/error.log;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    server_names_hash_bucket_size 128;

    client_header_buffer_size 32k;

    large_client_header_buffers 4 32k;

    client_max_body_size 300m;

    sendfile        on;

    tcp_nopush     on;

    keepalive_timeout  120;

    gzip  on;

    gzip_min_length 1k;

    gzip_buffers 4 16k;

    gzip_http_version 1.1;

    gzip_comp_level 2;

    gzip_types text/plain application/x-javascript text/css application/xml;

    gzip_vary on;

    gzip_disable "MSIE[1-6].";

    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;

    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '

                                   '$status $body_bytes_sent "$http_referer" '

                                   '"$http_user_agent" "$upstream_addr" "$upstream_response_time" "$host"';

    proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=http-cache:500m max_size=10g inactive=30d;

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

    upstream group1 {

        server 192.168.1.215:80;

        server 192.168.1.216:80;

    }

    server {

        listen       80;

        server_name  image.ty.com;

    location ~* /group1/(M00|M01|M02|M03|M04|M05) {                #这里我使用了6个存储路径,每个项目一个

        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://group1;

        expires 3d;

    }

    access_log  logs/image.access.log  access;

        location / {

            root   html;

            index  index.html index.htm;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

    include /usr/local/nginx/conf/vhost/*.conf;

}

 

---------------storage角色的两台机器-------------------

这两天机器的配置完全一样. 都运行了fdfs_storage 和 nginx , 其中nginx添加了fastdfs模块

fdfs_storage的配置文件storage.conf内容如下:

[root@localhost ~]# cat /etc/fdfs/storage.conf | grep -v "^#" | grep -v "^$"

disabled=false

group_name=group1

bind_addr=

client_bind=true

port=23000

connect_timeout=30

network_timeout=60

heart_beat_interval=30

stat_report_interval=60

base_path=/data/

max_connections=256

buff_size = 256KB

accept_threads=1

work_threads=4

disk_rw_separated = true

disk_reader_threads = 1

disk_writer_threads = 1

sync_wait_msec=50

sync_interval=0

sync_start_time=00:00

sync_end_time=23:59

write_mark_file_freq=500

store_path_count=6                一共 store_path0-5 六个存储路径.

store_path0=/data/data1

store_path1=/data/data2

store_path2=/data/data3

store_path3=/data/data4

store_path4=/data/data5

store_path5=/data/data6

subdir_count_per_path=256

tracker_server=192.168.1.219:22122     

log_level=info

run_by_group=

run_by_user=

allow_hosts=*

file_distribute_path_mode=0

file_distribute_rotate_count=100

fsync_after_written_bytes=0

sync_log_buff_interval=10

sync_binlog_buff_interval=10

sync_stat_file_interval=300

thread_stack_size=512KB

upload_priority=10

if_alias_prefix=

check_file_duplicate=0

file_signature_method=hash

key_namespace=FastDFS

keep_alive=0

use_access_log = false

rotate_access_log = false

access_log_rotate_time=00:00

rotate_error_log = false

error_log_rotate_time=00:00

rotate_access_log_size = 0

rotate_error_log_size = 0

log_file_keep_days = 0

file_sync_skip_invalid_record=false

use_connection_pool = false

connection_pool_max_idle_time = 3600

http.domain_name=

http.server_port=8888

nginx配置文件如下

[root@localhost ~]# cat /usr/local/nginx/conf/nginx.conf | grep -v "^#" | grep -v "^$"

worker_processes  1;

events {

    worker_connections  1024;

}

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;

    sendfile        on;

    keepalive_timeout  65;

    client_max_body_size 2m;

    server {

        listen       80;

        server_name  localhost;

        #charset koi8-r;

        access_log  logs/host.access.log  main;

        location /group1/M00 {                        #根据请求路径配置对应的存储路径.

            root   /data/data1;

            ngx_fastdfs_module;                      #使用nginxmodule处理请求

        }

        location /group1/M01 {

            root   /data/data2;

            ngx_fastdfs_module;

        }

        location /group1/M02 {

            root   /data/data3;

            ngx_fastdfs_module;

        }

        location /group1/M03 {

            root   /data/data4;

            ngx_fastdfs_module;

        }

        location /group1/M04 {

            root   /data/data5;

            ngx_fastdfs_module;

        }

        location /group1/M05 {

            root   /data/data6;

            ngx_fastdfs_module;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

 include /usr/local/nginx/conf/vhosts/*.conf;

}

nginx的fastdfs模块的配置文件如下:

[root@localhost ~]# cat /etc/fdfs/mod_fastdfs.conf | grep -v "^#" | grep -v "^$"

connect_timeout=2

network_timeout=30

base_path=/tmp

load_fdfs_parameters_from_tracker=true

storage_sync_file_max_delay = 86400

use_storage_id = false

storage_ids_filename = storage_ids.conf

tracker_server=192.168.1.219:22122

storage_server_port=23000

group_name=group1

url_have_group_name = true

store_path_count=6

store_path0=/data/data1

store_path1=/data/data2

store_path2=/data/data3

store_path3=/data/data4

store_path4=/data/data5

store_path5=/data/data6

log_level=info

log_filename=/var/log/mod_fastdfs.log

response_mode=proxy

if_alias_prefix=

flv_support = true

flv_extension = flv

group_count = 0

-----------------以上就是用到的所有配置文件----------------------------

想实现按照不通的项目存储到不同的路径,主要通过代码来实现    以java为例

首先: 我们可以通过tracker获取一个可以使用的storage的ip,   -------java代码如下---------

 /**
 * 获得可用的storage IP
 * 
 * @param trackerClient
 * @param trackerServer
 * @return 返回storage IP
 */
private static String getStorageServerIp(TrackerClient trackerClient, TrackerServer trackerServer) {
String storageIp = null;
if (trackerClient != null && trackerServer != null) {
try {
StorageServer storageServer = trackerClient.getStoreStorage(trackerServer, STORAGE_SERVER_GROUP);
storageIp = storageServer.getSocket().getInetAddress().getHostAddress();
} catch (IOException e) {
e.printStackTrace();
}
}
log.info("——获取组中可用的storage IP——" + storageIp);
return storageIp;
}

其次:可以根据获取的ip把需要上传的文件指定到要上传到的路径里面

 /**
 * 得到Storage服务
 * 
 * @param storageIp
 * @return 返回Storage服务
 */
private static StorageServer getStorageServer(String storageIp) {
StorageServer storageServer = null;
if (storageIp != null && !("").equals(storageIp)) {
try {
storageServer = new StorageServer(storageIp, Integer.parseInt(STORAGE_SERVER_PORT), Integer.parseInt(STORAGE_SERVER_M00));
} catch (IOException e) {
e.printStackTrace();
}
}
log.info("——storage server生成");
return storageServer;
}

这样就通过fastdfs支持多路径这个功能实现了不同项目分开存储的需求.

Linux下也有对应的命令:[root@localhost ~]# fdfs_upload_file -h

Usage: fdfs_upload_file <config_file> <local_filename> [storage_ip:port] [store_path_index]

[root@localhost ~]# fdfs_upload_file /etc/fdfs/storage.conf anni.jpg 192.168.1.215:23000 5

group1/M05/00/D4/wKgB11W4SQGASXcFAAFAB2RsPpA542.jpg

113758_X9bR_734134.png

 


 

 

转载于:https://my.oschina.net/denglz/blog/485084

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个WPF开发的打印对话框-PrintDialogX

今天五月一号&#xff0c;大家玩的开心哦。1. 介绍今天介绍一个WPF开发的打印对话框开源项目-PrintDialogX[1]&#xff0c;该开源项目由《WPF开源项目&#xff1a;AIStudio.Wpf.AClient》[2]作者推荐。欢迎使用 PrintDialogX, 这是一个开源项目。免费用于商业用途。用于 C# 的自…

这一新的可视化方法教你优雅地探索相关性

一个古老的诅咒一直萦绕着数据分析&#xff1a;我们用来改进模型的变量越多&#xff0c;那么我们需要的数据就会出现指数级的增长。不过&#xff0c;我们通过关注重要的变量就可以避免欠拟合以及降低收集大量数据的需求。减少输入变量的一种方法是鉴别其对输出变量的影响。变量…

【新手宝典】一篇博文带萌新建站并了解建站体系流程和对萌新友好的便捷方式,这篇博文很有可能是你的启蒙文

前言 本片博文主要面向于还没接触过web开发的萌新&#xff0c;以及想知道整体流程并且完成建站的萌新&#xff1b;如果你是个大佬&#xff0c;就没必要看下去了。 本篇博文没有难啃的骨头&#xff0c;请各位萌新放心食用。 本篇博文采用通俗易懂的方式讲解&#xff0c;轻松并…

MicroStation V8i简体中文版中文字体乱码解决办法

Bentley (奔特力)是一家软件研发公司,其核心业务是满足负责建造和管理全球基础设施,包括公路、桥梁、机场、摩天大楼、工业厂房和电厂以及公用事业网络等领域专业人士的需求。Bentley 在基础设施资产的整个生命周期内针对不同的职业,包括工程师、建筑师、规划师、承包商、…

惠普ProDesk行业专用台式机U盘不识别解决办法

惠普ProDesk行业专用台式机在使用的过程当中&#xff0c;老出现插入U盘不识别的问题&#xff0c;总是需要在重启的过程中插入U盘才能使用U盘&#xff0c;解决办法是&#xff1a;&#xff08;1&#xff09;打开设备管理器&#xff0c;如下图所示&#xff1a;&#xff08;2&#…

【一】Windows API 零门槛编程指南——MessageBox 基本使用及基础讲解

本篇作为Windows API 系列文章的第一篇&#xff0c;将简要的讲解一下什么是Windows API&#xff0c;Windows API能做些什么&#xff0c;并且尽可能讲解一些新出现的专有名词&#xff1b;本系列博文几乎没有难啃的“专业术语”&#xff0c;尽量让读者能够看明白文章所述内容&…

中国人工智能学会通讯——基于视频的行为识别技术 1.1 什么是行为

今天跟大家分享的主题是基于视频的 行为识别领域研究&#xff0c;主要介绍一下早期 的非深度学习传统方法和近期深度学习 方法取得的结果。深度学习方法带来了 非常大的变革&#xff0c;提升了识别系统的性能&#xff0c; 但这并不意味着我们把传统的东西都要 抛弃&#xff0c;…

Windows 11 22H2 22610 重磅发布!删除水印,多彩任务管理器,文件资源管理器深度优化...

面向 Dev 和 Beta 频道的 Windows 预览体验成员&#xff0c;微软现已发布 Windows 11 22H2 预览版 Build 22610。主要变化1.微软现已更新 Windows 11 任务管理器的进程页面&#xff0c;将随着 Windows 主题颜色而变化。2.微软现已更新锁屏上的电池图标&#xff0c;适配 Windows…

一篇文教你使用python Turtle库画出“精美碎花小清新风格树”快来拿代码!

Turtle库手册可以查询查询 python图形绘制库turtle中文开发文档及示例大全&#xff0c;手册中现有示例&#xff0c;不需要自己动手就可以查看演示。 文章修改记录 修改记录 1&#xff1a;2020年5月17日 12:06:51 由于某些童鞋回复说自己会卡死&#xff0c;请把代码&#xff…

阿里云500服务器内部错误,腾讯云服务器网站不能打开 提示内部错误http 500

满意答案2010qqww2015.11.14采纳率&#xff1a;55% 等级&#xff1a;9已帮助&#xff1a;13114人实服务器内部500错误大概可分为两种&#xff0c;一种是服务器本身权限问题&#xff0c;另一种是程序上不规范或者错误造成。所以要解决此问题需要先弄清楚其到底是哪种原因&…

Hadoop(四)C#操作Hbase

HbaseHbase是一种NoSql模式的数据库&#xff0c;采用了列式存储。而采用了列存储天然具备以下优势&#xff1a;可只查涉及的列&#xff0c;且列可作为索引&#xff0c;相对高效针对某一列的聚合及其方便同一列的数据类型一致&#xff0c;方便压缩同时由于列式存储将不同列分开存…

【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”

本系列博文几乎没有难啃的“专业术语”&#xff0c;尽量让读者能够看明白文章所述内容&#xff0c;是本系列博文的核心宗旨之一。&#xff08;由于本人也是由于项目需要&#xff0c;所以才来查阅相关资料&#xff0c;文中出现的错误欢迎指出&#xff0c;共同进步&#xff01;谢…

一行命令 优化上传速度

本文来自 fir.im 首席吉祥物 TraWor. 最近许多用户反映上传速度慢的一塌糊涂&#xff0c;七牛的上传带宽我想肯定是没问题的&#xff0c;那原因不必多想就剩下 DNS 了。 即便本地网络再快&#xff0c;DNS 服务器给了一个很远的服务器地址也没办法很快的上传。 在终端运行这一行…

go 服务器 源码,LollipopGo开源游戏服务器框架--global服务器源码

大家好&#xff0c;我是彬哥&#xff0c;本节给大家讲下LollipopGov1.0.20190102版本游戏服务器globla服务器&#xff0c;抛砖引玉了&#xff0c;主要是针对Go语言游戏服务器Global服务器处理。package mainimport ("LollipopGo/LollipopGo/conf""LollipopGo/Lo…

ArcGIS导入Sketchup模型

ArcGIS可以与Sketchup、3D Studio Max等三维软件完美进行交互。 ArcGIS可以借助 Import 3D Files 工具支持主流的三维模型导入。支持 3D Studio Max (*.3ds)、VRML and GeoVRML 2.0 (*.wrl)、SketchUp 6.0 (*.skp)、OpenFlight 15.8 (*.flt)、Collaborative Design Activity (C…

剑指offer之两个队列实现栈的问题

1 问题 两个队列实现栈的插入和获取头部元素的功能 2 分析 1&#xff09;获取头部元素的功能分析&#xff1a; 我们有2个队列&#xff0c;我们知道队列的特点的先进先出&#xff0c;而栈的特点是先进后出&#xff0c;比如我们有数据1,2,3,4,我们分别依次压入队列1&#xff0…

solr的空间查询(查询地图周围坐标)

原文网址&#xff1a;http://www.cnblogs.com/hanhuibing/articles/5680616.html 基于Solr的空间搜索 如果需要对带经纬度的数据进行检索&#xff0c;比如查找当前所在位置附近1000米的酒店&#xff0c;一种简单的方法就是&#xff1a;获取数据库中的所有酒店数据&#xff0c;…

「零门槛多语言 Python/C/C# 通用思想学习系列」第一篇:经典HelloWorld

环境说明 操作系统&#xff1a;Windows7 SP1 编辑器说明&#xff1a; Python&#xff1a;notepadC&#xff1a;devcC sharp&#xff08;C#&#xff09;&#xff1a;Visual Studio2019 注意&#xff1a; 标点&#xff1a;在编程中要使用英文的标点符号&#xff0c;必须切记数…

服务器2008 系统日志 提示打印机,介绍服务器日志出现打印机错误的解决方法

今天来聊聊一篇关于服务器日志出现打印机错误的解决方法的文章,现在就为大家来简单介绍下服务器日志出现打印机错误的解决方法,希望对各位小伙伴们有所帮助。windows2003日志提示&#xff0c;打印机 ****未知。登录之前&#xff0c;请与管理员联系&#xff0c;安装驱动程序。事…

js 错误/异常处理

为什么80%的码农都做不了架构师&#xff1f;>>> /*** 自定义错误处理*/ onerror handleError; function handleError(desc,page,line){alert("desc:"desc"\n""page:"page"\n""line:"line); } var s null; s.t…