openstack-swift.18421165

对象存储 swift

对象存储 是一种用于存储和管理大量数据的系统。类似于一个超大云盘。可以存储各种文件。(照片,视频,文档等等)。与传统的文件存储不同,对下个存储不关心文件的目录结构和层级关系,而是将每个文件视为一个独立的对象(Object).每个对象都有一个唯一的标识符,我们可以通过这个标识符来找到和访问对象。
为了确保数据的可靠性和安全性,对象存储会将每个对象分成对各副本,并将这些副本分散存储在不同的存储服务器上。这样,即使某个服务器出现故障,我们仍然可以通过其他副本来获取文件。

当我们想要上传文件时,我们将文件分成小块,并将这些块分发发哦不同的存储服务器上。每个块都有自己的效验码,以便需要时进行数据校验和修复。

当我们需要访问文件时,我们只需要提供文件的唯一标识符,对象存储系统就会根据标识符找到对应的存储服务器,并将文件块重新组装起来,然后,将完整的文件返回给我们。

swfit的特点

  • 高可用性:swift采用了多副本,冗余和分布式架构,以确保数据的高可用性和可靠性。当一个存储节点发生故障时,系统可以自动地将数据复制到其他节点上,以确保数据的完整性和可用性。
  • 可扩展性:swift可以轻松的扩展到数千台服务器,支持pb级别的数据存储,同时也支持水平和垂直扩展,以应对日益增长的数据需求
  • 强安全性:swift提供了多种安全机制,包括认证,授权,访问控制,加密等,以保护用户的数据免受恶意攻击和非法访问
  • 高性能:swift采用了分布式存储和负载均衡技术,以确保数据的快速访问和高效传输。同时,swift还支持多种数据访问协议,如RESTful API、Swift API、S3 API等,以满足不同用户的需求。
  • 易用性:swift提供了简单,易用的api和web界面

什么是openstack swift

swift和hadoop分布式文件系统(hdfs)都有着相似的目的:实现冗余,快速,联网的存储,它们的技术差异:

  • swift中,元数据呈分布式,跨集群复制。而hdfs使用了中央系统来维护文件元数据(namenode,名称节点),这对hdfs来说无异于单一故障点,因而扩展到规模非常大的环境显得更困难
  • swift中有多租户架构,而hdfs没有多租户架构这个概念
  • swift中文件可以写入多次;在并发操作环境下,以最近一次的操作为准。而hdfs中,文件写入一次,而且每次只能有一个文件写入
  • swift使用python hdfs使用java
  • swift被设计成了一种比较通用的存储解决方案,能够可靠地存储数量非常多的大小不一的文件;而hdfs被设计成可以存储数量中等的大文件(hdfs针对更庞大的文件做了优化),以支持数据处理。
Proxy Server:负责接收客户端的请求,并将请求分发到后端的存储节点上,同时也负责处理授权、认证和负载均衡等。

Object Server:存储对象数据,如图片、视频、文档等。

Container Server:存储对象容器数据,如文件夹、目录等。

Account Server:存储账户和认证信息,如用户、密码、角色等。

Replicator:负责对象和容器的数据复制和同步,以保证数据的冗余和高可用性。

Auditor:负责对对象和容器的数据进行检查和验证,以确保数据的完整性和可用性。

Updater:负责对对象和容器的元数据进行更新和同步,以支持Swift的高效管理和查询。

工作原理

  • 用户发起请求

用户通过RESTful API 发起http请求(例如GET,POST,PUT,DELETE等),以便存储在swift中的对象进行交互。这些请求首先发送搭配代理服务器

  • 身份认证和授权

代理服务器接收到请求后,首先对用户进行身份验证,以确保用户具有执行请求操作的权限。swift与openstack的身份验证服务keystone继承,以提供身份验证和授权功能。

  • 请求路由

代理服务器根据请求类型(账户,容器或对象操作)将请求路由到适当的服务器。此外,代理服务器还利用ring(一致性哈希环)来确定存储节点的位置

  • ring和数据分布

ring使用一致性哈希算法将数据均匀地分布在各个存储节点上,要实现负载均衡和高可用性。当请求到达存储节点时,ring负责确定数据应存储在哪个位置以及如何检索数据。

  • 数据持久化

对象服务器将数据写入存储设备。swift将数据分割为多个分片,并在多个存储节点上存储数据的多个副本,以确保数据的可靠性和容错能力。(Swift 会在节点内部创建数据的多个副本(如果你配置了副本数量))

  • 复制和一致性

复制器会定期检查数据副本的数量和完整性。如果某个存储节点发生故障或者数据损坏,复制器会自动创建新的副本以保持数据的可用性。同时,审计员会定期检查存储节点上的数据完整性和一致性,并在发现问题时出发复制器

  • 响应返回

完成操作后,存储节点将结果返回给代理服务器。代理服务器会将结果以http相应的形式返回给用户。

操作

[root@controller swift]# openstack container create swift-test
+---------------------------------------+------------+------------------------------------+
| account                               | container  | x-trans-id                         |
+---------------------------------------+------------+------------------------------------+
| AUTH_2fc2d17699ab4d1784a9b0f96e630915 | swift-test | txd6233772ee8248f2913ca-0066ece0e0 |
+---------------------------------------+------------+------------------------------------+

[root@controller swift]# openstack container list
+------------+
| Name       |
+------------+
| swift-test |
+------------+

[root@controller swift]# mkdir test
[root@controller swift]# echo 'hello word' > test/lll.txt

[root@controller swift]# openstack object create swift-test test/lll.txt 
+--------------+------------+----------------------------------+
| object       | container  | etag                             |
+--------------+------------+----------------------------------+
| test/lll.txt | swift-test | 4d2220fcf2abf3a9baac712bb93bd29c |
+--------------+------------+----------------------------------+

[root@controller swift]# openstack object list swift-test
+--------------+
| Name         |
+--------------+
| test/lll.txt |
+--------------+

[root@controller swift]# rm -rf test/

[root@controller swift]# openstack object save swift-test test/lll.txt
[root@controller swift]# ls test/
lll.txt
[root@controller swift]# cat test/lll.txt 
hello word
[root@controller swift]# 

切片式上传

[root@controller ~]# swift upload swift-test  -S 4096 cirros-0.5.1-x86_64-disk.img 

[root@controller ~]# openstack container list
+---------------------+
| Name                |
+---------------------+
| a                   |
| swift-test          |
| swift-test_segments |
+---------------------+
[root@controller ~]# openstack object   list swift-test_segments
+-----------------------------------------------------------------------+
| Name                                                                  |
+-----------------------------------------------------------------------+
| cirros-0.5.1-x86_64-disk.img/1726651615.838030/16338944/4096/00000000 |
| cirros-0.5.1-x86_64-disk.img/1726651615.838030/16338944/4096/00000001 |
| cirros-0.5.1-x86_64-disk.img/1726651615.838030/16338944/4096/00000002 |
| cirros-0.5.1-x86_64-disk.img/1726651615.838030/16338944/4096/00000003 |
| cirros-0.5.1-x86_64-disk.img/1726651615.838030/16338944/4096/00000004 |
| cirros-0.5.1-x86_64-disk.img/1726651615.838030/16338944/4096/00000005 |
| cirros-0.5.1-x86_64-disk.img/1726651615.838030/16338944/4096/00000006 |
省略
# 发现每个都是4096 4mb的分片
相关推荐
南宫乘风6 天前
OpenStack将运行的系统导出 QCOW2 镜像并导入阿里云
阿里云·云计算·openstack
学习向前冲8 天前
开源OpenStack
openstack
极客先躯18 天前
开源的云平台有哪些?
kubernetes·开源·openstack·cloudstack·云平台·docker swarm·opennebula
mqiqe19 天前
云计算Openstack Horizon
云计算·openstack·perl
zkyqss23 天前
OpenStack Yoga版安装笔记(十六)Openstack网络理解
笔记·openstack
mqiqe1 个月前
云计算Openstack Neutron
云计算·openstack·perl
mqiqe1 个月前
云计算Openstack Keystone
数据库·云计算·openstack
mqiqe1 个月前
云计算Openstack Cinder
云计算·php·openstack
mqiqe1 个月前
云计算Openstack Glance
云计算·openstack