OpenStack对象存储是一个多租户的分布式对象存储系统,支持大规模扩展,能够以低成本管理海量非结构化数据,并通过RESTful HTTP API进行操作。
一、OpenStack对象存储组件
其主要组件包括:
1、代理服务器 (swift-proxy-server):接收OpenStack对象存储API请求及纯HTTP请求,用于上传文件、修改元数据和创建容器。同时,它也可以在Web浏览器中显示文件和容器列表。为了提高性能,代理服务可以使用缓存,通常部署memcache。
2、账户服务器 (swift-account-server):管理与对象存储相关的账户信息。
3、容器服务器 (swift-container-server):负责管理容器(或文件夹)与对象存储之间的映射关系。
4、对象服务器 (swift-object-server):在存储节点上管理实际的对象,如文件数据。
5、定期进程:包括复制服务、审计、更新和清理等任务,这些进程确保集群内数据的一致性和高可用性。
6、WSGI中间件:用于处理认证服务,确保系统的安全性,通常与OpenStack认证服务集成。
7、Swift客户端:用户可以通过命令行客户端与REST API交互,授权用户可以是管理员、经销商或Swift用户。
8、swift-init:脚本工具,用于初始化环链文件,生成相应的守护进程并提供命令执行。
9、swift-recon:命令行工具,用于检索集群的度量和计量信息,数据由swift-recon中间件收集。
10、swift-ring-builder:用于构建和重平衡存储环链的实用程序。
二、安装并配置控制器节点
1、先决条件
代理服务依赖于诸如身份认证服务所提供的认证和授权机制。但是与其他服务不同,它也提供了一个内部机制可以在没有任何其他OpenStack服务的情况下运行。不过为了简单起见,本指南引用:doc:`keystone`中的身份认证服务。在你配置对象存储服务前,你必须创建服务凭证和API端点。
注:对象存储服务不使用控制节点上的SQL数据库。而是使用在每个存储节点的分布式SQLite数据库。
(1)获得 admin 凭证来获取只有管理员能执行的命令的访问权限: . admin-openrc
(2)要创建身份认证服务的凭证,完成这些步骤:
创建 swift 用户:
给 swift 用户添加 admin 角色:openstack role add –project service –user swift admin
注:这个命令执行后没有输出。
创建 swift 服务条目:
(3)创建对象存储服务 API 端点:
2、安全并配置组件
注:默认配置文件在各发行版本中可能不同。你可能需要添加这些部分,选项而不是修改已经存在的部分和选项。另外,在配置片段中的省略号(…)表示默认的配置选项你应该保留。
(1)安装软件包:
注:完整的 OpenStack 环境已经包含了这些包的其中一部分。
(2)创建 /etc/swift 目录。
(3)从对象存储的仓库源中获取代理服务的配置文件:
curl -o /etc/swift/proxy-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/proxy-server.conf-sample?h=stable/mitaka
(4)编辑文件 /etc/swift/proxy-server.conf 并完成如下动作:
在 [DEFAULT] 部分,配置绑定端口,用户和配置目录。
在[pipeline:main]部分,删除tempurl和tempauth模块并增加authtoken和keystoneauth模块
注:不要改变模块的顺序。
在 [app:proxy-server] 部分,启动自动账户创建。
在 [filter:keystoneauth] 部分,配置操作员角色。
在 [filter:authtoken] 部分,配置认证服务访问。
使用你在身份认证服务中选择的 swift 用户密码来替换 SWIFT_PASS 。
注:注释或者删除掉在 [filter:authtoken] 部分的所有其他的内容。
在 [filter:cache] 部分,配置 memcached 的位置:
三、安装和配置存储节点
1、先决条件
在你在存储节点上安装和配置对象存储服务之前,你必须准备好存储设备。
注:在每个存储节点上执行这些步骤。
(1)安装支持的工具包:apt-get install xfsprogs rsync
(2)使用XFS格式化/dev/sdb和/dev/sdc设备:
mkfs.xfs /dev/sdb mkfs.xfs /dev/sdc
(3)创建挂载点目录结构:
mkdir -p /srv/node/sdb mkdir -p /srv/node/sdc
(4)编辑“/etc/fstab“文件并添加以下内容:
/dev/sdb /srv/node/sdb xfs noatime,nodiratime,nobarrier,logbufs=8 0 2 /dev/sdc /srv/node/sdc xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
(5)挂载设备:
mount /srv/node/sdb mount /srv/node/sdc
(6)创建并编辑“/etc/rsyncd.conf“文件并包含以下内容:
替换 MANAGEMENT_INTERFACE_IP_ADDRESS为存储节点管理网络的IP地址。
注:rsync服务不需要认证,所以考虑将它安装在私有网络的环境中
(7)编辑 /etc/default/rsync 文件和启用 rsync 服务:RSYNC_ENABLE=true
8. 启动rsync服务:service rsync start
2、安全并配置组件
注:默认配置文件在各发行版本中可能不同。你可能需要添加这些部分,选项而不是修改已经存在的部分和选项。另外,在配置片段中的省略号(…)表示默认的配置选项你应该保留。
注:在每个存储节点上执行这些步骤。
(1)安装软件包:apt-get install swift swift-account swift-container swift-object
(2)从对象存储源仓库中获取accounting, container以及object服务配置文件
# curl -o /etc/swift/account-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/account-server.conf-sample?h=stable/mitaka # curl -o /etc/swift/container-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/container-server.conf-sample?h=stable/mitaka # curl -o /etc/swift/object-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/object-server.conf-sample?h=stable/mitaka
(3)编辑 /etc/swift/account-server.conf 文件并完成下面操作:
在[DEFAULT]部分,配置绑定IP地址,绑定端口,用户,配置目录和挂载目录:
替换 MANAGEMENT_INTERFACE_IP_ADDRESS为存储节点管理网络的IP地址。
在[pipeline:main]部分,启用合适的模块:
在[filter:recon]部分,配置recon (meters)缓存目录:
(4)编辑“/etc/swift/container-server.conf“文件并完成下列操作:
在[DEFAULT] 部分,配置绑定IP地址,绑定端口,用户,配置目录和挂载目录:
替换 MANAGEMENT_INTERFACE_IP_ADDRESS为存储节点管理网络的IP地址。
在[pipeline:main]部分,启用合适的模块:
在[filter:recon]部分,配置recon (meters)缓存目录:
(5)编辑/etc/swift/object-server.conf文件并完成下列操作:
在[DEFAULT]部分,配置绑定IP地址,绑定端口,用户,配置目录和挂载目录:
替换 “MANAGEMENT_INTERFACE_IP_ADDRESS`为存储节点管理网络的IP地址。
在[pipeline:main]部分,启用合适的模块:
在[filter:recon]部分,配置recon(meters)缓存和lock目录:
(6)确认挂载点目录结构是否有合适的所有权: chown -R swift:swift /srv/node
(7)创建 “recon” 目录和确保它有合适的所有权:
四、创建、分发并初始化rings
1、创建账户ring
帐户服务器使用帐户 ring 来维护一个容器的列表。
(1)切换到 /etc/swift目录。
(2)创建基本 account.builder 文件:swift-ring-builder account.builder create 10 3 1
注:这个命令执行后没有输出。
(3)添加每个节点到 ring 中:
将 STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS 替换为存储节点管理网络的IP地址。将 DEVICE_NAME“替换为同一个存储节点存储设备名称。例如,使用 :ref:swift-storage 中的第一个存储节点的 /dev/sdb 存储设备,大小为100:
在每个存储节点上面重复执行这个命令。在这个例子的架构中,使用该命令的四个变量:
(4)验证 ring 的内容:
(5)平衡 ring:
2、创建容器ring
容器服务器使用容器环来维护对象的列表。但是,它不跟踪对象的位置。
(1)切换到 /etc/swift目录。
(2)创建基本container.builder文件:swift-ring-builder container.builder create 10 3 1
注:这个命令执行后没有输出。
(3)添加每个节点到 ring 中:
将 STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS 替换为存储节点管理网络的IP地址。将 DEVICE_NAME“替换为同一个存储节点存储设备名称。例如,使用 :ref:swift-storage中的第一个存储节点的 /dev/sdb 存储设备,大小为100:
在每个存储节点上面重复执行这个命令。在这个例子的架构中,使用该命令的四个变量:
(4)验证 ring 的内容:
(5)平衡 ring:
3、创建对象ring
对象服务器使用对象环来维护对象在本地设备上的位置列表。
(1)切换到 /etc/swift目录。
(2)创建基本object.builder文件:swift-ring-builder object.builder create 10 3 1
注:这个命令执行后没有输出。
(3)添加每个节点到 ring 中:
将 STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS 替换为存储节点管理网络的IP地址。将 DEVICE_NAME“替换为同一个存储节点存储设备名称。例如,使用 :ref:`swift-storage` 中的第一个存储节点的 “/dev/sdb 存储设备,大小为100:
在每个存储节点上面重复执行这个命令。在这个例子的架构中,使用该命令的四个变量:
(4)验证 ring 的内容:
(5)平衡 ring:
分发环配置文件
复制account.ring.gz,container.ring.gz和object.ring.gz 文件到每个存储节点和其他运行了代理服务的额外节点的 /etc/swift 目录。
五、完成安装
1、从对象存储源仓库中获取 /etc/swift/swift.conf 文件:
2、编辑 /etc/swift/swift.conf 文件并完成以下动作:
在[swift-hash]部分,为你的环境配置哈希路径前缀和后缀:
将其中的 HASH_PATH_PREFIX和 HASH_PATH_SUFFIX替换为唯一的值。
注:这些值要保密,并且不要修改或丢失。
在[storage-policy:0]部分,配置默认存储策略:
3、复制swift.conf文件到每个存储节点和其他允许了代理服务的额外节点的 /etc/swift 目录。
4、在所有节点上,确认配置文件目录是否有合适的所有权:chown -R root:swift /etc/swift
5、在控制节点和其他运行了代理服务的节点上,重启对象存储代理服务及其依赖的服务:
service memcached restart service swift-proxy restart
6、在存储节点上启动对象存储服务:swift-init all start
注:存储节点允许很多对象存储服务,:command:swift-init命令使得它们更好管理。你可以忽略那些不在存储节点上运行服务的错误。
六、验证操作
1、导入“demo“凭证:. demo-openrc
2、显示服务状态:
3、创建“container1“容器
4、上传一个测试文件到“container1“容器
用本地要上传到 container1 容器的文件名替换 FILE。
5、列出“container1“容器里的所有文件
6、从container1容器里下载一个测试文件:openstack object save container1 FILE。用上传到 container1 容器的文件名替换 FILE。