我尝试构建OpenStack Swift(Kilo版本)

首先

我想要搭建OpenStack Swift,并按照官方文档进行了搭建,但却无法成功。无法搭建成功的原因是,官方文档中没有说明container-reconciler需要使用memcached,并且我尝试在只有根设备的虚拟机上进行搭建。

关于memcached,存在以下问题:
容器调节器需要在存储节点中使用memcache。

基于这一点,我将重新概述构建的步骤如下。对于那些可以使用官方文档中的步骤而无需修改的部分,我将省略掉这些步骤。

形成

操作系统为Ubuntu 14.04.3,并且使用的Swift是Kilo版本。但是奇怪的是,Ubuntu Kilo版本的Swift不是2.3而是2.2.2。这是因为Canonical的软件包维护人员懒散吗?此外,身份验证使用的是同样的Kilo版本Keystone。很抱歉,由于构建Keystone的步骤非常冗长,所以不在此提供。

由于在不同的虚拟机上构建了account-server/container-server和object-server,因此系统的配置如下。同时,我们构建了一个区域(Region)和五个区域(Zone)。每个区域有一个account-server/container-server虚拟机和一个object-server虚拟机,共计使用两个虚拟机。

ComponentNum of VMsIP addressproxy-server1192.168.0.2account-server & container-server5192.168.0.[3-7]object-server5192.168.0.[8-12]keystone1192.168.0.13

在Keystone中为Swift用户创建端点并注册。

为了使用Kilo版本,基本上需要使用v3 API和python-openstackclient。

在创建Swift用户、将Swift用户与admin角色关联以及创建Swift服务方面,应按照官方文档的指示进行。

为了配置先决条件

注册 API 端点

$ openstack endpoint create \
  --publicurl 'http://192.168.0.2:8080/v1/AUTH_%(tenant_id)s' \
  --internalurl 'http://192.168.0.2:8080/v1/AUTH_%(tenant_id)s' \
  --adminurl http://192.168.0.2:8080 \
  --region RegionOne \
  object-store
+--------------+----------------------------------------------+
| Field        | Value                                        |
+--------------+----------------------------------------------+
| adminurl     | http://192.168.0.2:8080/                      |
| id           | af534fb8b7ff40a6acf725437c586ebe             |
| internalurl  | http://192.168.0.2:8080/v1/AUTH_%(tenant_id)s |
| publicurl    | http://192.168.0.2:8080/v1/AUTH_%(tenant_id)s |
| region       | RegionOne                                    |
| service_id   | 75ef509da2c340499d454ae96a2c5c34             |
| service_name | swift                                        |
| service_type | object-store                                 |
+--------------+----------------------------------------------+

在这里需要注意的是Endpoint的地址。官方文档中提到了controller。这意味着Swift的proxy-server是运行在controller上的。如果将proxy-server构建为另一台服务器,或者在前端使用负载均衡器,则在该Endpoint中填写的地址应该是proxy-server的地址或负载均衡器的IP地址。

以上所述的是使用代理服务器的IP地址进行设置。

代理服务器的设置

软件包的安装和从GitHub获取示例配置文件要遵循官方文档中的说明。

安装和配置控制节点组件。

根据获得的样本编辑/etc/swift/proxy-server.conf。[DEFAULT]、[pipeline:main]、[app:proxy-server]、[filter:keystoneauth]可以按照官方文档进行,没有问题。只需注意认证项。

[filter:authtoken]
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
...
auth_uri = http://192.168.0.13:5000
auth_url = http://192.168.0.13:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = swift
password = SWIFT_PASS
delay_auth_decision = true

在公式文档中,auth_uri和auth_url被称为控制器,但是由于这些项目涉及到认证,所以需要将其更改为正在运行的Keystone服务器的地址。

账号服务器、容器服务器、对象服务器的准备工作。

在构建 Swift 时,account-server、container-server、object-server 都需要除 root 分区之外的其他设备分区。例如,在 object-server 中,有一个名为 object-replicator 的进程,它会检查是否已挂载作为数据区域的额外设备。如果只有 root 分区,则会导致进程启动失败,因此需要注意。

如果可以获得sdb之后的设备,可以使用该设备来进行XFS格式化。如果没有该设备,则可以使用循环回环设备的方法。关于使用循环回环设备的步骤,请参阅这里。

尝试使用回环设备将普通文件挂载为XFS文件系统。

另外,在上述的循环回路设备文章中,将挂载点设置为/mnt/loop0,但是本次我们决定将其挂载到/srv/node/sdb1上。

账户服务器和容器服务器的主机以及对象服务器的主机具有共同的rsync配置。

进行前提配置

账户服务器和容器服务器的配置。

在托管account-server和container-server的主机上,需要安装其各自所需的软件包。需要注意的是,必须安装并启动memcached。

# apt-get install swift swift-account swift-container memcached

请跳转到/etc/swift目录,并从GitHub上获取account-server.conf-sample、container-server.conf-sample和container-reconciler.conf-sample这几个文件。不需要获取与object-server相关的配置文件。相反,如果存在与object-server相关的配置文件,在使用swift-init启动进程时,object-server的进程也会同时运行。

# curl -o /etc/swift/account-server.conf \
  https://git.openstack.org/cgit/openstack/swift/plain/etc/account-server.conf-sample?h=stable/kilo
# curl -o /etc/swift/container-server.conf \
  https://git.openstack.org/cgit/openstack/swift/plain/etc/container-server.conf-sample?h=stable/kilo
# curl -o /etc/swift/container-reconciler.conf \
  https://git.openstack.org/cgit/openstack/swift/plain/etc/container-reconciler.conf-sample?h=stable/kilo

随后的步骤应按照官方文件的说明进行。

最后,请重新启动memcached。

# service memcached restart

对象服务器的设置

在运行object-server的主机上安装所需的每个包。

# apt-get install swift swift-account swift-object

前往/etc/swift,从GitHub获取object-server.conf-sample和object-expirer.conf-sample。在这里,反而不需要获取与account-server和container-server相关的配置。

# curl -o /etc/swift/object-server.conf \
  https://git.openstack.org/cgit/openstack/swift/plain/etc/object-server.conf-sample?h=stable/kilo
# curl -o /etc/swift/object-expirer.conf \
  https://git.openstack.org/cgit/openstack/swift/plain/etc/object-expirer.conf-sample?h=stable/kilo

这边也是按照官方文件上的指示进行后续步骤。

戒指的配置

在代理服务器的主机上生成环文件。在这个时机上,集群的分区数和冗余度会被确定。根据集群的规模,需要谨慎地确定分区数和冗余度。关于分区数的知识,GREE公司的这篇文章非常有帮助。

使用OpenStack Swift运营图像存储。

这次的设置是,冗余度为3,分区数为2^17。在代理服务器上执行以下操作。有关命令选项,请参考官方文档。

创建初始的戒指

# cd /etc/swift
# rm -f *.builder *.ring.gz backups/*.builder backups/*.ring.gz
# swift-ring-builder account.builder create 17 3 1
# swift-ring-builder account.builder add r1z1-192.168.0.3:6002/sdb1 100
# swift-ring-builder account.builder add r1z2-192.168.0.4:6002/sdb1 100
# swift-ring-builder account.builder add r1z3-192.168.0.5:6002/sdb1 100
# swift-ring-builder account.builder add r1z4-192.168.0.6:6002/sdb1 100
# swift-ring-builder account.builder add r1z5-192.168.0.7:6002/sdb1 100
# swift-ring-builder account.builder
# swift-ring-builder account.builder rebalance

# swift-ring-builder container.builder create 17 3 1
# swift-ring-builder container.builder add r1z1-192.168.0.3:6001/sdb1 100
# swift-ring-builder container.builder add r1z2-192.168.0.4:6001/sdb1 100
# swift-ring-builder container.builder add r1z3-192.168.0.5:6001/sdb1 100
# swift-ring-builder container.builder add r1z4-192.168.0.6:6001/sdb1 100
# swift-ring-builder container.builder add r1z5-192.168.0.7:6001/sdb1 100
# swift-ring-builder container.builder
# swift-ring-builder container.builder rebalance

# swift-ring-builder object.builder create 17 3 1
# swift-ring-builder object.builder add r1z1-192.168.0.8:6000/sdb1 100
# swift-ring-builder object.builder add r1z2-192.168.0.9:6000/sdb1 100
# swift-ring-builder object.builder add r1z3-192.168.0.10:6000/sdb1 100
# swift-ring-builder object.builder add r1z4-192.168.0.11:6000/sdb1 100
# swift-ring-builder object.builder add r1z5-192.168.0.12:6000/sdb1 100
# swift-ring-builder object.builder
# swift-ring-builder object.builder rebalance

完成后,将account.ring.gz、container.ring.gz和object.ring.gz分别放置在每个节点上。

启动进程

这里按照官方文件没有问题。

设置哈希值和默认存储策略

在代理服务器的主机上,只需要运行代理服务器和缓存服务器。其他主机上应由swift-init自动处理。

确认是否已经构建完成。

由于Kilo版本的发布,Keystone的API采用了v3。因此,在执行swift命令时,需要使用选项”-V 3″。

$ source demo-openrc.sh
$ swift -V 3 stat
                        Account: AUTH_25e9c03ea9824a6e8d24a60ac5e72c98
                     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
                     Connection: keep-alive
                    X-Timestamp: 1441783575.55310
                     X-Trans-Id: tx2260ad3b3ed840f99d075-0056091154
                   Content-Type: text/plain; charset=utf-8
                  Accept-Ranges: bytes

如果命令提示符能够很快返回,那就没有问题。但是如果命令提示符经过一段时间仍未返回,那么设置可能有误。这种情况下,请先尝试加上–debug选项重新执行。

$ swift --debug -V 3 stat

可以查看正在运行的内部REST API的详细信息。然后,只需检查每个主机的日志即可。

我认为以上是构建完成了。虽然每个配置都有不同的需要注意的地方,但是这次我根据自己的困扰经验制定了步骤。