Swift对象存储

1.认识swift

(1)Account(账号)

处于安全型考虑,使用swift都必须有一个账号。Swauth提供账号权限认证服务。

(2)Container

组织管理数据,不同的是Container不能嵌套。数据都以Object的形式存放在容器中。

(3)Object

对象是对象存储中一个基本的存储单元。一个对象包含两部分,数据和元数据。元数据包含对象所属的容器名。

用户上传的对象最大是5GB,最小是0。对象的元数据不能超过90个key-value对象属性,并且这些属性的总大小不能超过4K。在swift系统中,集群被划分成对各去,区可以是一个磁盘、服务器、一整个机柜乃至数据中心,每个区域中都由若干个节点。swift将对象存储在节点之上,每个节点都是由多个硬盘组成,保证了对象在多个节点上有备份。

swift构筑在比较便宜的标准硬件存储基础设施之上,无需采用磁盘冗余阵列。Swift主要用于存储虚拟机镜像,大多数作用于Glance的后端存储。在实际的运用中,典型运用是网盘系统。

swift不同于传统的文件系统和实时的市局存储系统,适用于存储、获取一些静态的、永久性的数据,并在需要的时候进行更新。

Swift集群主要包含认证节点、代理节点和存储节点。认证节点主要负责对用户的请求授权,只有通过授权的用户才能操作Swift,在Opensatck中swfit是它的子项目之一,所以一般用Keystone服务作为Swift服务的认证服务。代理节点主要用于和用户进行交互,接受用户的请求并且给用户做出相应。

2.对象存储的运维

[root@controller ~]# source  /etc/keystone/admin-openrc.sh

(1)查看Swift详细信息(可以查看整体、对象、容器的信息)

[root@controller ~]# swift  stat -v        //查看swift详细信息
[root@controller ~]# swift  stat test   //查看容器的详细信息

(2)列出容器或者容器的对象

[root@controller ~]# swift list       //列出容器列表
[root@controller ~]# openstack container list
+-------+
| Name  |
+-------+
| test  |
| test2 |
+-------+
[root@controller ~]# swift list test     //列出某个容器中的对象列表

(3)创建容器

[root@controller ~]# swift post  test2     //创建一个容器
[root@controller ~]# openstack container create test2
+---------------------------------------+-----------+------------------------------------+
| account                               | container | x-trans-id                         |
+---------------------------------------+-----------+------------------------------------+
| AUTH_197b84baaeab46ed86ffb13b5d5eb07a | test2     | tx7b20a5e69c464193a020c-006437679a |
+---------------------------------------+-----------+------------------------------------+
[root@controller ~]# mkdir  file    //在外部创建一个对象文件夹
[root@controller ~]# swift upload  test2 file/        //上传对象文件夹到容器中
[root@controller ~]# touch  123.txt           //创建一个数据文件
[root@controller ~]# swift upload  test2 file/ 123.txt         //将这个数据文件上传到某个容器中的对象文件目录下
[root@controller ~]# openstack object create test2  123.txt
+---------+-----------+----------------------------------+
| object  | container | etag                             |
+---------+-----------+----------------------------------+
| 123.txt | test2     | d41d8cd98f00b204e9800998ecf8427e |
+---------+-----------+----------------------------------+
[root@controller ~]# openstack object create test2/file 123.txt
+---------+------------+----------------------------------+
| object  | container  | etag                             |
+---------+------------+----------------------------------+
| 123.txt | test2/file | d41d8cd98f00b204e9800998ecf8427e |
+---------+------------+----------------------------------+

(4)下载容器中的文件

[root@controller ~]# swift download test2 file/ 123.txt      //下载某个容器下的对象文件目录中的数据
[root@controller ~]# openstack container save   //对单个空的容器保存
[root@controller ~]# openstack object save test2/file 123.txt   //将对象保存到本地
[root@controller ~]# ll
total 7192288
-rw-r--r--. 1 root root          0 Apr 13 02:55 123.txt