正文
swift对象存储安装
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
对象存储服务概览
OpenStack对象存储是一个多租户的对象存储系统,它支持大规模扩展,可以以低成本来管理大型的非结构化数据,通过RESTful HTTP 应用程序接口。
它包含下列组件:
代理服务器(swift-proxy-server)
接收OpenStack对象存储API和纯粹的HTTP请求以上传文件,更改元数据,以及创建容器。它可服务于在web浏览器下显示文件和容器列表。为了改进性能,代理服务可以使用可选的缓存,通常部署的是memcache。
账户服务器 (swift-account-server)
管理由对象存储定义的账户。
容器服务器 (swift-container-server)
管理容器或文件夹的映射,对象存储内部。
对象服务器 (swift-object-server)
在存储节点上管理实际的对象,比如:文件。
各种定期进程
为了驾驭大型数据存储的任务,复制服务需要在集群内确保一致性和可用性,其他定期进程有审计,更新和reaper。
WSGI中间件
掌控认证,使用OpenStack认证服务。
swift 客户端
用户可以通过此命令行客户端来向REST API提交命令,授权的用户角色可以是管理员用户,经销商用户,或者是swift用户。
swift-init
初始化环链文件生成的脚本,将守护进程名称当作参数并提供命令。归档于http://docs.openstack.org/developer/swift/admin_guide.html#managing-services。
swift-recon
一个被用于检索多种关于一个集群的度量和计量信息的命令行接口工具已被swift-recon中间件采集。
swift-ring-builder
存储环链建立并重平衡实用程序。归档于http://docs.openstack.org/developer/swift/admin_guide.html#managing-the-rings。
本章节描述如何安装和配置在存储节点上处理account,container和object服务请求的代理服务。为了简单起见,本指南在控制节点安装和配置代理服务。不过,你可以在任何与存储节点网络联通的节点上运行代理服务。另外,你可以在多个节点安装和配置代理服务提高性能和冗余。更多信息,参考Deployment Guide <http://docs.openstack.org/developer/swift/deployment_guide.html>
先决条件
代理服务依赖于诸如身份认证服务所提供的认证和授权机制。但是,与其他服务不同,它也提供了一个内部机制可以在没有任何其他OpenStack服务的情况下运行。不过为了简单起见,本指南引用:doc:`keystone`中的身份认证服务。在你配置对象存储服务前,你必须创建服务凭证和API端点。
本节适用于Red Hat Enterprise Linux 7和CentOS 7。
一、安装并配置控制器节点
1.1 对象存储服务不使用控制节点上的SQL数据库。而是使用在每个存储节点的分布式SQLite数据库。
1 获得 admin 凭证来获取只有管理员能执行的命令的访问权限:
$ . admin-openrc |
2 要创建身份认证服务的凭证,完成这些步骤:
创建 swift 用户:
[root@controller2 ~]# openstack user create --domain default --password-prompt swift User Password: Repeat User Password: +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | e9121a829e7348b2ae74b0be3956344c | | name | swift | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+ |
给 swift 用户添加 admin 角色:
$ openstack role add --project service --user swift admin |
创建 swift 服务条目:
$ openstack service create --name swift \ --description "OpenStack Object Storage" object-store +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Object Storage | | enabled | True | | id | 75ef509da2c340499d454ae96a2c5c34 | | name | swift | | type | object-store | +-------------+----------------------------------+ |
3 创建对象存储服务 API 端点:
[root@controller2 ~]# openstack endpoint create --region RegionOne \ > object-store public http://controller2:8080/v1/AUTH_%\(project_id\)s +--------------+------------------------------------------------+ | Field | Value | +--------------+------------------------------------------------+ | enabled | True | | id | 1c18900ffb5043c4b212ecea17184846 | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 8706e144a14048c185ced55739459257 | | service_name | swift | | service_type | object-store | | url | http://controller2:8080/v1/AUTH_%(project_id)s | +--------------+------------------------------------------------+ [root@controller2 ~]# openstack endpoint create --region RegionOne \ > object-store internal http://controller2:8080/v1/AUTH_%\(project_id\)s +--------------+------------------------------------------------+ | Field | Value | +--------------+------------------------------------------------+ | enabled | True | | id | d2c28e09ef8d432c8af9b58f2bf89a94 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | 8706e144a14048c185ced55739459257 | | service_name | swift | | service_type | object-store | | url | http://controller2:8080/v1/AUTH_%(project_id)s | +--------------+------------------------------------------------+ [root@controller2 ~]# openstack endpoint create --region RegionOne \ > object-store admin http://controller2:8080/v1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 725a4aa3078d4db09581ba5be5c76891 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 8706e144a14048c185ced55739459257 | | service_name | swift | | service_type | object-store | | url | http://controller2:8080/v1 | +--------------+----------------------------------+ |
1.2 安全并配置组件
注解
默认配置文件在各发行版本中可能不同。你可能需要添加这些部分,选项而不是修改已经存在的部分和选项。另外,在配置片段中的省略号(...)表示默认的配置选项你应该保留。
1 安装软件包
# yum install openstack-swift-proxy python-swiftclient \ python-keystoneclient python-keystonemiddleware \ memcached |
注解
完整的 OpenStack 环境已经包含了这些包的其中一部分。
2 从对象存储的仓库源中获取代理服务的配置文件:
# curl -o /etc/swift/proxy-server.conf https://opendev.org/openstack/swift/raw/branch/master/etc/proxy-server.conf-sample |
3 编辑文件 /etc/swift/proxy-server.conf 并完成如下动作:
在 [DEFAULT] 部分,配置绑定端口,用户和配置目录。
[DEFAULT] ... bind_port = 8080 user = swift swift_dir = /etc/swift |
在``[pipeline:main]``部分,删除``tempurl``和``tempauth``模块并增加``authtoken``和``keystoneauth``模块
[pipeline:main] pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server |
注解:不要改变模块的顺序。
在 [app:proxy-server] 部分,启动自动账户创建。
[app:proxy-server] use = egg:swift#proxy ... account_autocreate = True |
在 [filter:keystoneauth] 部分,配置操作员角色。
[filter:keystoneauth] use = egg:swift#keystoneauth ... operator_roles = admin,user |
在 [filter:authtoken] 部分,配置认证服务访问。
[filter:authtoken] paste.filter_factory = keystonemiddleware.auth_token:filter_factory ... www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_id = default user_domain_id = default project_name = service username = swift password = SWIFT_PASS delay_auth_decision = True |
使用你在身份认证服务中选择的 swift 用户密码来替换 SWIFT_PASS 。
注解:注释或者删除掉在 [filter:authtoken] 部分的所有其他的内容。
在 [filter:cache] 部分,配置 memcached 的位置:
[filter:cache] use = egg:swift#memcache ... memcache_servers = controller:11211 |
二、安装和配置存储节点
本章节描述怎样为操作帐号,容器和对象服务安装和配置存储节点。为简单起见,这里配置两个存储节点,每个包含两个空本地块存储设备。这个向导用的是 /dev/sdb``和 ``/dev/sdc,但是你可以用不同的值代替您的特定节点。
尽管对象存储通过 :term:`extended attributes (xattr)`支持所有文件系统,但测试表明使用 :term:`XFS`时性能最好可靠性最高。 更多关于横向扩展你环境的信息,参考 `Deployment Guide <http://docs.openstack.org/developer/swift/deployment_guide.html>`_。
1.1 先决条件
在你在存储节点上安装和配置对象存储服务之前,你必须准备好存储设备。
注解:在每个存储节点上执行这些步骤。
1 安装支持的工具包:
# yum 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,logbufs=8 0 2 /dev/sdc /srv/node/sdc xfs noatime,nodiratime,logbufs=8 0 2 |
5 挂载设备:
# mount /srv/node/sdb # mount /srv/node/sdc |
6 创建并编辑``/etc/rsyncd.conf``文件并包含以下内容:
uid = swift gid = swift log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid address = MANAGEMENT_INTERFACE_IP_ADDRESS [account] max connections = 2 path = /srv/node/ read only = False lock file = /var/lock/account.lock [container] max connections = 2 path = /srv/node/ read only = False lock file = /var/lock/container.lock [object] max connections = 2 path = /srv/node/ read only = False lock file = /var/lock/object.lock |
替换 ``MANAGEMENT_INTERFACE_IP_ADDRESS`为存储节点管理网络的IP地址。
注解:``rsync``服务不需要认证,所以考虑将它安装在私有网络的环境中
7 启动 “rsyncd” 服务和配置它随系统启动:
# systemctl enable rsyncd.service # systemctl start rsyncd.service |
1.2 安全并配置组件
注解:默认配置文件在各发行版本中可能不同。你可能需要添加这些部分,选项而不是修改已经存在的部分和选项。另外,在配置片段中的省略号(...)表示默认的配置选项你应该保留。
注解:在每个存储节点上执行这些步骤。
1 安装软件包:
# yum install openstack-swift-account openstack-swift-container \ openstack-swift-object |
2 从对象存储源仓库中获取accounting, container以及object服务配置文件
# curl -o /etc/swift/account-server.conf https://opendev.org/openstack/swift/raw/branch/master/etc/account-server.conf-sample # curl -o /etc/swift/container-server.conf https://opendev.org/openstack/swift/raw/branch/master/etc/container-server.conf-sample # curl -o /etc/swift/object-server.conf https://opendev.org/openstack/swift/raw/branch/master/etc/object-server.conf-sample |
3 编辑 /etc/swift/account-server.conf 文件并完成下面操作:
在``[DEFAULT]`` 部分,配置绑定IP地址,绑定端口,用户,配置目录和挂载目录:
[DEFAULT] ... bind_ip = MANAGEMENT_INTERFACE_IP_ADDRESS bind_port = 6202 user = swift swift_dir = /etc/swift devices = /srv/node mount_check = True |
替换 ``MANAGEMENT_INTERFACE_IP_ADDRESS`为存储节点管理网络的IP地址。
在``[pipeline:main]``部分,启用合适的模块:
[pipeline:main] pipeline = healthcheck recon account-server |
注解: 更多关于启用其他模块的额外功能的信息,请参考`Deployment Guide <http://docs.openstack.org/developer/swift/deployment_guide.html>`__。
在``[filter:recon]``部分,配置recon (meters)缓存目录:
[filter:recon] use = egg:swift#recon ... recon_cache_path = /var/cache/swift |
4 编辑``/etc/swift/container-server.conf``文件并完成下列操作:
在``[DEFAULT]`` 部分,配置绑定IP地址,绑定端口,用户,配置目录和挂载目录
[DEFAULT] ... bind_ip = MANAGEMENT_INTERFACE_IP_ADDRESS bind_port = 6201 user = swift swift_dir = /etc/swift devices = /srv/node mount_check = True |
替换 ``MANAGEMENT_INTERFACE_IP_ADDRESS`为存储节点管理网络的IP地址。
在``[pipeline:main]``部分,启用合适的模块:
[pipeline:main] pipeline = healthcheck recon container-server |
注解 更多关于启用其他模块的额外功能的信息,请参考`Deployment Guide <http://docs.openstack.org/developer/swift/deployment_guide.html>`__。
在``[filter:recon]``部分,配置recon (meters)缓存目录:
[filter:recon] use = egg:swift#recon ... recon_cache_path = /var/cache/swift |
5 编辑``/etc/swift/object-server.conf``文件并完成下列操作:
在``[DEFAULT]`` 部分,配置绑定IP地址,绑定端口,用户,配置目录和挂载目录:
[DEFAULT] ... bind_ip = MANAGEMENT_INTERFACE_IP_ADDRESS bind_port = 6200 user = swift swift_dir = /etc/swift devices = /srv/node mount_check = True |
替换 ``MANAGEMENT_INTERFACE_IP_ADDRESS`为存储节点管理网络的IP地址。
在``[pipeline:main]``部分,启用合适的模块:
[pipeline:main] pipeline = healthcheck recon object-server |
注解 :更多关于启用其他模块的额外功能的信息,请参考`Deployment Guide <http://docs.openstack.org/developer/swift/deployment_guide.html>`__。
在``[filter:recon]``部分,配置recon(meters)缓存和lock目录:
[filter:recon] use = egg:swift#recon ... recon_cache_path = /var/cache/swift recon_lock_path = /var/lock |
6 确认挂载点目录结构是否有合适的所有权:
# chown -R swift:swift /srv/node |
7 创建 “recon” 目录和确保它有合适的所有权:
# mkdir -p /var/cache/swift # chown -R root:swift /var/cache/swift # chmod -R 775 /var/cache/swift |
三、创建,分发并初始化rings
3.1 创建账户ring
帐户服务器使用帐户 ring 来维护一个容器的列表。
1 切换到 ``/etc/swift``目录。
2 创建基本 account.builder 文件:
# swift-ring-builder account.builder create 10 3 1 |
3 添加每个节点到 ring 中:
# swift-ring-builder account.builder \ add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6202 \ --device DEVICE_NAME --weight DEVICE_WEIGHT |
将 STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS 替换为存储节点管理网络的IP地址。将 DEVICE_NAME``替换为同一个存储节点存储设备名称。例如,使用 :ref:`swift-storage` 中的第一个存储节点的 ``/dev/sdb 存储设备,大小为100:
# swift-ring-builder account.builder add \ --region 1 --zone 1 --ip 10.0.0.51 --port 6202 --device sdb --weight 100 |
在每个存储节点上面重复执行这个命令。在这个例子的架构中,使用该命令的四个变量:
# swift-ring-builder account.builder add \ --region 1 --zone 1 --ip 10.0.0.51 --port 6202 --device sdb --weight 100 Device d0r1z1-10.0.0.51:6202R10.0.0.51:6202/sdb_"" with 100.0 weight got id 0 # swift-ring-builder account.builder add \ --region 1 --zone 1 --ip 10.0.0.51 --port 6202 --device sdc --weight 100 Device d1r1z2-10.0.0.51:6202R10.0.0.51:6202/sdc_"" with 100.0 weight got id 1 # swift-ring-builder account.builder add \ --region 1 --zone 2 --ip 10.0.0.52 --port 6202 --device sdb --weight 100 Device d2r1z3-10.0.0.52:6202R10.0.0.52:6202/sdb_"" with 100.0 weight got id 2 # swift-ring-builder account.builder add \ --region 1 --zone 2 --ip 10.0.0.52 --port 6202 --device sdc --weight 100 Device d3r1z4-10.0.0.52:6202R10.0.0.52:6202/sdc_"" with 100.0 weight got id 3 |
4 验证 ring 的内容:
# swift-ring-builder account.builder account.builder, build version 4 1024 partitions, 3.000000 replicas, 1 regions, 2 zones, 4 devices, 100.00 balance, 0.00 dispersion The minimum number of hours before a partition can be reassigned is 1 The overload factor is 0.00% (0.000000) Devices: id region zone ip address port replication ip replication port name weight partitions balance meta 0 1 1 10.0.0.51 6202 10.0.0.51 6202 sdb 100.00 0 -100.00 1 1 1 10.0.0.51 6202 10.0.0.51 6202 sdc 100.00 0 -100.00 2 1 2 10.0.0.52 6202 10.0.0.52 6202 sdb 100.00 0 -100.00 3 1 2 10.0.0.52 6202 10.0.0.52 6202 sdc 100.00 0 -100.00 |
5 平衡 ring:
# swift-ring-builder account.builder rebalance Reassigned 1024 (100.00%) partitions. Balance is now 0.00. Dispersion is now 0.00 |
3.2 创建容器ring
容器服务器使用容器环来维护对象的列表。但是,它不跟踪对象的位置。
1. 切换到 ``/etc/swift``目录。
2 创建基本``container.builder``文件:
# swift-ring-builder container.builder create 10 3 1 |
3 添加每个节点到 ring 中:
# swift-ring-builder container.builder \ add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6201 \ --device DEVICE_NAME --weight DEVICE_WEIGHT |
将 STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS 替换为存储节点管理网络的IP地址。将 DEVICE_NAME``替换为同一个存储节点存储设备名称。例如,使用 :ref:`swift-storage` 中的第一个存储节点的 ``/dev/sdb 存储设备,大小为100:
# swift-ring-builder container.builder add \ --region 1 --zone 1 --ip 10.0.0.51 --port 6201 --device sdb --weight 100 |
在每个存储节点上面重复执行这个命令。在这个例子的架构中,使用该命令的四个变量:
# swift-ring-builder container.builder add \ --region 1 --zone 1 --ip 10.0.0.51 --port 6201 --device sdb --weight 100 Device d0r1z1-10.0.0.51:6201R10.0.0.51:6201/sdb_"" with 100.0 weight got id 0 # swift-ring-builder container.builder add \ --region 1 --zone 1 --ip 10.0.0.51 --port 6201 --device sdc --weight 100 Device d1r1z2-10.0.0.51:6201R10.0.0.51:6201/sdc_"" with 100.0 weight got id 1 # swift-ring-builder container.builder add \ --region 1 --zone 2 --ip 10.0.0.52 --port 6201 --device sdb --weight 100 Device d2r1z3-10.0.0.52:6201R10.0.0.52:6201/sdb_"" with 100.0 weight got id 2 # swift-ring-builder container.builder add \ --region 1 --zone 2 --ip 10.0.0.52 --port 6201 --device sdc --weight 100 Device d3r1z4-10.0.0.52:6201R10.0.0.52:6201/sdc_"" with 100.0 weight got id 3 |
4 验证 ring 的内容:
# swift-ring-builder container.builder container.builder, build version 4 1024 partitions, 3.000000 replicas, 1 regions, 2 zones, 4 devices, 100.00 balance, 0.00 dispersion The minimum number of hours before a partition can be reassigned is 1 The overload factor is 0.00% (0.000000) Devices: id region zone ip address port replication ip replication port name weight partitions balance meta 0 1 1 10.0.0.51 6201 10.0.0.51 6201 sdb 100.00 0 -100.00 1 1 1 10.0.0.51 6201 10.0.0.51 6201 sdc 100.00 0 -100.00 2 1 2 10.0.0.52 6201 10.0.0.52 6201 sdb 100.00 0 -100.00 3 1 2 10.0.0.52 6201 10.0.0.52 6201 sdc 100.00 0 -100.00 |
5 平衡 ring:
# swift-ring-builder container.builder rebalance Reassigned 1024 (100.00%) partitions. Balance is now 0.00. Dispersion is now 0.00 |
3.3 创建对象ring
对象服务器使用对象环来维护对象在本地设备上的位置列表。
1 切换到 ``/etc/swift``目录。
2 创建基本``object.builder``文件:
swift-ring-builder object.builder create 10 3 1 |
3 添加每个节点到 ring 中:
# swift-ring-builder object.builder \ add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6200 \ --device DEVICE_NAME --weight DEVICE_WEIGHT |
将 STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS 替换为存储节点管理网络的IP地址。将 DEVICE_NAME``替换为同一个存储节点存储设备名称。例如,使用 :ref:`swift-storage` 中的第一个存储节点的 ``/dev/sdb 存储设备,大小为100:
# swift-ring-builder object.builder add \ --region 1 --zone 1 --ip 10.0.0.51 --port 6200 --device sdb --weight 100 |
在每个存储节点上面重复执行这个命令。在这个例子的架构中,使用该命令的四个变量:
# swift-ring-builder object.builder add \ --region 1 --zone 1 --ip 10.0.0.51 --port 6200 --device sdb --weight 100 Device d0r1z1-10.0.0.51:6200R10.0.0.51:6200/sdb_"" with 100.0 weight got id 0 # swift-ring-builder object.builder add \ --region 1 --zone 1 --ip 10.0.0.51 --port 6200 --device sdc --weight 100 Device d1r1z2-10.0.0.51:6200R10.0.0.51:6200/sdc_"" with 100.0 weight got id 1 # swift-ring-builder object.builder add \ --region 1 --zone 2 --ip 10.0.0.52 --port 6200 --device sdb --weight 100 Device d2r1z3-10.0.0.52:6200R10.0.0.52:6200/sdb_"" with 100.0 weight got id 2 # swift-ring-builder object.builder add \ --region 1 --zone 2 --ip 10.0.0.52 --port 6200 --device sdc --weight 100 Device d3r1z4-10.0.0.52:6200R10.0.0.52:6200/sdc_"" with 100.0 weight got id 3 |
4 验证 ring 的内容:
# swift-ring-builder object.builder object.builder, build version 4 1024 partitions, 3.000000 replicas, 1 regions, 2 zones, 4 devices, 100.00 balance, 0.00 dispersion The minimum number of hours before a partition can be reassigned is 1 The overload factor is 0.00% (0.000000) Devices: id region zone ip address port replication ip replication port name weight partitions balance meta 0 1 1 10.0.0.51 6200 10.0.0.51 6200 sdb 100.00 0 -100.00 1 1 1 10.0.0.51 6200 10.0.0.51 6200 sdc 100.00 0 -100.00 2 1 2 10.0.0.52 6200 10.0.0.52 6200 sdb 100.00 0 -100.00 3 1 2 10.0.0.52 6200 10.0.0.52 6200 sdc 100.00 |
5 平衡 ring:
# swift-ring-builder object.builder rebalance Reassigned 1024 (100.00%) partitions. Balance is now 0.00. Dispersion is now 0.00 |
3.4分发环配置文件
复制``account.ring.gz``,container.ring.gz``和``object.ring.gz 文件到每个存储节点和其他运行了代理服务的额外节点的 /etc/swift 目录。
四、完成安装
注解:默认配置文件在各发行版本中可能不同。你可能需要添加这些部分,选项而不是修改已经存在的部分和选项。另外,在配置片段中的省略号(...)表示默认的配置选项你应该保留。
1 从对象存储源仓库中获取 /etc/swift/swift.conf 文件:
# curl -o /etc/swift/swift.conf \ https://opendev.org/openstack/swift/raw/branch/master/etc/swift.conf-sample |
2 编辑 /etc/swift/swift.conf 文件并完成以下动作:
在``[swift-hash]``部分,为你的环境配置哈希路径前缀和后缀:
[swift-hash] ... swift_hash_path_suffix = HASH_PATH_SUFFIX swift_hash_path_prefix = HASH_PATH_PREFIX |
将其中的 HASH_PATH_PREFIX和 HASH_PATH_SUFFIX替换为唯一的值。警告:这些值要保密,并且不要修改或丢失。
在``[storage-policy:0]``部分,配置默认存储策略:
[storage-policy:0] ... name = Policy-0 default = yes |
3 复制``swift.conf`` 文件到每个存储节点和其他允许了代理服务的额外节点的 /etc/swift 目录。
4 在所有节点上,确认配置文件目录是否有合适的所有权:
# chown -R root:swift /etc/swift |
5 在控制节点和其他运行了代理服务的节点上,启动对象存储代理服务及其依赖服务,并将它们配置为随系统启动:
# systemctl enable openstack-swift-proxy.service memcached.service # systemctl start openstack-swift-proxy.service memcached.service |
6 在存储节点上,启动对象存储服务,并将其设置为随系统启动:
# systemctl enable openstack-swift-account.service openstack-swift-account-auditor.service \ openstack-swift-account-reaper.service openstack-swift-account-replicator.service # systemctl start openstack-swift-account.service openstack-swift-account-auditor.service \ openstack-swift-account-reaper.service openstack-swift-account-replicator.service # systemctl enable openstack-swift-container.service \ openstack-swift-container-auditor.service openstack-swift-container-replicator.service \ openstack-swift-container-updater.service # systemctl start openstack-swift-container.service \ openstack-swift-container-auditor.service openstack-swift-container-replicator.service \ openstack-swift-container-updater.service # systemctl enable openstack-swift-object.service openstack-swift-object-auditor.service \ openstack-swift-object-replicator.service openstack-swift-object-updater.service # systemctl start openstack-swift-object.service openstack-swift-object-auditor.service \ openstack-swift-object-replicator.service openstack-swift-object-updater.service |
五、验证操作
验证对象存储服务的操作。
注解
在控制节点上执行这些步骤。
警告
如果其中的一项或多项步骤没有正确执行,请在``/var/log/audit/audit.log``文件中检查SELinux的关于禁止``swift``过程的信息。如果该文件存在的话,将``/srv/node``目录下``swift_data_t`` type, object_r role 和the system_u user关于安全等级的信息设置成最低安全等级(s0)
# chcon -R system_u:object_r:swift_data_t:s0 /srv/node |
1 导入``demo``凭证
$ . demo-openrc |
2 显示服务状态:
$ swift stat Account: AUTH_ed0b60bf607743088218b0a533d5943f Containers: 0 Objects: 0 Bytes: 0 Containers in policy "policy-0": 0 Objects in policy "policy-0": 0 Bytes in policy "policy-0": 0 X-Account-Project-Domain-Id: default X-Timestamp: 1444143887.71539 X-Trans-Id: tx1396aeaf17254e94beb34-0056143bde Content-Type: text/plain; charset=utf-8 Accept-Ranges: bytes |
3 创建``container1``容器
$ openstack container create container1 +---------------------------------------+------------+------------------------------------+ | account | container | x-trans-id | +---------------------------------------+------------+------------------------------------+ | AUTH_ed0b60bf607743088218b0a533d5943f | container1 | tx8c4034dc306c44dd8cd68-0056f00a4a | +---------------------------------------+------------+------------------------------------+ |
4 上传一个测试文件到``container1``容器
$ openstack object create container1 FILE +--------+------------+----------------------------------+ | object | container | etag | +--------+------------+----------------------------------+ | FILE | container1 | ee1eca47dc88f4879d8a229cc70a07c6 | +--------+------------+----------------------------------+ |
5 列出``container1``容器里的所有文件
$ openstack object list container1 +------+ | Name | +------+ | FILE | +------+ |
6 从``container1``容器里下载一个测试文件
$ openstack object save container1 FILE |