zoukankan      html  css  js  c++  java
  • seaweedFS

    那首先我们来分析一下seaweedfs是什么?seaweedfs是一个非常优秀的由 golang 开发的分布式存储开源项目。它是用来存储文件的系统,并且与使用的语言无关,使得文件储存在云端变得非常方便。seaweedfs也是一个非常优秀的开源项目,Seaweedfs的设计原理是基于 Facebook 的一篇图片存储系统的论文Facebook-Haystack。一听就感觉作者很NB,有兴趣的可以去看一看Seaweedfs的源码,本文就讲解seaweedfs的搭建和简单应用。

    seaweedfs的特点: 
    1 可以成存储上亿的文件(根据你硬盘大小变化) 
    2 速度刚刚的

    接下来,便让我们开始进入正文。

    一、seaweedfs的搭建

    seaweedfs可以编译安装(需要VPN,网络环境不好,最好不用该方法安装),也可以下载释放版本镜像安装。
    

    1、安装GO环境

    (1)、下载go语言包,go语言包地址
    wget 地址

    比如:

    wget https://golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz
    (2)、解压到指定目录,并添加环境变量
    sudo tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz

    添加环境变量

    #工作目录
    export GOPATH=/opt/go
    #解压目录
    export GOROOT=/usr/local/go
    export GOARCH=386
    export GOOS=linux
    export GOBIN=$GOROOT/bin
    export GOTOOLS=$GOROOT/pkg/tool/
    export PATH=$PATH:$GOBIN:$GOTOOLS
    (3)、安装git、mercurial
    sudo apt-get install git
    suod apt-get install mercurial
    (4)、安装seaweedfs

    如果要编译安装运行下面命令,没有VPN,可以忽略下面命令:

    go get github.com/chrislusf/seaweedfs/go/weed 

    下载安装:seaweedfs地址

    wget  https://github.com/chrislusf/seaweedfs/releases/download/0.76/linux_amd64.tar.gz
    
    sudo tar -zxvf linux_amd64.tar.gz
    
    (5)、配置运行seaweedfs

    进入解压目录,以守护进程启动seaweedfs的主服务及集群

    nohup ./weed master -mdir=/data/fileData -port=9333 -defaultReplication="001" -ip="ip地址" >>/data/fileData/server_sfs.log &
    
    nohup ./weed volume -dir=/data/t_v1 -max=5 -mserver="ip地址:9333" -port=9080 -ip="ip地址" >>/data/t_v1_sfs.log &
    
    nohup ./weed volume -dir=/data/t_v2 -max=5 -mserver="ip地址:9333" -port=9081 -ip="ip地址" >>/data/t_v2_sfs.log &
    
    nohup ./weed volume -dir=/data/t_v3 -max=5 -mserver="ip地址:9333" -port=9082 -ip="ip地址" >>/data/t_v3_sfs.log &

    将上面的ip地址换为具体的ip即可,默认可设为localhost。volume多少可以根据自己的情况添加。mdir、dir是指定文件存储路径。

    一个 MasterServer 对应三个 VolumeServer ,设置复制模式为 “001” , 也就是在相同 Rack 下复制副本为一份,也就是总共有两份。如下:

    更多的其他配置可以查看文档

    二、seaweedfs的文件应用

    访问服务器ip地址:9333,可以看到如下界面 

    (1)获取fid,使用GET或POST访问路径http://localhost:9333/dir/assign,获取fid和上传文件地址,seaweedfs会返回json的结果。

    如下:

    curl -X POST http://localhost:9333/dir/assign

    得到结果:

    {"fid":"1,08e684f060","url":"1ocalhost:9080","publicUrl":"localhost:9080","count":1}

    fid就是上传的标志。 
    使用url或者publicUrl加上fid,就是文件上传的地址。如下:

     http://localhost:9080/1,08e684f060

    接着就可以发起一个PUT或POST请求到上面的地址,把文件上传上去。

    curl -X PUT -F file=@/home/back.png http://localhost:9080/1,08e684f060

    结果如下:

    {
        "name": "back.png",
        "size": 64300
    }

    (2)如果要更新一个文件,直接发起POST或者PUT请求到url+fid的地址即可。fid就是保存图片使用的fid。

    (3)删除图片发起一个DELETE请求即可。

    curl -X DELETE http://localhost:8080/1,08e684f060

    (4)查看文件,需要fid。就是刚刚上传图片得到的fid。可以将其保存在数据库当中,查找文件时再调用。 
    当有多个Volume集群时,可以通过参数指定查看某个卷。

    curl http://localhost:9333/dir/lookup?volumeId=2

    得到具体的地址:

    {"volumeId":"2","locations":[{"url":"localhost:9081","publicUrl":"localhost:9081"}]}

    然后访问具体的路由:

    http://localhost:9081/fid

    比如:http://localhost:9081/1,08e684f060 
    可以带后缀,也可以不带。 
    http://localhost:9081/1,08e684f060.jpg 
    还可以带一些限定参数: 
    http://localhost:9081/1,08e684f060.jpg 
    http://localhost:9081/1,08e684f060.jpg?height=200&width=200 
    http://localhost:9081/1,08e684f060.jpg?height=200&width=200&mode=fit 
    http://localhost:9081/1,08e684f060.jpg?height=200&width=200&mode=fill

    其实刚刚上传的是在9080的volume1,9081是volume2。但是通过fid加上具体的volume端口,依旧可以访问到图片的地址。

    三、seaweedfs客户端使用

    seaweedfs的使用与语言无关,都可以方便进行封装。github上也有一些开放的client。比如这个java的客户端。作者把线程分配、HTTP请求、文件操作进行了封装,更加方便。但是目前作者没怎么更新了,还有些问题。

    我把客户端的java代码进行了重新覆写,上传到github了,seaweedfs-java-client欢迎大家start。

    这里还有一些其他语言的客户端,大家也可以去学习更改一下:

    java-client:https://github.com/Shuyun123/seaweedfs-java-client

    php-client:https://github.com/micjohnson/weed-php

    node-client:https://github.com/cruzrr/node-weedfs

    python-client:https://github.com/darkdarkfruit/python-weed

    scala-client:https://github.com/chiradip/WeedFsScalaClient

    四、扩展

    除了seaweedfs,还有一些其他的文件存储,比如:bfs(支撑Bilibili的小文件存储系统),github地址 bfs。感兴趣的读者可以去学习一下。 
    还有比如阿里的https://github.com/alibaba/tfs,百度的https://github.com/baidu/bfs,fastdfs:https://github.com/happyfish100/fastdfs等。

    作者:Anumbrella

    链接: https://blog.csdn.net/Anumbrella/article/details/78585937

  • 相关阅读:
    MySQL "show users"
    MySQL
    A MySQL 'create table' syntax example
    MySQL backup
    MySQL show status
    Tomcat, pathinfo, and servlets
    Servlet forward example
    Servlet redirect example
    Java servlet example
    How to forward from one JSP to another JSP
  • 原文地址:https://www.cnblogs.com/liuwei0824/p/9242291.html
Copyright © 2011-2022 走看看