• SeaWeedFS文件存储服务器搭建


    SeaWeedFS文件存储服务器搭建

     

    概述

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

    在逻辑上Seaweedfs的几个概念:

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

    所有包含模块
    模块 模块说明
    Weed master 开启一个master服务器
    Weed volume 开启一个volume 服务器
    Weed filer 开启一个指向一个或多个master服务器的file服务器
    Weed upload 上传一个或多个文件
    Weed server 启动一个服务器,包括一个volume服务器和自动选举一个master服务器
    模块的参数说明及使用说明
    Weed master
    参数 类型 说明
    -cpuprofile String Cpu profile输出文件
    -defaultReplication String 如果没有指定默认备份类型。默认”000”
    -garbageThreshold String 清空和回收空间的阈值(默认”0.3”)
    -ip String Master 服务器ip地址(默认”localhost”)
    -ip.bind String 需要绑定的ip地址(默认”0.0.0.0”)
    -maxCpu Int 最大cpu数量。0表示所有可用的cpu
    -mdir String 存储元数据的数据目录(默认”/tmp”)
    -memprofile String 内存配置文件输出文件
    -peers String 逗号分隔所有主节点ip:端口列表,示例127.0.0.1:9093,127.0.0.1: 9094
    -port Int http监听端口(默认9333)
    -pulseSeconds Int 心跳检测的时间间隔单位为秒(默认5)
    -secure.secret String 加密json web token方法
    -volumePreallocate 无 为volumes预先分配磁盘空间
    -volumeSizeLimitMB Uint Master停止指向过量的volumes写的限定(默认30000)
    -whiteList string 逗号分隔具有写权限的Ip地址。如果是空的,没有限制。即白名单

    说明
    defaultReplication
    000 不备份, 只有一份数据
    001 在相同的rackj里备份一份数据
    010 在相同数据中心内不同的rack间备份一份数据
    100 在不同的数据中心备份一份数据
    200 在两个不同的数据中心各复制2次
    110 在不同的rack备份一份数据, 在不同的数据中心备份一次
    如果数据备份类型是 xyz形式
    各自的意义
    x 在别的数据中心备份的份数
    y 不相同数据中心不同的racks备份的份数
    z 在别的服务器相同的rack的备份份数

    Weed volume
    参数 类型 说明
    -cpuprofile string Cpu profile输出文件
    -dataCenter string 当前volume服务的数据中心名称
    -dir string 存储数据文件的目录dir[,dir]…(默认”/tmp”)
    -idleTimeout Int 连接空闲时间秒数(默认30)
    -images.fix.orientation (true/false) 上传时调整jpg方向
    -index string 选择内存~性能平衡模式[memory|leveldb|boltdb|btree]。(默认”memory”)
    -ip string Ip地址或服务器名称
    -ip.bind string 需要绑定的ip地址(默认”0.0.0.0”)
    -max string Volumes的最大值,count[,count]…(默认”7”)
    -maxCpu Int 最大cpu数量。0表示所有可用的cpu
    -memprofile string 内存配置文件输出文件
    -mserver string 用逗号分隔的master服务器列表(默认”localhost:9333”)
    -port Int http监听端口号(默认8080)
    -port.public Int 端口对外开放
    -publicUrl string 公开访问地址
    -pulseSeconds Int 心跳之间的秒数,必须小于或等于master 服务器设置(默认5)
    -rack string 当前volume服务器的rack 名称
    -read.redirect (true/false) 重新定向转移或非本地 volumes
    -whiteList string 逗号分隔具有写权限的Ip地址。如果是空的,没有限制。
    Weed filer
    参数 类型 说明
    collection String 所有数据将存储在这个集合中
    dataCenter String 首选在此数据中心写入volumes
    defaultReplicaPlacement String 如果没有指定默认复制类型(默认“000”)
    dirListLimit Int 限制子目录列表大小
    disableDirListing 无 关闭目录清单
    ip String Filter服务器http监听ip地址
    master String 用逗号分隔的master服务器(默认“localhost:9333”)
    maxMB Int 分割文件大于限制(默认32)
    port Int Filer服务器htp监听端口(默认8888)
    port.grpc Int Filer grpc服务器监听端口,默认为 http的端口+10000
    port.public Int 对外开放的端口
    redirectOnRead 无 在文件GET请求期间是代理还是重定向到volumes服务器
    secure.secret String 加密Json Web令牌(JWT)的密钥

    Weed upload
    参数 类型 说明
    collection string 可选的集合名称
    dataCenter String 可选的数据中心名称
    debug 无 显示debug信息
    dir String 如果指定,则递归地上传整个文件夹。
    include String 需要上传的文件,跟-dir配合使用,例如*.pdf,*.html,ab?d.txt等
    master String Seaweedfs master服务器地址(默认”localhost:9333”)
    maxMB Int 如果文件超过指定大小则进行分割
    replication String 备份类型
    secure.secret String 加密Json Web令牌(JWT)的密钥
    ttl string 存活时间 1m,1h,1d,1M,1y

    以上是maset volume upload filer 的所有参数说明。是主要的功能。

    使用接口
    申请一个fid
    curl http://localhost:9333/dir/assign
    上传文件
    curl -F file=@/home/chris/myphoto.jpg http://127.0.0.1:8080/3,01637037d6
    删除文件
    curl -X DELETE http://127.0.0.1:8080/3,01637037d6
    申请带存活时间的fid
    curl http://localhost:9333/dir/assign?ttl=3m

    一. 安装go环境

    • 查看看系统位数
      getconf LONG_BIT
    • 下载源码包

      https://studygolang.com/dl

    • 选择对应的版本下载
    •  下载以及配置:

      #下载:
      wget https://studygolang.com/dl/golang/go1.14.3.linux-amd64.tar.gz #解压
      tar -zxvf
      go1.14.3.linux-amd64.tar.gz
      # 配置 vim /etc/profile 
      #加入
      export GOPATH=/soft/go/path
      export GOROOT=/soft/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 /soft/download
    打开网站 :

     https://github.com/chrislusf/seaweedfs/releases/       

    选择对应的版本下载:

    wget https://github.com/chrislusf/seaweedfs/releases/download/1.79/linux_amd64.tar.gz

    2. 解压

    tar -zxvf linux_amd64.tar.gz

    3. ./weed -h 查看帮助

    4. 创建运行需要的目录

    /usr/software/seaweedfs/master/data
    /usr/software/seaweedfs/master/logs
    /usr/software/seaweedfs/volume/vol
    /usr/software/seaweedfs/volume/logs
    

      

    方案一、设置一台master服务器和一台volume服务器

    5. 配置运行master

    nohup /usr/software/seaweedfs/weed master -mdir=/usr/software/seaweedfs/master/data -port=9333 -ip="172.21.0.7" -volumeSizeLimitMB=30 &>> /usr/software/seaweedfs/master/logs/master.log & 

    6. 配置运行volume

    nohup /usr/software/seaweedfs/weed volume -dir=/usr/software/seaweedfs/volume/vol -max=3 -mserver="172.21.0.7:9333" -port=8080 -ip="172.21.0.7"  &>>/usr/software/seaweedfs/volume/logs/vol.log &

    7. 上传文件测试

    • 文件上传首先需要请求master, 去分配一个逻辑卷和fid

      curl http://172.21.0.7:9333/dir/assign

      返回结果

    • {"fid":"7,02d41f9f6b","url":"172.21.0.7:8080","publicUrl":"172.21.0.7:8080","count":1}
    • 使用返回的url和fid上传文件

    • curl -F file=@/usr/software/seaweedfs/ww1.JPG http://172.21.0.7:8080/7,02d41f9f6b
      {"name":"ww1.JPG","size":93533,"eTag":"1ae02c89"}

      可以这么理解, 上传文件, 首先请求master分配volume和fid, 然后将文件上传到某个卷下

    • wget http://172.21.0.7:8080/7,02d41f9f6b

      可以将该图片文件下载下来,

    • 也可以在浏览器直接访问

      http://172.21.0.7:8080/7,02d41f9f6b
      或者
      http://172.21.0.7:8080/7/02d41f9f6b

      也可以直接上传文件

    • curl -F file=@/usr/software/seaweedfs/phx.mp4 http://172.21.0.7:9333/submit
      {"eTag":"9cc46572","fid":"7,0572e19181","fileName":"phx.mp4","fileUrl":"172.21.0.7:8080/7,0572e19181","size":941529}



    6. 开启filer

    nohup /usr/software/seaweedfs/weed filer -ip=XXX X -port=8882 -master=XXXX:9333 -collection=test &>>/usr/software/seaweedfs/filer/logs/filer.log &

    方案二、设置多台master服务器和多台volume服务器

    5. 配置运行master

    我们启动一个master,并设置一些参数,参数有很多都是默认的,可以不设置
    # mdir 存储元数据的数据目录
    # port 监听端口
    # peers 主节点ip:端口
    # defaultReplication 备份策略
    # ip 服务器ip
    # garbageThreshold 清空和回收空间的阈值
    # maxCpu 最大cpu数量,0是所有
    # pulseSeconds 心跳检测的时间间隔单位为秒
    # ip.bind 绑定ip
    # volumeSizeLimitMB volumes超载量,最大30G,即一个卷可以存多少数据,当然一个卷不代表一个磁盘,
    
    /root/weed master -mdir=/data/seaweedfs -port=9333 -peers=172.16.100.107:9333,172.16.100.111:9333,172.16.100.106:9333 
    -defaultReplication="000" -ip="172.16.100.107" -garbageThreshold=0.3 -maxCpu=0 -pulseSeconds=5 -ip.bind=0.0.0.0 -volumeSizeLimitMB=30000 >>/root/master.out &
    ./weed -logdir=master/log master -mdir=master/data -port=9333 -peers=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333  -ip=172.18.91.2 -port=9333 -defaultReplication="010" -volumeSizeLimitMB=30000 -defaultReplication=011 &
    ./weed -logdir=master/log master -mdir=master/data -port=9333 -peers=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333  -ip=172.18.91.3 -port=9333 -defaultReplication="010" -volumeSizeLimitMB=30000 -defaultReplication=011 &
    ./weed -logdir=master/log master -mdir=master/data -port=9333 -peers=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333  -ip=172.18.91.4 -port=9333 -defaultReplication="010" -volumeSizeLimitMB=30000 -defaultReplication=011 &

    6. 配置运行volume

     

    # dir 存储数据文件的目录,刚才的挂载点
    # mserver master服务器列表
    # port 监听端口
    # ip 服务器ip
    # max 本机volumes的最大值,在master上我们定义的每个卷为30G,可是我们的磁盘不可能就这么点,而max的作用就是表示这个磁盘上可以分多少个卷,默认是7,也就是30G * 7 = 210G,很明显磁盘被浪费了很多空间,因此我们需要指定一个大max值,保证volumeSizeLimitMB * max >= 磁盘容量,当然你可以直接100,简单粗暴
    # dataCenter 机房
    # rack 机架
    # idleTimeout 连接空闲时间秒数
    # images.fix.orientation 上传时调整jpg方向
    # ip.bind 监听ip
    # maxCpu 最大cpu数量
    # read.redirect 重新定向转移非本地volumes
    
    
    /root/weed volume -dir=/data/seaweedfs/volume1 -mserver=172.16.100.107:9333,172.16.100.111:9333,172.16.100.106:9333 -ip="172.16.100.136" -max=100 -dataCenter=zw -rack=openstack-bj-zw-bgp5 -idleTimeout=30 -images.fix.orientation=true -ip.bind=0.0.0.0 -maxCpu=0 -port=8081 -read.redirect=true >>/root/volume1.out &
    /root/weed volume -dir=/data/seaweedfs/volume2 -mserver=172.16.100.107:9333,172.16.100.111:9333,172.16.100.106:9333 -ip="172.16.100.136" -max=100 -dataCenter=zw -rack=openstack-bj-zw-bgp5 -idleTimeout=30 -images.fix.orientation=true -ip.bind=0.0.0.0 -maxCpu=0 -port=8082 -read.redirect=true >>/root/volume2.out &
    ./weed -logdir=volume/log volume -dir=volume/data  -mserver=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333 -ip=172.18.91.2 -port=8080 -publicUrl=124.126.120.19:8080 -max=20 -dataCenter=dc -rack=rack2-4 -images.fix.orientation=true -read.redirect=true &
    ./weed -logdir=volume/log volume -dir=volume/data  -mserver=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333 -ip=172.18.91.3 -port=8080 -publicUrl=124.126.120.19:8080 -max=20 -dataCenter=dc -rack=rack2-4 -images.fix.orientation=true -read.redirect=true &
    ./weed -logdir=volume/log volume -dir=volume/data  -mserver=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333 -ip=172.18.91.4 -port=8080 -publicUrl=124.126.120.19:8080 -max=20 -dataCenter=dc -rack=rack2-4 -images.fix.orientation=true -read.redirect=true &
    ./weed -logdir=volume/log volume -dir=volume/data  -mserver=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333 -ip=172.18.91.5 -port=8080 -publicUrl=124.126.120.19:8080 -max=20 -dataCenter=dc -rack=rack5-7 -images.fix.orientation=true -read.redirect=true &
    ./weed -logdir=volume/log volume -dir=volume/data  -mserver=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333 -ip=172.18.91.6 -port=8080 -publicUrl=124.126.120.19:8080 -max=20 -dataCenter=dc -rack=rack5-7 -images.fix.orientation=true -read.redirect=true &
    ./weed -logdir=volume/log volume -dir=volume/data  -mserver=172.18.91.2:9333,172.18.91.3:9333,172.18.91.4:9333 -ip=172.18.91.7 -port=8080 -publicUrl=124.126.120.19:8080 -max=20 -dataCenter=dc -rack=rack5-7 -images.fix.orientation=true -read.redirect=true &

    另一种配置分布式环境

    启动一个测试集群:2 filer(8801-8802) + 3 master(9331-9333) + 3 volume(8081-8083)

    下载seaweedfs:

    https://github.com/chrislusf/seaweedfs/releases/download/1.44/linux_amd64.tar.gz

    先创建所需要目录

    启动master

    xuliang@xuliang-PC:/data/seaweedfs$ cat start_master.sh 
    ./weed -logdir=log/master1 master -mdir=master1 -peers=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -port=9331 -defaultReplication=001 &
    ./weed -logdir=log/master2 master -mdir=master2 -peers=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -port=9332 -defaultReplication=001 &
    ./weed -logdir=log/master3 master -mdir=master3 -peers=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -port=9333 -defaultReplication=001 &
    xuliang@xuliang-PC:/data/seaweedfs$ 

    启动volume

    xuliang@xuliang-PC:/data/seaweedfs$ cat start_volume.sh 
    ./weed -logdir=log/volume1 volume -dir=volume/data1 -max=300 -mserver=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -port=8081 &
    ./weed -logdir=log/volume2 volume -dir=volume/data2 -max=300 -mserver=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -port=8082 &
    ./weed -logdir=log/volume3 volume -dir=volume/data3 -max=300 -mserver=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -port=8083 &
    xuliang@xuliang-PC:/data/seaweedfs$

    使用weed scaffold -config filer -output="." 在当前目录生成配置文件

    查看帮助信息知道

    The configuration file "filer.toml" is read from ".", "$HOME/.seaweedfs/", or "/etc/seaweedfs/", in that order.

    配置文件要放在当前目录或"$HOME/.seaweedfs/", or "/etc/seaweedfs/

    修改存储元数据信息默认[leveldb2]

    1
    2
    3
    4
    5
    [leveldb2]
    £ local on disk, mostly for simple single-machine setup, fairly scalable
    £ faster than previous leveldb, recommended.
    enabled = true 
    dir "."  

      修改为redis

    [redis]
    enabled = true
    address  = "localhost:6379"
    password = ""
    database = 0

    启动命令:

    xuliang@xuliang-PC:/data/seaweedfs$ cat start_filer.sh 
    ./weed -logdir=./log/filer1 filer -port=8801 -master=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -defaultReplicaPlacement=001 &
    ./weed -logdir=./log/filer2 filer -port=8802 -master=192.168.11.103:9331,192.168.11.103:9332,192.168.11.103:9333 -ip=192.168.11.103 -defaultReplicaPlacement=001 &
    xuliang@xuliang-PC:/data/seaweedfs$ 

    挂载:

    xuliang@xuliang-PC:/data/seaweedfs$ cat start_mount.sh 
    ./weed mount -filer=192.168.11.103:8801 -dir=/mnt -filer.path=/
    
    xuliang@xuliang-PC:/data/seaweedfs$


     
     
     
     
  • 相关阅读:
    织梦网站底部的Power by DedeCms怎么去掉?
    在线文档预览
    Hyper-v网络配置
    office web apps部署(二)
    iOS 学习资料整理
    office web apps部署(一)
    cdr格式文件抠图
    iframe载入等待
    Vcl.FileCtrl.SelectDirectory
    Function Pointer in Delpni
  • 原文地址:https://www.cnblogs.com/pinghengxing/p/12944605.html
Copyright © 2020-2023  润新知