一、前言
对象存储是一种以对象为中心的存储方式,将数据存储为对象而不是文件,在对象存储中,每个对象都有唯一的标识符,这个标识符是由系统自动生成的。与传统文件系统不同,对象存储中不需要使用文件夹或路径来查找对象,只需要使用对象的标识符即可。它具有高度可靠性、高扩展性和高性能等优点。对象存储作为一种低成本,近似无限容量的存储服务,在海量,异构存储方面应用广泛,各云厂商也都已上线各自的对象存储产品。
移动云的对象存储 产品叫EOS(Elastic Object Storage),是移动云为客户提供的一种海量空间的存储产品,具备高性能、高可靠、安全、低成本等特性,通过标准的S3接口提供非结构化数据(图片、音视频、文本等格式文件)的存储服务,满足用户在任何地方通过互联网对数据进行管理和访问的需求。
二、产品及使用
2.1、EOS特性
2.2、对象存储通用概念
- Bucket(存储桶) :是用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储桶。Bucket作为对象的载体,实现了对象的高效组织和管理,每个Bucket都是独立的命名空间,不仅确保了对象存储的有序性,也方便了数据的分类和检索,扁平化的结构设计去除了复杂的树形目录结构,使得所有对象处于同一逻辑层级,简化了数据的存取过程。存储桶具有各种配置属性,包括地域、访问权限、存储类型等。可以根据实际需求,创建不同类型的存储桶来存储数据。同一个存储桶的内部是扁平的,没有文件系统的目录等概念,但是可以借助于文件系统的概念模糊简化理解。对象存储是基于REST风格HTTP和HTTPS协议的服务,因此我们可以通过URL(Uniform Resource Locator)来定位访问资源。
Bucket不仅是存储单位,也是计费、权限控制和生命周期管理等多种高级功能的管理实体,这意味着用户可以通过设置Bucket的元数据来控制整个存储空间的政策,如数据保留时间、权限分配等,实现细粒度的数据治理。不同于传统的文件系统,Bucket具有无容量上限的特点,这使得我们无需担心存储空间的扩展问题,可以根据业务需求灵活调整存储规模。移动云的对象存储设置有三类桶存储类别,分别为:标准存储、温存储、冷存储,从而满足客户业务对存储性能、成本的不同诉求。
在对象存储中,桶名必须是全局唯一的且不能修改,即用户创建的桶不能与自己已创建的其他桶名称相同,也不能与同帐号、其他帐号及帐号下的所有IAM用户创建的桶名称相同。桶所属的区域在创建后也不能修改。每个桶在创建时都会生成默认的桶ACL(Access Control List,访问控制列表),桶ACL的每项包含了对被授权用户授予什么样的权限,如读取权限、写入权限等。用户只有对桶有相应的权限,才可以对桶进行操作,如创建、删除、显示、设置桶ACL等。
- 对象(Object):是对象存储中数据存储的基本单位,也被称为文件,而一个对象实际是一个文件的数据与其相关属性信息(元数据)的集合体。对象存储将数据大小分成一系列的块,然后将每个块包装成一个对象。每个块都具有自己的存储位置,并且可以独立于其他块进行读写操作。这使得对象存储可以支持大型数据文件的存储。用户上传至对象存储的数据都以对象的形式保存在桶中。通常,你可将对象等同于文件来进行管理,但是对象存储并没有文件系统中的文件和文件夹概念。为了使用户更方便进行管理数据,对象存储提供了一种方式模拟文件夹。通过在对象的名称中增加“/”,例如“test/123.jpg”。此时,“test”就被模拟成了一个文件夹,“123.jpg”则模拟成“test”文件夹下的文件名了,而实际上,对象名称(Key)仍然是“test/123.jpg”。对象包括了Key,Metadata,Data三部分:
- Key:键值(对象名),即对象的名称,是一组经过UTF-8编码的长度大于0且不超过1024的字符序列。一个桶里的每个对象必须拥有唯一的对象键值。在各语言 SDK 中,ObjectKey、Key 以及 ObjectName 是同一概念,均表示对 Object 执行相关操作时需要填写的 Object 名称。
- Metadata:元数据,即对象的描述信息,包括系统元数据和用户元数据,这些元数据以键值对(Key-Value)的形式被上传到对象存储中,元数据通常包括对象的名称和大小以及创建时间和修改时间等基本信息。存储元数据在查询对象时可以大大加快访问速度。系统元数据由对象存储自动产生,在处理对象数据时使用,包括Date,Content-length,Last-modify,Content-MD5等。用户元数据由用户在上传对象时指定,是用户自定义的对象描述信息。
- Data:数据,即文件的数据内容。对象存储可以使用冗余备份技术来保障数据的完整性和可靠性。每个数据块都会进行备份,如果有一个存储节点出现了问题,备份节点可以迅速取代它。这样,即使在某些数据块出现问题时,数据仍然可以被访问。对象存储的底层是分布式存储技术。这意味着数据会分散存储在多个存储节点上,这些节点将共同构成存储系统。这种分布式存储技术意味着对象存储系统可以在任意时刻增加或减少存储节点,而不需要对整个存储系统进行重新配置。
- 并行文件系统(Parallel File System):是对象存储服务(Object Storage Service,OBS)提供的一种经过优化的高性能文件系统,提供毫秒级别访问时延,以及TB/s级别带宽和百万级别的IOPS,能够快速处理高性能计算(HPC)工作负载。作为对象存储服务的子产品,并行文件系统支持用户按照标准的OBS接口读取数据。也支持通过部署在弹性云服务器中的PFS客户端(obsfs工具),按照POSIX文件语义读写数据;通过obsfs用户可以将创建的并行文件系统挂载到云端Linux服务器上,并能像操作本地文件系统一样对并行文件系统内的文件和目录进行在线处理,包括:创建和删除文件/目录,重命名文件/目录,修改写文件等操作。obsfs是对象存储服务(Object Storage Service,OBS)提供的一款基于FUSE的文件系统工具,用于将OBS并行文件系统挂载至Linux系统,让用户能够在本地像操作文件系统一样直接使用OBS海量的存储空间。对于原本使用本地文件系统存储数据的用户,如果希望把数据存储在OBS上但不改变数据的访问方式,可使用obsfs。
- 访问密钥(AK/SK):对象存储支持通过AK/SK认证方式进行认证鉴权,即使用Access Key ID(AK)/Secret Access Key(SK)加密的方法来验证某个请求发送者身份。当您使用对象存储提供的API进行二次开发并通过AK/SK认证方式完成认证鉴权时,需要按照对象存储定义的签名算法来计算签名并添加到请求中。对象存储支持使用永久AK/SK鉴权,也支持通过临时AK/SK和securitytoken进行认证鉴权。其中,Access Key Id(AK):是访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名,主用于标识用户。Secret Access Key(SK):与访问密钥ID结合使用的私有访问密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。
- 终端节点(Endpoint):是对象存储为每个区域对外服务的访问域名,即对外提供一个EOS的访问入口/访问代理,终端节点可以理解为对象存储在不同区域的区域域名,用于处理各自区域的访问请求,EOS 以 HTTP RESTful API 的形式对外提供服务。另外,对象存储会为每一个桶分配默认的访问域名。访问域名是桶在互联网中的域名地址,可应用于直接通过域名访问桶的场景,比如:云应用开发、数据分享等。
2.3、开源对象存储服务
开源对象存储服务是指基于开源技术,完全或部分开发源代码的、提供对象存储服务的存储系统。常见的开源对象存储服务有:
1)Ceph
Ceph 是一个广泛应用、高可用性、可扩展的分布式存储系统。它提供对象、块和文件三种类型的存储,支持 RESTful 和 S3 访问协议。Ceph 的优点在于高可用性、数据安全、容错能力和低成本等方面。Ceph 作为一种免费开源的对象存储服务,获得了广泛的应用。作为具有商业经验的解决方案提供商,Red Hat 也提供了专业的 Ceph 集成和实施服务。
2)OpenStack Swift
Swift 是 OpenStack 的核心组成部分之一,被设计成能够处理大规模的数据存储需求,它具备极高的容错性和扩展性,可以轻松地跨越多个数据中心部署,为用户提供了对象存储服务,主要用于存储非结构化数据,如图片、视频、文档等。Swift 针对多租户和高并发性进行了优化,是备份、web和移动内容以及任何其他可以无限增长的非结构化数据的理想选择。它提供了一个简单的、基于REST的API和支持 S3 API,具有高可用性和可扩展性等特点。OpenStack Swift产品被许多企业使用并成功应用在各种场景下,如大数据备份、金融访问数据、科学计算等。Swift通过一个称为“代理服务器”的组件来处理客户端请求,代理服务器负责将请求路由到正确的节点上。数据存储在由多个物理服务器组成的集群中,这些服务器按照一定的规则被划分为分区。为了保证数据的分布均匀,Swift采用了环状一致性哈希算法来确定数据的位置,更多参看swift官方文档。
3)Minio
Minio 是一个基于 Go 语言开发的分布式对象存储系统,支持 S3 协议,可以在本地环境和公有云环境中使用。Minio 具有易用性高、可扩展性好、性能优良等优点。它可以与 Kubernetes、Docker 等工具集成,支持 HDFS、GlusterFS 等其他存储后端。
三、对象存储管理
3.1、S3cmd 命令行工具
移动云对象存储 (EOS) 支持 S3cmd 命令行工具,详细说明可参考官方。用户可以使用该工具,对 EOS 进行各种操作,包括且不限于存储桶管理、上传对象、下载对象等。下载参看:github:s3tools、s3cmd,教程参看:s3tools使用说明;
yum install s3cmd -y #需要Python 2.6或更高版本。S3cmd version 2也与Python 3.x兼容
s3cmd --version #S3cmd默认读取用户主目录下的.s3cfg文件,可以通过-c指定其他配置文件
vi ~/.s3cfg[default]
access_key = *** # 修改为你的Access Key
secret_key = *** # 修改为你的Secret Key
host_base = ***.***.***.*** # 修改为你对象服务地址
host_bucket = ***.***.***.***/%(bucket) # 修改为你对象服务地址
use_https = False # 是否使用httpsbucket_location = cn # 创建bucket时的location
enable_multipart = True # 默认开启分段上传,超过15M大小的都会采用分段上传
encrypt = False # 关闭加密
human_readable_sizes = True # 开启后ls对象时以人类可读的方式K/M/G等展示
# 象大小信息
multipart_chunk_size_mb = 15 # 默认最大段大小,小于rgw的
# rgw_multipart_min_part_size配置项中
# 设置的大小无效
multipart_max_chunks = 10000 # 默认最大分段数,大于rgw的rgw_multipart_part_upload_limit配置项无效
signature_v2 = False # 是否启用V2签名
storage_class = ** # 存储级别#语法
s3cmd [options] COMMAND [parameters]#示例1:查看对象/桶
s3cmd --access_key <your-access-key> --secret_key <your-secret-key> ls
s3cmd ls [s3://BUCKET[/PREFIX]]
3.2、S3 Browser
S3 Browser是一个支持S3接口服务的免费windows客户端工具。用户可下载S3 Browser工具进行使用。工具介绍可参考官方网站介绍,网址为:https://s3browser.com/,文档参看:s3browser
3.3、Rclone数据迁移备份
Rclone是一款免费的云存储管理工具,能够像使用本地文件一样便捷的使用云存储,被誉为“云存储界的瑞士军刀”。你可以使用Rclone工具,对移动云对象存储EOS进行数据导入、数据同步、迁移备份等操作。
3.4、Restic 数据备份
Restic 是一款快速、高效、安全的跨平台备份工具。Restic 使用加密技术来保证您的数据安全性和完整性,可以将本地数据加密后传输到指定的存储。Restic 支持增量备份,可节省宝贵的存储空间。
3.5、云厂商的管理工具
移动云:eos-browser 是一款用于访问和管理对象存储 (Elatic Object Storage,EOS) 的可视化桌面工具,支持完整的桶管理和对象管理操作。
腾讯云:COSBrowser 是腾讯云对象存储 COS 推出的可视化界面工具,让您可以使用更简单的交互,轻松实现对 COS 资源的查看、传输和管理。