如何部署 wfs 分布式服务

说明: wfs是海量小文件存储系统。wfs1.x不直接支持分布式存储,但为了应对大规模部署和高可用需求,推荐采用如Nginx这样的负载均衡服务,通过合理的资源配置和定位策略,可以在逻辑上模拟出类似分布式的效果。也就是说,虽然每个wfs实例都是单机存储,但可以通过外部服务实现多个wfs实例之间的请求分发,例如通过对文件路径前缀(如 /01/)进行解析,可将请求分发至不同的wfs实例,从而达到业务层面的"分布式部署"。

示例
  • wfs上传一张图片: user1001.jpg ,上传并命名 为: 01/webtim/user1001.jpg
  • 那么它的wfs访问地址是:https://your_wfsserver_domain.com/01/webtim/user1001.jpg
  • 说明:用于前缀 /01/ 来标识一个 wfs 节点
  • 用两个字符至少可以标识几千台wfs服务器,可以满足大部分的业务需求量

以下用nginx作为资源访问的负载均衡服务器

在nginx中,通过lua脚本或nginx原生的配置,可以快速解析uri,并定位到相应的wfs节点。

如: nginx.conf中快速定位 /01/开头的wfs节点

复制代码
 location /01/ { 
    # 匹配以"/01/"开头的请求路径 
        proxy_pass http://192.168.1.11:4660/; # 这里是反向代理的wfs节点服务地址  
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
 }

使用lua脚本反向代理

复制代码
 location / {
      access_by_lua_block {
      local path = ngx.var.uri
      -- 判断路径是否以"/01/"开头
      if string.sub(path, 1, 4) == "/01/" then
       -- 设置要代理到的目标地址
          ngx.var.proxy_pass = "http://yourip:port" .. ngx.var.request_uri
       end
  }   ....

也可以直接定位wfs节点后 进行url重定向。重定向对于服务器的压力更小;这取决于具体的应用场景和需求。

301重定向

复制代码
location /01/ {
    # 匹配以"/01/"开头的请求路径
    rewrite ^/01/(.*)$  https://your_wfsserver01_domain.com/01$1 permanent; # 替换为你的标识 01 的wfs服务地址
}

使用lua脚本301重定向

复制代码
 location / {
  access_by_lua_block {
    local path = ngx.var.uri
    if string.sub(path, 1, 4) == "/01/" then
      ngx.redirect("https://your_wfsserver01_domain.com" .. ngx.var.request_uri, ngx.HTTP_MOVED_PERMANENTLY)
      return
    end
  }

  # 如果未重定向,则继续其他配置...
}

请注意:以上示例是基于文件路径前缀作为路由规则,实际部署时务必结合业务实际需求定制路由设计,并对Nginx配置进行验证与优化,确保系统的稳定运行和性能表现。

以上仅提供一种可行性的负载均衡方案,它可以实现不受限制的动态水平扩展需求,解决大规模文件存取的问题。

与分布式系统对比:

优点:

  • 部署简易
  • 占用系统资源较少
  • 定位和解决问题相对简便
  • 易于实现动态水平扩展

缺点:

  • 数据路由规则需手动实现
  • 数据冗余备份机制也需自行搭建
相关推荐
DolphinScheduler社区2 小时前
真实迁移案例:从 Azkaban 到 DolphinScheduler 的选型与实践
java·大数据·开源·任务调度·azkaban·海豚调度·迁移案例
猫头虎3 小时前
昆仑芯 X HAMi X 百度智能云 | 昆仑芯 P800 XPU/vXPU 双模式算力调度方案落地
人工智能·百度·开源·aigc·文心一言·gpu算力·agi
说私域6 小时前
开源AI智能名片链动2+1模式S2B2C商城系统下消费点评的信任构建机制研究
人工智能·开源
福大大架构师每日一题6 小时前
⽬前 主流的开源模型体系 有哪些?
chatgpt·开源
万岳科技系统开发6 小时前
外卖开源系统源码设计思路:商家、骑手、用户三端一体化方案
开源
那些免费的砖7 小时前
Reka UI - 一款免费开源的 Vue 无头 UI 组件库,样式定制开发项目的绝佳选择
vue.js·ui·开源
DolphinScheduler社区8 小时前
Apache DolphinScheduler 3.3.2 正式发布!性能与稳定性有重要更新
大数据·开源·apache·任务调度·海豚调度·发版
SeaTunnel8 小时前
Apache SeaTunnel 支持 Metalake 开发了!避免任务配置敏感信息暴露
大数据·开源·apache·个人开发·数据集成·seatunnel·看开源之夏
yumgpkpm10 小时前
CMP7(类Cloudera CMP 7 404版华为Kunpeng)用开源软件Label Studio做数据标注
hdfs·flink
CtrlZ学习录11 小时前
笔记:现代操作系统:原理与实现(8)
linux·笔记·架构·开源