Apache 部署指南

Web 前端考虑事项

Swift 可以配置为使用内置的 Web 前端,也可以使用功能齐全的 Web 服务器,例如 Apache2 (HTTPD) Web 服务器。内置 Web 前端是一个 wsgi 微型“Web 服务器”,它打开自己的 socket 并直接提供 http 请求。内置 Web 前端接受的传入请求随后转发到 wsgi 应用程序(核心 swift)进行进一步处理,可能通过 wsgi 中间件子组件。

客户端<—->‘内置 Web 前端’<—->中间件<—->‘核心 swift’

为了充分利用 Apache2,Swift 也可以配置为 Apache2 服务器的请求处理器。这种替代部署场景使用 Apache2 的 mod_wsgi 将请求转发到 swift wsgi 应用程序和中间件。

客户端<—->‘Apache2 with mod_wsgi’<—–>中间件<—->‘核心 swift’

内置 Web 前端提供简单性并需要最少的配置。它也是 Swift 最常用的 Web 前端。此外,内置 Web 前端包括支持接收来自客户端的分块传输编码,目前 Apache2 在此处描述的操作模式中不支持。

使用 Apache2 提供了扩展 Swift 并将其与现有的身份验证、管理和控制系统集成的全新方式。单个 Apache2 服务器可以作为驻留在 swift 节点上的任何数量的 swift 服务器的 Web 前端。例如,当存储节点提供帐户、容器和对象服务时,单个 Apache2 服务器可以作为所有三个服务的 Web 前端。

此处描述的 apache 变体是在 IBM 研究工作的一部分中测试的。 发现经过调整后,Apache2 提供的性能通常与内置 Web 前端提供的性能相当。 除了 Apache2 之外,可以使用其他 Web 服务器,但从未经过测试。

Apache2 设置

系统上需要安装 Apache2 和 mod-wsgi。 Ubuntu 已经安装了 Apache2。 使用以下命令安装 mod-wsgi

sudo apt-get install libapache2-mod-wsgi

为 Apache2 wsgi 文件创建一个目录

sudo mkdir /srv/www/swift

为 wsgi 进程创建一个工作目录

sudo mkdir -m 2770 /var/lib/swift
sudo chown swift:swift /var/lib/swift

/srv/www/swift 下为每个服务创建一个文件。

对于代理服务,创建 /srv/www/swift/proxy-server.wsgi

from swift.common.wsgi import init_request_processor
application, conf, logger, log_name = \
    init_request_processor('/etc/swift/proxy-server.conf','proxy-server')

对于帐户服务,创建 /srv/www/swift/account-server.wsgi

from swift.common.wsgi import init_request_processor
application, conf, logger, log_name = \
    init_request_processor('/etc/swift/account-server.conf',
                           'account-server')

对于容器服务,创建 /srv/www/swift/container-server.wsgi

from swift.common.wsgi import init_request_processor
application, conf, logger, log_name = \
    init_request_processor('/etc/swift/container-server.conf',
                          'container-server')

对于对象服务,创建 /srv/www/swift/object-server.wsgi

from swift.common.wsgi import init_request_processor
application, conf, logger, log_name = \
    init_request_processor('/etc/swift/object-server.conf',
                           'object-server')

创建一个 /etc/apache2/conf.d/swift_wsgi.conf 配置文件,该文件将为每个本地服务定义一个端口和虚拟主机。 例如,作为代理服务 Web 前端的 Apache2

# Proxy
Listen 8080

<VirtualHost *:8080>
    ServerName proxy-server

    LimitRequestBody 5368709122
    LimitRequestFields 200

    WSGIDaemonProcess proxy-server processes=5 threads=1 user=swift group=swift display-name=%{GROUP}
    WSGIProcessGroup proxy-server
    WSGIScriptAlias / /srv/www/swift/proxy-server.wsgi
    LogLevel debug
    CustomLog /var/log/apache2/proxy.log combined
    ErrorLog /var/log/apache2/proxy-server
</VirtualHost>

请注意,在使用 Apache 时,最大对象大小的限制应由 Apache 使用 LimitRequestBody 施加,而不是由 swift 代理施加。 还要注意,LimitRequestBody 应指示与 max_file_size 相同的值,该值位于 /etc/swift/swift.conf/etc/swift/test.conf 中。 Swift 的 max_file_size 默认值(如果不存在)为 5368709122。 例如,作为存储节点 Web 前端的 Apache2

# Object Service
Listen 6200

<VirtualHost *:6200>
    ServerName object-server

    LimitRequestFields 200

    WSGIDaemonProcess object-server processes=5 threads=1 user=swift group=swift display-name=%{GROUP}
    WSGIProcessGroup object-server
    WSGIScriptAlias / /srv/www/swift/object-server.wsgi
    LogLevel debug
    CustomLog /var/log/apache2/access.log combined
    ErrorLog /var/log/apache2/object-server
</VirtualHost>

# Container Service
Listen 6201

<VirtualHost *:6201>
    ServerName container-server

    LimitRequestFields 200

    WSGIDaemonProcess container-server processes=5 threads=1 user=swift group=swift display-name=%{GROUP}
    WSGIProcessGroup container-server
    WSGIScriptAlias / /srv/www/swift/container-server.wsgi
    LogLevel debug
    CustomLog /var/log/apache2/access.log combined
    ErrorLog /var/log/apache2/container-server
</VirtualHost>

# Account Service
Listen 6202

<VirtualHost *:6202>
    ServerName account-server

    LimitRequestFields 200

    WSGIDaemonProcess account-server processes=5 threads=1 user=swift group=swift display-name=%{GROUP}
    WSGIProcessGroup account-server
    WSGIScriptAlias / /srv/www/swift/account-server.wsgi
    LogLevel debug
    CustomLog /var/log/apache2/access.log combined
    ErrorLog /var/log/apache2/account-server
</VirtualHost>

启用新配置的虚拟主机

a2ensite swift_wsgi.conf

接下来,停止、测试并重新启动 Apache2

# stop it
systemctl stop apache2.service

# test the configuration
apache2ctl -t

# start it if the test succeeds
systemctl start apache2.service

编辑测试配置文件并添加

web_front_end = apache2
normalized_urls = True

还要检查文件是否包含与 apache 配置文件中使用的 LimitRequestBody 相同值的 max_file_size

我们完成了。 您可以运行功能测试来测试 - 例如:

cd ~swift/swift
./.functests