我尝试构建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虚拟机,共计使用两个虚拟机。
在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的详细信息。然后,只需检查每个主机的日志即可。
我认为以上是构建完成了。虽然每个配置都有不同的需要注意的地方,但是这次我根据自己的困扰经验制定了步骤。