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$


 
 
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM