Proxy Server Configuration

本文档描述了代理服务器可用的配置选项。一些代理服务器选项可以在 按策略 的基础上进行配置。有关代理服务器中间件的更多文档,请参见 中间件认证系统

其他 Swift 配置选项的文档请参见 配置文档

一个示例 Proxy Server 配置可以在源代码仓库的 etc/proxy-server.conf-sample 中找到。

可用的配置部分如下

[DEFAULT]

选项

默认值

描述

bind_ip

0.0.0.0

服务器绑定的 IP 地址

bind_port

80

服务器绑定的端口

keep_idle

600

为 socket TCP_KEEPIDLE 设置的值

bind_timeout

30

尝试绑定之前的秒数

backlog

4096

允许的最大挂起连接数

swift_dir

/etc/swift

Swift 配置目录

workers

auto

覆盖将接受连接的预先分叉工作进程的数量。如果设置,则应为整数,零表示不分叉。如果未设置,它将尝试默认为有效的 CPU 核心数,如果无法确定则回退为 1。请参阅 通用服务调优

max_clients

1024

单个工作进程可以同时处理的最大客户端数(它实际上会接受(2) N + 1)。将其设置为 1 将仅同时处理一个请求,而不接受另一个并发请求。

user

swift

运行用户

cert_file

SSL .crt 文件的路径。仅应为测试目的启用。

key_file

SSL .key 文件的路径。仅应为测试目的启用。

cors_allow_origin

除了容器设置之外,允许进行 CORS 请求的源主机列表。

strict_cors_mode

True

如果为 True(默认值),则仅当 CORS 请求的 Origin 标头与允许的源匹配时才允许该请求。否则,允许任何 Origin。

cors_expose_headers

这是添加到容器设置中的 Access-Control-Expose-Headers 标头中的标头列表。

client_timeout

60

trans_id_suffix

此可选后缀(默认为空)附加到 Swift 事务 ID 后,可以轻松确定 X-Trans-Id 属于哪个集群。当管理多个 Swift 集群时,这非常有用。

log_name

swift

用于日志记录的标签

log_facility

LOG_LOCAL0

syslog 日志设施

log_level

INFO

日志级别

log_headers

False

log_address

/dev/log

日志目录

log_max_line_length

0

将日志行长度限制为给定的值;如果设置为 0(默认值),则没有限制。

log_custom_handlers

逗号分隔的函数列表,用于设置自定义日志处理程序。

log_udp_host

覆盖 log_address

log_udp_port

514

UDP 日志端口

log_statsd_host

启用 StatsD 日志记录;IPv4/IPv6 地址或主机名。如果主机名解析为 IPv4 和 IPv6 地址,则将使用 IPv4 地址。

log_statsd_port

8125

log_statsd_default_sample_rate

1.0

log_statsd_sample_rate_factor

1.0

log_statsd_metric_prefix

eventlet_debug

false

如果为 true,则启用 eventlet 的调试日志记录

expose_info

true

启用通过 HTTP GET /info 暴露配置设置。

admin_key

用于 HMAC 签名的管理调用的密钥。默认为空,这将禁用对 /info 的管理调用。

disallowed_sections

swift.valid_api_versions

允许从对 /info 的公共调用中隐藏部分。可以通过用“.”分隔字典级别来隐藏子部分。

nice_priority

服务器进程的调度优先级。Nice 值范围从 -20(对进程最有利)到 19(对进程最不利)。默认情况下,不修改优先级。

ionice_class

服务器进程的 I/O 调度类。I/O 优先级类值是 IOPRIO_CLASS_RT(实时)、IOPRIO_CLASS_BE(尽力而为)和 IOPRIO_CLASS_IDLE(空闲)。默认情况下不修改类和优先级。Linux 从 2.6.13 版本开始支持 io 调度优先级和类,并使用 CFQ io 调度程序。仅与 ionice_priority 一起工作。

ionice_priority

服务器进程的 I/O 调度优先级。I/O nice 优先级是一个数字,范围从 0 到 7。值越高,进程的 I/O 优先级越低。仅与 ionice_class 一起工作。如果设置了 IOPRIO_CLASS_IDLE,则会被忽略。

[proxy-server]

选项

默认值

描述

use

代理服务器的 paste.deploy 入口点。在大多数情况下,应该是 egg:swift#proxy

set log_name

proxy-server

用于日志记录的标签

set log_facility

LOG_LOCAL0

syslog 日志设施

set log_level

INFO

日志级别

set log_headers

True

如果为 True,则记录每个请求中的标头

set log_handoffs

True

如果为 True,则代理将在必须故障转移到备用节点时记录日志

recheck_account_existence

60

将 memcached 发送的帐户存在性缓存超时时间(秒)。

recheck_container_existence

60

将 memcached 发送的容器存在性缓存超时时间(秒)。

account_existence_skip_cache_pct

0.0

定期绕过帐户信息请求的缓存,并转到磁盘以刷新缓存中的数据。这是应该随机跳过的请求百分比。建议使用 0.0 - 0.1(1/1000)左右的值。

container_existence_skip_cache_pct

0.0

定期绕过容器信息请求的缓存,并转到磁盘以刷新缓存中的数据。这是应该随机跳过的请求百分比。建议使用 0.0 - 0.1(1/1000)左右的值。

container_updating_shard_ranges_skip_cache_pct

0.0

定期绕过 shard_range 更新请求的缓存,并转到磁盘以刷新缓存中的数据。这是应该随机跳过的请求百分比。建议使用 0.0 - 0.1(1/1000)左右的值。

container_listing_shard_ranges_skip_cache_pct

0.0

定期绕过 shard_range 列出信息请求的缓存,并转到磁盘以刷新缓存中的数据。这是应该随机跳过的请求百分比。建议使用 0.0 - 0.1(1/1000)左右的值。

object_chunk_size

65536

从对象服务器读取的块大小

client_chunk_size

65536

从客户端读取的块大小

memcache_servers

127.0.0.1:11211

逗号分隔的 memcached 服务器 ip:port 或 [ipv6addr]:port 列表。如果此值为空,则 memcache 客户端将查找 [memcache.conf]

memcache_max_connections

2

每个工作进程到每个 memcached 服务器的最大连接数

node_timeout

10

对外部服务的请求超时时间

recoverable_node_timeout

node_timeout

对外部服务的请求超时时间,这些请求在失败时可以从其他地方恢复。例如,对象 GET。

client_timeout

60

从客户端读取一个块的超时时间

conn_timeout

0.5

对外部服务的连接超时时间

error_suppression_interval

60

自上次错误以来必须经过的时间(秒),才能认为节点不再受错误限制。

error_suppression_limit

10

认为节点受错误限制的错误计数

allow_account_management

false

是否允许调用帐户 PUT 和 DELETE

account_autocreate

false

如果设置为“true”,则授权的且 Swift 集群中尚不存在的帐户将自动创建。

max_containers_per_account

0

如果设置为正值,则尝试创建容器时,如果帐户已经至少有这么多容器,则会返回 403 Forbidden。注意:这是一个软限制,这意味着用户可能会在 403 触发之前超过 recheck_account_existence 的上限。

max_containers_whitelist

这是一个逗号分隔的帐户名称列表,这些帐户忽略 max_containers_per_account 上限。

rate_limit_after_segment

10

下载大型对象段后限制下载速度。

rate_limit_segments_per_sec

1

以每秒此速率限制大型对象下载。

request_node_count

2 * replicas

设置为要联系的节点数量以进行正常请求。您可以使用“* replicas”在末尾,使其使用给定数字乘以正在请求的环的副本数。

swift_owner_headers

<请参阅示例配置文件中的默认标头列表>

这些标头的值仅对 swift_owner 可见。swift_owner 的确切定义取决于使用的身份验证系统,但通常表示管理职责。

sorting_method

shuffle

存储节点可以随机选择(shuffle),也可以使用计时测量(timing),或者使用显式匹配(affinity)。使用计时测量可以降低整体延迟,而使用 affinity 可以提供更精细的控制。在 timing 和 affinity 的情况下,同样排序的节点仍然随机选择以分散负载。此选项可以在每个策略的配置部分中覆盖。

timing_expiry

300

如果使用“timing”sorting_method,则计时仅在 timing_expiry 配置的秒数内有效。

concurrent_gets

关闭

在 GET/HEAD 期间并发使用副本计数数量的线程,并使用第一个成功的响应返回。在 EC 的情况下,此参数仅影响 EC HEAD,因为 EC GET 的行为不同。

concurrency_timeout

conn_timeout

此参数控制在触发下一个 concurrent_get 线程之前等待多长时间。值为 0 将完全并发,任何其他数字都会延迟线程的触发。此数字应在 0 到 node_timeout 之间。默认值为 conn_timeout (0.5)。

nice_priority

服务器进程的调度优先级。Nice 值范围从 -20(对进程最有利)到 19(对进程最不利)。默认情况下,不修改优先级。

ionice_class

服务器进程的 I/O 调度类。I/O nice 类值是 IOPRIO_CLASS_RT(实时)、IOPRIO_CLASS_BE(尽力而为)和 IOPRIO_CLASS_IDLE(空闲)。默认情况下,不修改类和优先级。Linux 从 2.6.13 开始支持 io 调度优先级和类,并使用 CFQ io 调度程序。仅与 ionice_priority 一起工作。

ionice_priority

服务器进程的 I/O 调度优先级。I/O nice 优先级是一个数字,范围从 0 到 7。值越高,进程的 I/O 优先级越低。仅与 ionice_class 一起工作。如果设置了 IOPRIO_CLASS_IDLE,则会被忽略。

read_affinity

指定在读取时优先选择哪些后端服务器;与将 sorting_method 选项设置为“affinity” 结合使用。格式是逗号分隔的 affinity 描述符列表,形式为 <selection>=<priority>。<selection> 可以是 r<N> 以选择区域 N 中的节点,或者 r<N>z<M> 以选择区域 N、区域 M 中的节点。<priority> 值应是一个整数,表示赋予选择的优先级;数字越小,优先级越高。默认情况下为空,表示没有偏好。此选项可以在每个策略的配置部分中覆盖。

write_affinity

指定在写入时优先选择哪些后端服务器。格式是逗号分隔的 affinity 描述符列表,形式为 r<N> 表示区域 N 或 r<N>z<M> 表示区域 N、区域 M。默认情况下为空,表示没有偏好。此选项可以在每个策略的配置部分中覆盖。

write_affinity_node_count

2 * replicas

在写入时首先尝试联系的本地(由 write_affinity 设置控制)节点的数量,然后再联系任何非本地节点。该值应为整数,或使用“* replicas”在末尾,使其使用给定数字乘以正在请求的环的副本数。此选项可以在每个策略的配置部分中覆盖。

write_affinity_handoff_delete_count

auto

在删除时尝试联系的本地(由 write_affinity 设置控制)备用节点的数量,除了主节点之外。例如,在地理分布式部署中,如果副本=3,有时在上传后但在对象复制到其他区域的适当位置之前,一个区域可能有一个主节点和两个本地备用节点。在这种情况下,在删除对象时包括这些备用节点可以帮助做出正确的响应决策。默认值“auto”表示 Swift 将自动计算数量,默认值为 (replicas - len(local_primary_nodes))。此选项可以在每个策略的配置部分中覆盖。

allow_open_expired

false

如果为 true(默认值为 false),则已过期但尚未清除的对象可以通过在 GET、HEAD 和 POST 请求中设置“x-open-expired”标头为 true 来访问。