9、对象存储服务

9.1、安装并配置控制器节点

9.1.1、创建服务凭证和API端点

9.1.1.1、获得 admin 凭证来获取只有管理员能执行的命令的访问权限:

$ . admin-openrc

9.1.1.2、要创建身份认证服务的凭证,完成这些步骤:

创建 swift 用户:

$ openstack user create --domain default --password-prompt swift

设置密码:P@ssw0rd


给 swift 用户添加 admin 角色:

$ openstack role add --project service --user swift admin

注解:这个命令执行后没有输出。


创建 swift 服务条目:

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

Openstack Mitaka安装手顺(9)对象存储服务_swift


9.1.1.3、创建对象存储服务 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


控制节点防火墙开放端口:8080

# firewall-cmd --permanent --add-port=8080/tcp

# firewall-cmd --reload


确认端口开放成功

# firewall-cmd --list-all


9.1.2、安全并配置组件

9.1.2.1、安装软件包:

# yum install -y openstack-swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached


9.1.2.2、从对象存储的仓库源中获取代理服务的配置文件:

# curl -o /etc/swift/proxy-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/proxy-server.conf-sample?h=stable/mitaka

注解:本次没有下载到这个文件,就用安装后的默认配置文件进行配置了。


9.1.2.3、编辑文件 vi /etc/swift/proxy-server.conf 并完成如下动作:

在 [DEFAULT] 部分,配置绑定端口,用户和配置目录。

bind_port = 8080

user = swift

swift_dir = /etc/swift

Openstack Mitaka安装手顺(9)对象存储服务_swift_02

注解:默认有配置,只增加了swift_dir这一行


在``[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

以上内容为官方文档配置,经过本次实测,可能是没有下载配置文件而是使用默认配置的原因,也可能是安装组件不全的原因,按照上面配置始终服务无法启动,并且报错!

经过查看/var/log/messages内容发现如下报错(注意红框内容):

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_03


经过比对是versioned_writes没有找到,可能是没有安装,也可能是模块顺序不对。因为是第一次部署,所以很粗暴的把这个模块从配置去掉,然后再次重启服务。

但是再次报错了,再次有新的模块未找到,然后继续删减模块,最终配置如下图所示:

Openstack Mitaka安装手顺(9)对象存储服务_swift_04

注解:注释掉默认配置,同时不要改变配置中的模块顺序。


在 [app:proxy-server] 部分,启动自动账户创建。

[app:proxy-server]

use = egg:swift#proxy

account_autocreate = True

Openstack Mitaka安装手顺(9)对象存储服务_swift_05

注解:默认已存在


在 [filter:keystoneauth] 部分,配置操作员角色。

[filter:keystoneauth]

use = egg:swift#keystoneauth

operator_roles = admin,user

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_06

注解:本部分为新增,和上面的[filter:keystone]配置有重合部分,暂时不清楚关系就新增了。


在 [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 = P@ssw0rd

delay_auth_decision = True

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_07

注解:注释或者删除掉在 [filter:authtoken] 部分的所有其他的内容。


在 [filter:cache] 部分,配置 memcached 的位置:

[filter:cache]

use = egg:swift#memcache

memcache_servers = controller:11211

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_08

注解:默认有一个相同配置注释掉


9.2、安装和配置存储节点

本章节描述怎样为操作帐号,容器和对象服务安装和配置存储节点。

环境所限,这里配置一个存储节点(就是计算节点),包含三个空本地块存储设备。这个向导用的是 /dev/sdc、 /dev/sdd、/dev/sde

9.2.1、先决条件

9.2.1.1、安装支持的工具包:

# yum install -y xfsprogs rsync


9.2.1.2、使用XFS格式化三个设备:

# mkfs.xfs /dev/sdc

# mkfs.xfs /dev/sdd

# mkfs.xfs /dev/sde


9.2.1.3、创建挂载点目录结构:

# mkdir -p /srv/node/sdc

# mkdir -p /srv/node/sdd

# mkdir -p /srv/node/sde


9.2.1.4、编辑``/etc/fstab``文件并添加以下内容:

/dev/sdc /srv/node/sdc xfs noatime,nodiratime,nobarrier,logbufs=8 0 2

/dev/sdd /srv/node/sdd xfs noatime,nodiratime,nobarrier,logbufs=8 0 2

/dev/sde /srv/node/sde xfs noatime,nodiratime,nobarrier,logbufs=8 0 2

Openstack Mitaka安装手顺(9)对象存储服务_swift_09


9.2.1.5、挂载设备:

# mount /srv/node/sdc

# mount /srv/node/sdd

# mount /srv/node/sde

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_10


9.2.1.6、创建并编辑 vi /etc/rsyncd.conf 文件并包含以下内容:

uid = swift

gid = swift

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

address = 111.111.111.202


[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


address为存储节点管理网络的IP地址。

 

注解:``rsync``服务不需要认证,所以考虑将它安装在私有网络的环境中

9.2.1.7、启动 “rsyncd” 服务和配置它随系统启动:

# systemctl enable rsyncd

# systemctl start rsyncd

# systemctl status rsyncd


9.2.2、安全并配置组件

注解:在每个存储节点上执行这些步骤。


9.2.2.1、安装软件包:

# yum install -y openstack-swift-account openstack-swift-container openstack-swift-object


9.2.2.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

本次操作未从网上下载配置文件,使用默认配置文件。


9.2.2.3、编辑 vi /etc/swift/account-server.conf 文件并完成下面操作:

在``[DEFAULT]`` 部分,配置绑定IP地址,绑定端口,用户,配置目录和挂载目录:

bind_ip = 111.111.111.202

bind_port = 6002

user = swift

swift_dir = /etc/swift

devices = /srv/node

mount_check = True

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_11

bind_ip为存储节点管理网络的IP地址。


在 [pipeline:main] 部分,启用合适的模块:

[pipeline:main]

pipeline = healthcheck recon account-server


上面为官方文档配置,也是启动服务报错有模块找不到,删除healthcheck模块后就启动成功了,配置如下图所示:

[pipeline:main]

pipeline = recon account-server

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_12


在 [filter:recon] 部分,配置recon (meters)缓存目录:

[filter:recon]

use = egg:swift#recon

recon_cache_path = /var/cache/swift



9.2.2.4、编辑 vi /etc/swift/container-server.conf 文件并完成下列操作:

在``[DEFAULT]`` 部分,配置绑定IP地址,绑定端口,用户,配置目录和挂载目录:

bind_ip = 111.111.111.202

bind_port = 6001

user = swift

swift_dir = /etc/swift

devices = /srv/node

mount_check = True

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_13

bind_ip为存储节点管理网络的IP地址。


在 [pipeline:main] 部分,启用合适的模块:

[pipeline:main]

pipeline = healthcheck recon container-server


上面为官方文档配置,也是启动服务报错有模块找不到,删除healthcheck模块后就启动成功了,配置如下图所示:

[pipeline:main]

pipeline = recon container-server


在 [filter:recon] 部分,配置recon (meters)缓存目录:

[filter:recon]

use = egg:swift#recon

recon_cache_path = /var/cache/swift


9.2.2.5、编辑 vi /etc/swift/object-server.conf 文件并完成下列操作:

在 [DEFAULT] 部分,配置绑定IP地址,绑定端口,用户,配置目录和挂载目录:

bind_ip = 111.111.111.202

bind_port = 6000

user = swift

swift_dir = /etc/swift

devices = /srv/node

mount_check = True

Openstack Mitaka安装手顺(9)对象存储服务_swift_14

bind_ip为存储节点管理网络的IP地址。


在 [pipeline:main] 部分,启用合适的模块:

[pipeline:main]

pipeline = healthcheck recon object-server


上面为官方文档配置,也是启动服务报错有模块找不到,删除healthcheck模块后就启动成功了,配置如下图所示:

[pipeline:main]

pipeline = recon object-server

Openstack Mitaka安装手顺(9)对象存储服务_swift_15


在 [filter:recon] 部分,配置recon(meters)缓存和lock目录:

[filter:recon]

use = egg:swift#recon

recon_cache_path = /var/cache/swift

recon_lock_path = /var/lock


9.2.2.6、确认挂载点目录结构是否有合适的所有权:

# chown -R swift:swift /srv/node


9.2.2.7、创建 “recon” 目录和确保它有合适的所有权:

# mkdir -p /var/cache/swift

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

# chmod -R 775 /var/cache/swift


计算节点防火墙开放端口:6000、6001、6002

firewall-cmd --permanent --add-port=6000/tcp

firewall-cmd --permanent --add-port=6001/tcp

firewall-cmd --permanent --add-port=6002/tcp

firewall-cmd --reload


确认端口开放成功

# firewall-cmd --list-all

***********************************分割线***********************************

报错排错:

报错一:

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_16

Openstack Mitaka安装手顺(9)对象存储服务_swift_17

Openstack Mitaka安装手顺(9)对象存储服务_swift_18


这三个服务全部有报错:

openstack-swift-account-replicator      Can't find itself 127.0.0.1 with port 6202 in ring file, not replicating

openstack-swift-container-replicator    Can't find itself 127.0.0.1 with port 6201 in ring file, not replicating

openstack-swift-object-replicator        Can't find itself 127.0.0.1 with port 6200 in ring file, not replicating


经过排错:

分别将三个配置文件/etc/swift/account-server.conf、/etc/swift/container-server.conf、/etc/swift/object-server.con中的

默认bind_ip = 127.0.0.1 bind_port = 6202、默认bind_ip = 127.0.0.1 bind_port = 6201、默认bind_ip = 127.0.0.1 bind_port = 6200

这个配置注释掉,然后重启三个服务就可以了。如下图所示是吧account-server.conf 的示例:

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_19


报错二:

Openstack Mitaka安装手顺(9)对象存储服务_swift_20

上面这个报错从内容看是sde这块盘存在问题,马上想起来本次计算节点开始只准备了2块虚拟硬盘做对象存储,但是后来报错显示需要2块以上,所以临时加了一块虚拟硬盘就是sde。

然后所有配置都做了,就是漏了 9.2.2.6 这一步没做:chown -R swift:swift /srv/node,经过查看如下图所示权限缺失:

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_21

重新执行chown -R swift:swift /srv/node即可:

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_22

最后记得重启openstack-swift-object-replicator服务:

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_23

***********************************分割线***********************************


9.3、创建,分发并初始化rings

注解:在控制节点上执行这些步骤。

9.3.1、创建账户ring

帐户服务器使用帐户 ring 来维护一个容器的列表。

9.3.1.1、切换到 /etc/swift 目录。


9.3.1.2、创建基本 account.builder 文件:

# swift-ring-builder account.builder create 10 3 1

Openstack Mitaka安装手顺(9)对象存储服务_swift_24

注解:这个命令执行后没有输出。


9.3.1.3、添加每个节点到 ring 中:

# swift-ring-builder account.builder \

  add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6002 \

  --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 6002 --device sdb --weight 100


在每个存储节点上面重复执行这个命令。在这个例子的架构中,使用该命令的三个变量:

# swift-ring-builder account.builder add \

  --region 1 --zone 1 --ip 111.111.111.202 --port 6002 --device sdc --weight 100

 

# swift-ring-builder account.builder add \

  --region 1 --zone 2 --ip 111.111.111.202 --port 6002 --device sdd --weight 100


# swift-ring-builder account.builder add \

  --region 1 --zone 3 --ip 111.111.111.202 --port 6002 --device sde --weight 100

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_25

注意:本次操作是在控制节点和存储节点上都执行了!!!!! 


9.3.1.4、验证 ring 的内容:

# swift-ring-builder account.builder

Openstack Mitaka安装手顺(9)对象存储服务_swift_26


9.3.1.5、平衡 ring:

# swift-ring-builder account.builder rebalance

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_27


9.3.2、创建容器ring

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

9.3.2.1、切换到 /etc/swift``目录。

9.3.2.2、创建基本``container.builder``文件:

# swift-ring-builder container.builder create 10 3 1

Openstack Mitaka安装手顺(9)对象存储服务_swift_28

注解:这个命令执行后没有输出。


9.3.2.3、添加每个节点到 ring 中:

# swift-ring-builder container.builder \

  add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6001 \

  --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 6001 --device sdb --weight 100


在每个存储节点上面重复执行这个命令。在这个例子的架构中,使用该命令的三个变量:

# swift-ring-builder container.builder add \

  --region 1 --zone 1 --ip 111.111.111.202 --port 6001 --device sdc --weight 100

 

# swift-ring-builder container.builder add \

  --region 1 --zone 2 --ip 111.111.111.202 --port 6001 --device sdd --weight 100

 

# swift-ring-builder container.builder add \

  --region 1 --zone 3 --ip 111.111.111.202 --port 6001 --device sde --weight 100

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_29


9.3.2.4、验证 ring 的内容:

# swift-ring-builder container.builder

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_30


9.3.2.5、平衡 ring:

# swift-ring-builder container.builder rebalance

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_31


9.3.3、创建对象ring

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


9.3.3.1、切换到 ``/etc/swift``目录。


9.3.3.2、创建基本``object.builder``文件:

# swift-ring-builder object.builder create 10 3 1

注解:这个命令执行后没有输出。


9.3.3.3、添加每个节点到 ring 中:

# swift-ring-builder object.builder \

  add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6000 \

  --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 6000 --device sdb --weight 100


在每个存储节点上面重复执行这个命令。在这个例子的架构中,使用该命令的三个变量:

# swift-ring-builder object.builder add \

  --region 1 --zone 1 --ip 111.111.111.202 --port 6000 --device sdc --weight 100


# swift-ring-builder object.builder add \

  --region 1 --zone 2 --ip 111.111.111.202 --port 6000 --device sdd --weight 100


# swift-ring-builder object.builder add \

  --region 1 --zone 3 --ip 111.111.111.202 --port 6000 --device sde --weight 100

Openstack Mitaka安装手顺(9)对象存储服务_swift_32


9.3.3.4、验证 ring 的内容:

# swift-ring-builder object.builder

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_33


9.3.3.5、平衡 ring:

# swift-ring-builder object.builder rebalance

Openstack Mitaka安装手顺(9)对象存储服务_swift_34


9.3.4、分发环配置文件(本次测试就一个存储节点,而且我把控制节点和存储节点都执行了命令)

复制``account.ring.gz``,container.ring.gz``和``object.ring.gz 文件到每个存储节点和其他运行了代理服务的额外节点的 /etc/swift 目录。


9.4、完成安装

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

# curl -o /etc/swift/swift.conf \

  https://git.openstack.org/cgit/openstack/swift/plain/etc/swift.conf-sample?h=stable/mitaka

注解:本次没有下载,直接使用默认配置文件


9.4.2、编辑 vi /etc/swift/swift.conf 文件并完成以下动作:

在``[swift-hash]``部分,为你的环境配置哈希路径前缀和后缀:

[swift-hash]

...

swift_hash_path_suffix = LEO_TEST_SUFFIX

swift_hash_path_prefix = LEO_TEST_PREFIX


将其中的 HASH_PATH_PREFIX和 HASH_PATH_SUFFIX替换为唯一的值。

警告:这些值要保密,并且不要修改或丢失。


在``[storage-policy:0]``部分,配置默认存储策略:

[storage-policy:0]

name = Policy-0

default = yes



9.4.3、复制``swift.conf`` 文件到每个存储节点和其他允许了代理服务的额外节点的 /etc/swift 目录。

注解:本次操作已经在两个节点都配置好了。

20200313:最终还是把计算节点的三个builder文件全部删除,然后把控制节点的ring文件传过来了。


9.4.4、在所有节点上,确认配置文件目录是否有合适的所有权:

# chown -R root:swift /etc/swift


9.4.5、在控制节点和其他运行了代理服务的节点上,启动对象存储代理服务及其依赖服务,并将它们配置为随系统启动:

# systemctl enable openstack-swift-proxy memcached

# systemctl start openstack-swift-proxy memcached

# systemctl status openstack-swift-proxy memcached

Openstack Mitaka安装手顺(9)对象存储服务_swift_35

注解:本次只在控制节点运行了代理服务,计算节点没有运行。


9.4.6、在存储节点上,启动对象存储服务,并将其设置为随系统启动:

# systemctl enable openstack-swift-account openstack-swift-account-auditor \

  openstack-swift-account-reaper openstack-swift-account-replicator 

# systemctl start openstack-swift-account openstack-swift-account-auditor \

  openstack-swift-account-reaper openstack-swift-account-replicator

# systemctl status openstack-swift-account openstack-swift-account-auditor \

  openstack-swift-account-reaper openstack-swift-account-replicator


# systemctl enable openstack-swift-container openstack-swift-container-auditor \

  openstack-swift-container-replicator openstack-swift-container-updater

# systemctl start openstack-swift-container openstack-swift-container-auditor \

  openstack-swift-container-replicator openstack-swift-container-updater

# systemctl status openstack-swift-container openstack-swift-container-auditor \

  openstack-swift-container-replicator openstack-swift-container-updater


# systemctl enable openstack-swift-object openstack-swift-object-auditor \

  openstack-swift-object-replicator openstack-swift-object-updater

# systemctl start openstack-swift-object openstack-swift-object-auditor \

  openstack-swift-object-replicator openstack-swift-object-updater

# systemctl status openstack-swift-object openstack-swift-object-auditor \

  openstack-swift-object-replicator openstack-swift-object-updater


9.5、验证操作

9.5.1、导入``demo``凭证

$ . demo-openrc


9.5.2、显示服务状态:

$ swift stat

有报错:

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_36


使用命令查看报错:

swift stat --debug

Openstack Mitaka安装手顺(9)对象存储服务_swift_37

20200313官方文档可能存在问题,需要重新寻找部署教程。暂停实验环境。

第二天啥都没干,重启后就好了。。。

Openstack Mitaka安装手顺(9)对象存储服务_对象存储服务_38


9.5.3、创建``container1``容器

$ openstack container create container1

9.5.4、上传一个测试文件到``container1``容器

$ openstack object create container1 FILE


9.5.5、列出``container1``容器里的所有文件

$ openstack object list container1


9.5.6、从``container1``容器里下载一个测试文件

$ openstack object save container1 FILE

注解:这个命令执行后没有输出。