zoukankan      html  css  js  c++  java
  • seaweedfs文件存储服务器搭建

    官方网站: https://github.com/chrislusf/seaweedfs/wiki/Getting-Started

    概述

     

    seaweedfs是一个非常优秀的由 golang 开发的分布式存储开源项目。它是用来存储文件的系统,并且与使用的语言无关,使得文件储存在云端变得非常方便。

    在逻辑上Seaweedfs的几个概念:

    • Node 系统抽象的节点,抽象为DataCenter、Rack、DataNode
    • DataCenter 数据中心,对应现实中的不同机房
    • Rack 机架,对应现实中的机柜
    • Datanode 存储节点,用于管理、存储逻辑卷
    • Volume 逻辑卷,存储的逻辑结构,逻辑卷下存储Needle
    • Needle 逻辑卷中的Object,对应存储的文件
    • Collection 文件集,可以分布在多个逻辑卷上

    一. 安装go环境

    • 安装规划
      master: 172.16.20.71
      volume:
      172.16.20.71*3
      172.16.20.72*2
    • 查看系统位数
      getconf LONG_BIT
    • 下载源码包
      https://golangtc.com/download
    • 选择对应的版本下载
    cd /usr/local
    # 下载
    wget https://golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz
    # 将其传到其他两台机器
    # 解压
    tar -zxf go1.9.2.linux-amd64.tar.gz
    # 配置
    vim /etc/profile
    #加入
    export GOPATH=/opt/go
    export GOROOT=/usr/local/go
    export GOOS=linux
    export GOBIN=$GOROOT/bin
    export GOTOOLS=$GOROOT/pkg/tool/
    export PATH=$PATH:$GOBIN:$GOTOOLS
    
    # 使配置文件生效
    source /etc/profile
    
    # 查看
    go version
    
    • 安装git mercurial
      yum install -y mercurial git

    二. 安装seaweedfs

    1. 下载

    cd /usr/local
    https://github.com/chrislusf/seaweedfs/releases/选择对应的版本
    wget https://github.com/chrislusf/seaweedfs/releases/download/0.96/linux_amd64.tar.gz

    2. 解压

    tar -zxf linux_amd64.tar.gz

    3. ./weed -h 查看帮助

    4. 创建运行需要的目录

    /root/sea/data
    /root/sea/vol/vol[1-3]
    /root/sea/logs

    5. 配置运行master

    具体参数查看帮助 /usr/local/weed master -h
    https://github.com/chrislusf/seaweedfs/wiki/Master-Server-API

    nohup /usr/local/weed master -mdir=/root/sea/data -port=9333 -defaultReplication="001" -ip="172.16.20.71" &>> /root/sea/logs/master.log &
    
    

    6. 配置运行volume

    具体参数查看帮助
    /usr/local/weed volume -h
    官方文档
    https://github.com/chrislusf/seaweedfs/wiki/Volume-Server-API
    配置volume逻辑卷时, 可以指定数据中心datacenter以及机架rack, 复制模式和数据中心和机架有关, 具体见文档
    https://github.com/chrislusf/seaweedfs/wiki/Replication

    # 172.16.20.71
    /usr/local/weed volume -dir=/root/sea/vol/vol1 -mserver="172.16.20.71:9333" -port=8081 -ip="172.16.20.71" &>>/root/sea/logs/vol1.log &
    /usr/local/weed volume -dir=/root/sea/vol/vol2 -mserver="172.16.20.71:9333" -port=8082 -ip="172.16.20.71" &>>/root/sea/logs/vol1.log &
    /usr/local/weed volume -dir=/root/sea/vol/vol3 -mserver="172.16.20.71:9333" -port=8083 -ip="172.16.20.71" &>>/root/sea/logs/vol1.log &
    
    # 172.16.20.72
    /usr/local/weed volume -dir=/root/sea/vol/vol1 -mserver="172.16.20.71:9333" -port=8081 -ip="172.16.20.72" &>>/root/sea/logs/vol1.log &
    /usr/local/weed volume -dir=/root/sea/vol/vol2 -mserver="172.16.20.71:9333" -port=8082 -ip="172.16.20.72" &>>/root/sea/logs/vol1.log &
    /usr/local/weed volume -dir=/root/sea/vol/vol3 -mserver="172.16.20.71:9333" -port=8083 -ip="172.16.20.72" &>>/root/sea/logs/vol1.log &
    

    7. 上传文件测试

    • 文件上传首先需要请求master, 去分配一个逻辑卷和fid
      curl http://172.16.20.71:9333/dir/assign

    • 返回结果
      {"fid":"3,57f4e1098c93","url":"172.16.20.71:8082","publicUrl":"172.16.20.71:8082","count":1}

    • 使用返回的url和fid上传文件
      curl -F "file=/home/hufengjiu/ka.jpg" 172.16.20.71:8082/3,57f4e1098c93
      可以这么理解, 上传文件, 首先请求master分配volume和fid, 然后将文件上传到某个卷下

    • wget 172.16.20.71:8082/3,57f4e1098c93 可以将该图片文件下载下来,

    • 也可以在浏览器直接访问
      172.16.20.71:8082/3,57f4e1098c93

    • 也可以指定图片大小
      172.16.20.71:8082/3,57f4e1098c93?width=100&height=20

    • 查看卷目录


       
      image.png

      因为我已经上传了很多文件, 所以这个目录很大, 仔细观察, 每一组都是有dat和idx组成, dat是数据部分,idx是索引部分

    四. python客户端[Python-weed]的安装和使用(https://github.com/darkdarkfruit/python-weed)

    • python版本: python2.7
    • pip安装
    pip install python-weed
    # 需要的依赖库
    pip install requests
    pip install conf
    
    • 使用
      将/root/hufengjiu/pic目录下所有的图片文件上传, 代码如下
    # ** -- coding: utf-8 -- **
    #!/usr/bin/env python
    
    from weed.master import WeedMaster
    from weed.volume import WeedVolume
    import glob
    import os.path as op
    
    # 获取pic目录下所有图片文件
    globlist = glob.glob(r"/root/hufengjiu/pic/*/*.[png|jpg|jpeg]*")
    print len(globlist)
    master = WeedMaster(host='172.16.20.71')
    urls = []
    results = []
    for i in globlist:
        #分配volume和fid
        assign = master.get_assign_key()
        host_port = assign['url'].split(':')
        url = assign['url'] + '/' + assign['fid']
        volume = WeedVolume(host=host_port[0], port=int(host_port[1]))
        #上传图片
        if op.isfile(i):
            result = volume.put_file(i, assign['fid'])
            urls.append(url)
            results.append(result)
    # 将所有的图片url保存起来
    print urls
    

    五. 配置运行Filer并挂载到本地目录

    Filer允许以另一种方式上传文件
    https://github.com/chrislusf/seaweedfs/wiki/Filer-Server-API

    1. 安装启动

    • 生成配置文件
    mkdir -p /etc/seaweedfs
    cd /etc/seaweedfs
    touch filer.toml
    mkdir -p /root/sea/filer_path/level
    

    /usr/local/weed scaffold filer -output=""打印出的内容写入到 filer.toml中, 并且修改其中的配置

    dir = "/root/sea/filer_path/level"
    

    可以使用文件, MySQL, redis等保存 filer metadata, 只需要启用或者停用对应的配置

    • 启动
      /usr/local/weed filer -master=172.16.20.71:9333 -ip=172.16.20.71 -defaultReplicaPlacement='001'&

    • 上传文件
      curl -F "filename=@ka.jpg" "http://172.16.20.71:8888/path/to/sources/"
      会返回{"name":"ka.jpg","size":8601,"fid":"6,57f5feb19f1c","url":"http://172.16.20.71:8082/6,57f5feb19f1c"}

    • 访问
      使用http://172.16.20.71:8888/path/to/sources/ka.jpg或者http://172.16.20.71:8082/6,57f5feb19f1c都可以访问

    2. mount挂载

    https://github.com/chrislusf/seaweedfs/wiki/Mount
    可以将filer挂载到本地某个目录进行管理

    yum install -y fuse
    /usr/local/weed mount -filer=172.16.20.71:8888 -dir=/root/sea/mount &
    

    cd /root/sea/mount, 就可以查看具体上传的文件

    具体信息以官方wiki为主




  • 相关阅读:
    X、Y轴抖动的动画
    ViewFlipper的简单用法
    让手机连接到指定的WIFI网络,适用于之前已经连过的网络
    Eclipse 离线汉化的方法
    自己写的SeekBarPreference,可以实现seekbar滑动监听和设置默认进度和最大进度
    录制Android屏幕软件——屏幕录像专家
    【转】解决Android因加载多个大图引起的OutOfMemoryError,内存溢出的问题
    Java中的线程实现
    获得手机当前的ip地址
    操作Wifi的工具类
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/10829785.html
Copyright © 2011-2022 走看看