Openstack 对象存储服务

对象存储服务概述

OpenStack 对象存储是一个多租户对象存储系统。它具有高度可扩展性,可以通过RESTful HTTP API以低成本管理大量非结构化数据。

它包括以下组件:

代理服务器(swift-proxy-server)
接受 OpenStack 对象存储 API 和原始 HTTP 请求,以上传文件、修改元数据和创建容器。它还向 Web 浏览器提供文件或容器列表。为了提高性能,代理服务器可以使用通常与 memcache 一起部署的可选缓存。
帐户服务器(快速帐户服务器)
管理使用对象存储定义的帐户。
容器服务器(swift-container-server)
管理对象存储中容器或文件夹的映射。
对象服务器(swift-object-server)
管理存储节点上的实际对象,如文件。
各种周期性流程
在大型数据存储上执行内务管理任务。复制服务可确保群集的一致性和可用性。其他定期流程包括审核员、更新者和收割者。
中间件
处理身份验证,通常是OpenStack Identity。
快速客户端
使用户能够通过授权为管理员用户、经销商用户或 swift 用户的命令行客户端向 REST API 提交命令。
swift-init
初始化环形文件的构建、将守护程序名称作为参数并提供命令的脚本。
快速侦察
一种 cli 工具,用于检索有关 swift-recon 中间件收集的群集的各种指标和遥测信息。
快速环构建器
存储环构建和重新平衡实用程序。

对象存储及服务

控制节点操作:

对象存储服务不使用控制器节点上的 SQL 数据库。相反,它在每个存储节点上使用分布式 SQLite 数据库。

获取凭据以获取对仅限管理员的 CLI 命令的访问权限:admin

. admin_pass 

若要创建身份服务凭据,请完成以下步骤:

创建用户:swift

openstack user create --domain default --password SWIFT_PASS swift

将角色添加到用户:admin

openstack role add --project service --user swift admin
此命令不提供输出

创建服务实体:swift

openstack service create --name swift \
--description "OpenStack Object Storage" object-store

创建对象存储服务 API 端点:

openstack endpoint create --region RegionOne \
object-store public http://controller:8080/v1/AUTH_%\(tenant_id\)s

openstack endpoint create --region RegionOne \
object-store internal http://controller:8080/v1/AUTH_%\(tenant_id\)s

openstack endpoint create --region RegionOne \
object-store admin http://controller:8080/v1

安装和配置组件:

默认配置文件因发行版而异。您可能需要添加这些部分和选项,而不是修改现有的部分和选项。此外,配置代码段中的省略号 () 表示应保留的潜在默认配置选项。...

安装软件包:

yum install openstack-swift-proxy python-swiftclient \
python-keystoneclient python-keystonemiddleware \
memcached
完整的OpenStack环境已经包含其中一些软件包。

从对象存储源存储库获取代理服务配置文件:

curl -o /etc/swift/proxy-server.conf https://opendev.org/openstack/swift/raw/branch/master/etc/proxy-server.conf-sample

编辑文件并完成以下操作:/etc/swift/proxy-server.conf

在本节中,配置绑定端口、用户和配置目录:[DEFAULT]

[DEFAULT]
...
bind_port = 8080
user = swift
swift_dir = /etc/swift
不要更改模块的顺序。

在本节中,删除 和 模块并添加 和 模块:[pipeline:main]tempurltempauthauthtokenkeystoneauth

[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
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = swift
password = SWIFT_PASS
delay_auth_decision = True
替换为您在标识服务中为用户选择的密码。SWIFT_PASSswift

在本节中,配置位置:[filter:cache]memcached

[filter:cache]
use = egg:swift#memcache
...
memcache_servers = controller:11211

 对象存储节点操作:

注意:对象存储节点有两个,需要安装两台新的机器,安装完成之后需要添加两块新的硬盘,基本配置一样

具体基本配置参考上面

本节介绍如何安装和配置运行帐户、容器和对象服务的存储节点。为简单起见,此配置引用两个存储节点,每个节点包含两个空的本地块存储设备。说明使用 和 ,但您可以为特定节点替换不同的值。/dev/sdb/dev/sdc

在存储节点上安装和配置对象存储服务之前,必须准备存储设备。

在对象存储节点上执行这些步骤。

安装支持实用程序包:

yum install xfsprogs rsync

将 和 设备格式化为 XFS:/dev/sdb/dev/sdc

mkfs.xfs /dev/sdb
mkfs.xfs /dev/sdc

创建挂载点目录结构:

mkdir -p /srv/node/sdb

mkdir -p /srv/node/sdc

编辑文件并向其添加以下内容:/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

安装设备:

mount /srv/node/sdb

mount /srv/node/sdc

创建或编辑文件以包含以下内容:/etc/rsyncd.conf

uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = 本机IP地址

[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
该服务不需要身份验证,因此请考虑在生产环境中的专用网络上运行它。rsync

启动该服务并将其配置为在系统引导时启动:rsyncd

systemctl enable rsyncd.service

systemctl start rsyncd.service

安装和配置组件

默认配置文件因发行版而异。您可能需要添加这些部分和选项,而不是修改现有的部分和选项。此外,配置代码段中的省略号 () 表示应保留的潜在默认配置选项。...

安装软件包:

在对象存储节点上执行这些步骤。
yum install openstack-swift-account openstack-swift-container \
openstack-swift-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

编辑文件并完成以下操作:/etc/swift/account-server.conf

在本节中,配置绑定 IP 地址、绑定端口、用户、配置目录和挂载点目录:[DEFAULT]

[DEFAULT]
...
bind_ip = 本机IP地址
bind_port = 6202
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = True

在本节中,启用相应的模块:[pipeline:main]

[pipeline:main]
pipeline = healthcheck recon account-server

在部分中,配置侦察(米)缓存目录:[filter:recon]

[filter:recon]
use = egg:swift#recon
...
recon_cache_path = /var/cache/swift

编辑文件并完成以下操作:/etc/swift/container-server.conf

在本节中,配置绑定 IP 地址、绑定端口、用户、配置目录和挂载点目录:[DEFAULT]

[DEFAULT]
...
bind_ip = 本机IP地址
bind_port = 6201
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = True

在本节中,启用相应的模块:[pipeline:main]

[pipeline:main]
pipeline = healthcheck recon container-server

在部分中,配置侦察(米)缓存目录:[filter:recon]

[filter:recon]
use = egg:swift#recon
...
recon_cache_path = /var/cache/swift

编辑文件并完成以下操作:/etc/swift/object-server.conf

在本节中,配置绑定 IP 地址、绑定端口、用户、配置目录和挂载点目录:[DEFAULT]

[DEFAULT]
...
bind_ip = 本机IP配置
bind_port = 6200
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = True

在本节中,启用相应的模块:[pipeline:main]

[pipeline:main]
pipeline = healthcheck recon object-server

在本节中,配置侦察(计量)缓存和锁定目录:[filter:recon]

[filter:recon]
use = egg:swift#recon
...
recon_cache_path = /var/cache/swift
recon_lock_path = /var/lock

确保挂载点目录结构的正确所有权:

chown -R swift:swift /srv/node

创建目录并确保其正确所有权:recon

mkdir -p /var/cache/swift

chown -R root:swift /var/cache/swift

chmod -R 775 /var/cache/swift
切换到控制节点

切换到目录。/etc/swift

创建基本文件:account.builder

swift-ring-builder account.builder create 10 3 1
此命令不提供输出。

将每个对象存储节点添加到环中:

swift-ring-builder account.builder add \
--region 1 --zone 1 --ip 对象存储一的IP --port 6202 --device sdb --weight 100
swift-ring-builder account.builder add \
--region 1 --zone 1 --ip 对象存储一的IP --port 6202 --device sdc --weight 100
swift-ring-builder account.builder add \
--region 1 --zone 2 --ip 对象存储二的IP --port 6202 --device sdb --weight 100
swift-ring-builder account.builder add \
--region 1 --zone 2 --ip 对象存储二的IP --port 6202 --device sdc --weight 100

验证戒指内容:

swift-ring-builder account.builder

重新平衡戒指:

swift-ring-builder account.builder rebalance

容器服务器使用容器环来维护对象列表。但是,它不跟踪对象位置。

  1. 切换到目录。/etc/swift

  2. 创建基本文件:container.builder
swift-ring-builder container.builder create 10 3 1
此命令不提供输出。

将每个对象存储节点添加到环中:

swift-ring-builder container.builder add \
--region 1 --zone 1 --ip 对象存储一的IP --port 6201 --device sdb --weight 100
swift-ring-builder container.builder add \
--region 1 --zone 1 --ip 对象存储一的IP --port 6201 --device sdc --weight 100
swift-ring-builder container.builder add \
--region 1 --zone 2 --ip 对象存储二的IP --port 6201 --device sdb --weight 100
swift-ring-builder container.builder add \
--region 1 --zone 2 --ip 对象存储二的IP --port 6201 --device sdc --weight 100

验证戒指内容:

swift-ring-builder container.builder

重新平衡戒指:

swift-ring-builder container.builder rebalance

对象服务器使用对象环来维护本地设备上的对象位置列表。

  1. 切换到目录。/etc/swift

  2. 创建基本文件:object.builder
swift-ring-builder object.builder create 10 3 1
此命令不提供输出。

将每个对象存储节点添加到环中:

swift-ring-builder object.builder add \
--region 1 --zone 1 --ip 对象存储一IP --port 6200 --device sdb --weight 100
swift-ring-builder object.builder add \
--region 1 --zone 1 --ip 对象存储一IP --port 6200 --device sdc --weight 100
swift-ring-builder object.builder add \
--region 1 --zone 2 --ip 对象存储二IP --port 6200 --device sdb --weight 100
swift-ring-builder object.builder add \
--region 1 --zone 2 --ip 对象存储二IP --port 6200 --device sdc --weight 100

验证戒指内容:

swift-ring-builder object.builder

重新平衡戒指:

swift-ring-builder object.builder rebalance

从对象存储源存储库获取文件:/etc/swift/swift.conf

在控制节点操作
curl -o /etc/swift/swift.conf \
https://opendev.org/openstack/swift/raw/branch/master/etc/swift.conf-sample

编辑文件并完成以下操作:/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

将文件复制到每个对象存储节点和运行代理服务的任何其他节点上的目录中。swift.conf/etc/swift,还有.gz文件

scp *.gz 对象存储IP一:/etc/swift/
scp *.gz 对象存储IP二:/etc/swift/
scp swift.conf 对象存储一:/etc/swift/
scp swift.conf 对象存储二:/etc/swift/

在所有节点上,确保配置目录的正确所有权:

chown -R root:swift /etc/swift

在控制器节点和运行代理服务的任何其他节点上,启动对象存储代理服务(包括其依赖项),并将它们配置为在系统引导时启动:

systemctl enable openstack-swift-proxy.service memcached.service

systemctl start openstack-swift-proxy.service memcached.service

在对象存储一,二节点上,启动对象存储服务,并将其配置为在系统引导时启动:

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

显示服务状态:

swift stat

               Account: AUTH_267be903352c4e1baf6c8b32141cacd0
            Containers: 0
               Objects: 0
                 Bytes: 0
       X-Put-Timestamp: 1653481019.44586
           X-Timestamp: 1653481019.44586
            X-Trans-Id: tx42ed21c9d8744c1cb1719-00628e1e3b
          Content-Type: text/plain; charset=utf-8
X-Openstack-Request-Id: tx42ed21c9d8744c1cb1719-00628e1e3b
如果验证出现以下问题:

分别查看用户和组还有api断电然后给他删除重新创建:

openstack user list

openstack service list

openstack endpoint list

删除swift的用户和组还有api端点重新创建:

openstack user delete ID号

openstack service delete ID号

openstack endpoint delete ID号

在重启openstack-swift-proxy.service memcached.service 文件

systemctl restart openstack-swift-proxy.service memcached.service
重新输入swift stat 验证

创建容器1 容器:

openstack container create container1

将测试文件上传到 container1 容器:

touch FILE
openstack object create container1 FILE

将 FILE 替换为要上传到 container1 容器的本地文件的名称。

列出容器 1 容器中的文件:

openstack object list container1

从 container1 容器下载测试文件:

openstack object save container1 FILE
将 FILE 替换为上传到 container1 容器的文件的名称。
此命令不提供输出。

在控制节点创建一个容器:

openstack container create glance

查看glance容器状态:

swift stat glance


               Account: AUTH_267be903352c4e1baf6c8b32141cacd0
             Container: glance
               Objects: 0
                 Bytes: 0
              Read ACL:
             Write ACL:
               Sync To:
              Sync Key:
         Accept-Ranges: bytes
      X-Storage-Policy: Policy-0
         Last-Modified: Thu, 26 May 2022 11:42:04 GMT
           X-Timestamp: 1653565323.63718
            X-Trans-Id: tx9135fb062ab942e295f3d-00628f683c
          Content-Type: text/plain; charset=utf-8
X-Openstack-Request-Id: tx9135fb062ab942e295f3d-00628f683c

进行分片储存:

将 cirros-0.4.0-x86_64-disk.img 镜像文件 分片上传到 glance 容器:

swift upload glance -S 10000000 cirros-0.4.0-x86_64-disk.img
swift stat glance cirros-0.4.0-x86_64-disk.img

查看数据片:

swift list glance_segments

前往WEB端 查看:

后端存储:

在控制节点修改/etc/glance/glance-api.conf 文件:

[glance_store]
···
filesystem_store_datadir = /var/lib/glance/images/
default_store = swift
stores=glance.store.filesystem.Store,glance.store.swift.Store
swift_store_auth_address=http://controller:5000/v3
swift_store_create_container_on_put=True
swift_store_region=RegionOne
swift_store_endpoint_type=internalURL
swift_store_container=glance
swift_store_user=glance
swift_store_key=000000
swift_store_multi_tenant=True
swift_store_admin_tenants=service

保存退出,重启所有服务:

systemctl restart openstack-*

上传镜像:

glance image-create --name "test_glance" --disk-format qcow2 --container-format bare --progress --file /root/cirros-0.4.0-x86_64-disk.img

查看结果:

openstack container list

进网页查看:

版权声明:
作者:小李
链接:https://xianshengli.cc/openstack-%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8%e6%9c%8d%e5%8a%a1/
来源:先生不吃香菜
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Openstack 对象存储服务
对象存储服务概述 OpenStack 对象存储是一个多租户对象存储系统。它具有高度可扩展性,可以通过RESTful HTTP API以低成本管理大量非结构化数据。 它包括以下组……
文章目录
关闭
目 录