SeaweedFS容器部署(seaweed部署、seaweedfs部署)(文件块chunks概念)(master节点与volume节点通信原理)(seaweed上传seaweed下载)

article/2025/10/14 20:34:23

在这里插入图片描述

官网链接:https://github.com/seaweedfs

文章目录

    • seaweed简介
    • seaweedfs文件块概念(chunks)
    • 分布式部署时master节点与volume节点通信原理
    • seaweed容器部署方法
      • 单个节点部署
        • 部署方法
          • (master+volum)
          • (master+volum+filer)
      • 分布式部署
        • 部署方法
    • 上传与下载

seaweed简介

SeaweedFS 是一个简单且高度可扩展的分布式文件系统。它有两个目标:

  • 存储数十亿个文件!
  • 快速提供文件!

SeaweedFS 最初是作为一个对象存储系统,用于高效处理小文件。与其在中央主服务器上管理所有文件元数据,不如让中央主服务器只管理卷服务器上的卷,而这些卷服务器负责管理文件及其元数据。这样可以减轻中央主服务器的并发压力,将文件元数据分散到卷服务器中,从而实现更快的文件访问(O(1),通常只需要一个磁盘读取操作)。

每个文件的元数据只需要 40 字节的磁盘存储开销。它的 O(1) 磁盘读取速度非常简单,欢迎您用实际使用场景来挑战其性能。

SeaweedFS 是通过实现 Facebook 的 Haystack 设计论文开始的。此外,SeaweedFS 实现了纠删编码,借鉴了 f4:Facebook 的 Warm BLOB 存储系统的思想,并与 Facebook 的 Tectonic 文件系统有很多相似之处。

在对象存储的基础上,可选的 Filer 可以支持目录和 POSIX 属性。Filer 是一个单独的线性可扩展的无状态服务器,具有可定制的元数据存储,例如 MySql、Postgres、Redis、Cassandra、HBase、Mongodb、Elastic Search、LevelDB、RocksDB、Sqlite、MemSql、TiDB、Etcd、CockroachDB、YDB 等。

对于任何分布式键值存储,大值可以卸载到 SeaweedFS。凭借快速的访问速度和线性可扩展的容量,SeaweedFS 可以作为一个分布式 Key-Large-Value 存储。

SeaweedFS 可以与云无缝集成。通过在本地集群上存储热数据,以及在云上存储具有 O(1) 访问时间的温数据,SeaweedFS 可以实现快速的本地访问时间和弹性云存储容量。更重要的是,云存储访问 API 成本降至最低。比直接使用云存储更快、更便宜!

seaweedfs文件块概念(chunks)

文件块(File Block)(chunks)是SeaweedFS中的一个概念,指的是文件在分布式存储系统中的最小存储单元。在SeaweedFS中,一个文件会被分成多个文件块进行存储,每个文件块的大小可以通过配置进行调整,默认为4MB。

文件块是SeaweedFS实现高可用和高性能的关键。当一个文件上传到SeaweedFS时,SeaweedFS会将文件分成多个文件块,并将这些文件块存储到不同的Volume Server中。这样可以避免单个Volume Server故障导致文件丢失的问题,同时也可以提高文件读写的并发性能。

在SeaweedFS中,每个文件块都有一个唯一的ID,称为File ID。File ID由Volume Server生成,由Volume Server ID、Volume ID和文件块偏移量组成。通过File ID,SeaweedFS可以快速定位文件块所在的Volume Server,从而实现高效的文件读写操作。

总之,文件块是SeaweedFS中的一个重要概念,是实现高可用和高性能的关键。理解文件块的概念,有助于更好地理解SeaweedFS的工作原理和使用方法。

分布式部署时master节点与volume节点通信原理

seaweedfs部署分为单个节点部署和分布式部署,在分布式部署时,除了部署master节点外,还需要部署volume节点(>=1个),无论是master节点,还是volume节点,都需要一个自身映射到宿主机的独立的监听端口,master节点通常是9333,volume节点各不相同;

此外,volume节点在部署执行docker run时,还需告知其master节点的联系方式,容器部署时为宿主机ip+master容器监听端口。

在seaweedfs中,volume节点容器与master容器之间的通信是通过GRPC协议实现的。每个volume节点容器会向master容器注册自己的信息,包括节点ID、IP地址、端口等。当客户端需要访问某个文件时,会先向master容器发送请求,获取该文件所在的volume节点信息,然后再直接与该节点进行通信,进行文件的读写操作。

seaweed容器部署方法

单个节点部署

在以下情况下,建议使用单个节点部署SeaweedFS:

  1. 存储容量需求小:如果需要存储的文件数据量较小,单个节点的存储容量可以满足需求,此时不需要使用分布式存储。

  2. 数据可靠性要求不高:如果对文件数据的可靠性要求不高,可以使用单个节点部署SeaweedFS。在单个节点上存储数据可以节省存储空间,并且不需要考虑数据的备份和恢复问题。

  3. 访问性能要求不高:如果对文件数据的访问性能要求不高,可以使用单个节点部署SeaweedFS。单个节点的性能可以满足需求,不需要考虑横向扩展和负载均衡等问题。

  4. 系统资源有限:如果系统资源有限,例如内存、CPU等,单个节点部署SeaweedFS可以避免资源浪费和性能下降问题。

如果需要存储的文件数据量较小,对数据的可靠性和访问性能要求不高,或者系统资源有限,建议使用单个节点部署SeaweedFS。

部署方法

seaweedfs容器部署方式是多种多样的,这里只介绍我比较熟悉的两种单个节点的部署方法

(master+volum)

这种方式只有一个容器,容器中包含master和volume服务,伪docker run代码如下:

docker run \-d -i -t --restart always \--name $CONTAINER_NAME \-p $MASTER_PORT:9333 \-v $SCRIPT_LOCATION/mount/masterVolumeFiler/data/:/data/ \-v /etc/localtime:/etc/localtime:ro \$IMAGE_NAME:$IMAGE_TAG \server
(master+volum+filer)

这种方式比(master+volum)多了一个filer服务:

docker run \-d -i -t --restart always \--name $CONTAINER_NAME \-p $MASTER_PORT:9333 \-p $FILER_PORT:8888 \-v $SCRIPT_LOCATION/mount/masterVolumeFiler/data/:/data/ \-v /etc/localtime:/etc/localtime:ro \$IMAGE_NAME:$IMAGE_TAG \server filer

分布式部署

在以下情况下,建议使用SeaweedFS的分布式存储功能:

  1. 存储容量需求大:如果需要存储大量的文件数据,单个节点的存储容量可能无法满足需求。使用分布式存储可以将文件数据分散存储在多个节点上,从而提高存储容量。

  2. 数据可靠性要求高:如果需要确保文件数据的可靠性,使用分布式存储可以将数据副本存储在多个节点上,从而提高数据的可靠性。即使某个节点出现故障,数据仍然可以从其他节点中恢复。

  3. 访问性能要求高:如果需要快速访问文件数据,使用分布式存储可以将数据分散存储在多个节点上,从而提高访问性能。客户端可以从最近的节点获取数据,从而减少访问延迟。

  4. 需要横向扩展:如果需要扩展存储容量或提高访问性能,使用分布式存储可以通过添加更多的Volume节点来实现横向扩展。这样可以避免单个节点的性能瓶颈,提高整个集群的性能和可扩展性。

总之,如果需要存储大量的文件数据,并且对数据的可靠性、访问性能和横向扩展性有较高的要求,建议使用SeaweedFS的分布式存储功能。

部署方法

Master节点和Volume节点的部署方式略有不同,具体步骤如下:

  1. 部署Master节点
docker run -d --name seaweedfs_master \
-p 9333:9333 \
chrislusf/seaweedfs master

其中,-d表示以后台方式运行容器,--name指定容器名称,-p指定容器端口映射,master表示启动Master节点。

注意:

这里的master是seaweedfs镜像中的一个命令,用于启动Master节点。在Docker中,可以通过在镜像名后面添加命令来指定容器启动时要执行的命令。例如,chrislusf/seaweedfs master表示启动chrislusf/seaweedfs镜像,并执行master命令,即启动Master节点。这种方式可以方便地启动不同的容器实例,以满足不同的需求。

  1. 部署Volume节点
docker run -d --name seaweedfs_volume \
-p 8080:8080 \
-v /data:/data \
-e "MASTER=<master_ip>:9333" \
chrislusf/seaweedfs volume

其中,-d表示以后台方式运行容器,--name指定容器名称,-p指定容器端口映射,-v指定容器数据卷映射,-e指定环境变量,volume表示启动Volume节点。<master_ip>为Master节点所在主机的IP地址或域名,如-e "MASTER=192.168.1.140:9333"

需要注意的是,每个Volume节点都需要指定Master节点的地址,以便能够向Master节点注册自己的信息,并接收Master节点的指令。

以上是使用Docker部署Master节点和Volume节点的方式,也可以使用二进制文件或源代码编译的方式进行部署。在使用二进制文件或源代码编译的方式部署时,需要手动配置Master节点和Volume节点的配置文件,并启动相应的进程。

上传与下载

上传大文件见此:

https://github.com/seaweedfs/seaweedfs/wiki/Optimization#upload-large-files

参考文章1:seaweedfs 用docker快速布署及测试

参考文章2:SeaWeedFS安装以及部署,以及master模式和filer模式的介绍

参考文章3:Seaweedfs上传大文件_large file

参考文章4:seaweedfs搭建与使用

参考文章5:SeaweedFS Wiki


http://chatgpt.dhexx.cn/article/jq31tjmr.shtml

相关文章

seaweedfs服务启动参数及翻译(seaweed参数、seaweed命令、weed参数、weed命令)(在单个容器同时启动master、volume、filer服务)

文章目录 weed命令翻译weed server命令翻译 weed filer命令 docker容器运行示例&#xff08;docker run命令&#xff09;以下是一个在单个容器启动master、volume、filer服务的示例 weed server 容器debug 版本&#xff1a;3.47从官方镜像docker容器里扒下来的&#xff0c;只扒…

Paramiko: Python使用paramiko连接主机报错“Authentication timeout”

问题描述&#xff1a; 在用Python Paramiko库去连接主机时 始终无法连接&#xff0c;exception输出错误仅有 Authentication timeout connection paramiko.SSHClient()connection.set_missing_host_key_policy(paramiko.AutoAddPolicy())try:connection.connect(hostname192.1…

安装paramiko模块

使用Python实现自动化运维巡检网络设备&#xff0c;需要使用到paramiko模块 下载过程&#xff1a; 进入至CMD命令提示符 win r 跳转出 " 运行 " 窗口 打开内输入" cmd " 进入命令提示符 安装paramiko模块 cmd输入&#xff1a;pip install paramiko PS&…

python-paramiko安装

paramiko 安装坑比较多 测试环境&#xff1a; python3.7.9 win10 安装步骤&#xff1a; pip install pep517 pip install cryptography pip install paramiko

Python paramiko 模块详解与SSH主要功能模拟

我们知道&#xff0c;通过SSH服务可以远程连接到Linux服务器&#xff0c;查看上面的日志状态&#xff0c;批量配置远程服务器&#xff0c;文件上传&#xff0c;文件下载等&#xff0c;Python的paramiko模块同样实现了这一功能。 首先我们需要安装这一模块&#xff0c;pycharm环…

paramiko的安装

import paramiko 出错 直接通过下列代码即可&#xff0c;无需安装VS之类的 pip install paramiko 再上一步安装了paramiko之后&#xff0c;若您安装了pycharm &#xff0c;博主安装的是pycharm 2018 community版则可通过File --> setting -->下列方式 步骤1&#xf…

Python模块之paramiko

Paramiko paramiko模块&#xff0c;基于SSH用于连接远程服务器并执行相关操作。 一、安装 1 pip3 install paramiko 二、使用 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接&#xff1a; 1 import paramiko2 3 # 创建SSH对象4 ssh paramiko.SSHCli…

python之paramiko模块

paramiko是一个用于做远程控制的模块&#xff0c;使用该模块可以对远程服务器进行命令或文件操作,paramiko是用python语言写的一个模块&#xff0c;遵循SSH2协议&#xff0c;支持以加密和认证的方式&#xff0c;进行远程服务器的连接。 由于使用的是python这样的能够跨平台运行…

Python--paramiko

Paramiko paramiko模块&#xff0c;基于SSH用于连接远程服务器并执行相关操作。 一、安装 1 pip3 install paramiko 二、使用 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接&#xff1a; import paramiko# 创建SSH对象 ssh paramiko.SSHClient() # 允…

Python笔记之paramiko模块安装和使用示例

一、paramiko模块简介 paramiko是一个用于做远程控制的模块&#xff0c;使用该模块可以对远程服务器进行命令或文件操作&#xff0c;基于linux中的ssh服务 。paramiko是第三方模块&#xff0c;需要我们单独安装。通过paramiko模块&#xff0c;我们可以利用python代码程序实现对…

【Python-自动化】paramiko模块

文章目录 运维自动化Python一、模块介绍二、模块应用1.使用paramiko模块&#xff0c;通过ssh协议连接服务器2.解决首次连接known_hosts问题3、执行命令exec_command方法扩展&#xff1a;使用try异常捕获 4、多台服务器执行命令5、从服务器上传下载文件--SFTPClient方法6、多台服…

HttpClient和HtmlUnit的比较总结以及使用技巧(一)

大家在做爬虫、网页采集、通过网页自动写入数据时基本上都接触过这两个组件&#xff08;权且称之为组件吧&#xff09;&#xff0c;网上入门资料已经很多了&#xff0c;我想从实际的应用角度谈谈我对于这两个组件的看法&#xff0c;并记录在博客中&#xff0c;以便日后翻阅&…

htmlUnit的读取js渲染的页面

htmlUnit的读取js渲染的页面 我这边有个这么的需求&#xff0c;要求前端每次上版本的时候&#xff0c;有一个版本号。然后后端去爬前端&#xff0c;比较禅道的版本发布计划&#xff0c;如果发布计划和生产上的版本号不一致&#xff0c;就告警。 这个跟后端的jar包&#xff0c…

HtmlUnit

HtmlUnit是什么&#xff1f;看下介绍&#xff1a; A java GUI-Less browser, which allows high-level manipulation of web pages, such as filling forms and clicking links; just getPage(url), find a hyperlink, click() and you have all the HTML, JavaScript, and A…

HtmlUnit使用

htmlunit 是一款开源的java 页面分析工具&#xff0c;读取页面后&#xff0c;可以有效的使用htmlunit分析页面上的内容。项目可以模拟浏览器运行&#xff0c;被誉为java浏览器的开源实现。是一个没有界面的浏览器&#xff0c;运行速度迅速。是junit的扩展之一&#xff0c;它采用…

【转】 HtmlUnit简介

HtmlUnit简介&#xff1a; 引自 http://www.javaeye.com/topic/166702 HtmlUnit 是 JUnit 的扩展测试框架之一。HtmlUnit 将返回文档模拟成 HTML&#xff0c;这样您便可以直接处理这些文档了。HtmlUnit 使用例如 table、form 等标识符将测试文档作为 HTML 来处理。它同样需要遵…

HtmlUnit(Java) - 快速入门学习 - 无界面浏览器

文章目录 1. 概述2. 注意2.0 js解析问题2.1 关闭HtmlUnit日志 3. 使用3.1 抓取IT之家周榜内容 - 单页面3.2 抓取IT之家周榜第九篇文章的内容 - 双页面3.3 模拟用户操作 - &#xff08;这个功能个人感觉非常非常的鸡肋&#xff0c;只能用于非常简单的JS&#xff0c;但是一般网站…

【零基础】快速入门爬虫框架HtmlUnit

迅速的HtmlUnit htmlunit是一款开源的web页面分析工具&#xff0c;理论上来说htmlunit应用于网页的自动化测试&#xff0c;但是相对来说更多人使用它来进行小型爬虫的快速开发。使用htmlunit进行爬虫开发不仅是其运行速度快&#xff0c;更重要的是此框架上手更为容易&#xff0…

保研之路——哈深计算机预推免

哈深计算机预推免 个人情况高校复试参与情况哈工深计算机学院直硕&#xff08;7.20&#xff09;结语 嗯&#xff01;抱着不白花这么多路费住宿费的初衷准备写一个保研经验贴&#xff0c;希望学弟学妹少花点钱吧orz 我的战术大概是只要学校给我发了邀请我就去&#xff08;除了时…

哈工大计算机学院统一复试划线,哈工大计算机专业,复试比例101%,擦线党没戏了...

原标题&#xff1a;哈工大计算机专业&#xff0c;复试比例101%&#xff0c;擦线党没戏了 这几天哈工大各院系公布了复试线及复试名单&#xff0c;其中「计算机学院」的复试考生比例居然是101%。 哈工大2020年计算机专业的考研复试线为320分(学术学位)&#xff0c;以及专业学位的…