Ceph 对象网关配置参考

下列的选项可加入 Ceph 配置文件(一般是 ceph.conf )的 [client.radosgw.{instance-name}] 段下,这些选项可能 有默认值.如果你没有指定,自就会自动使用默认值。

rgwdata
描述:设置 Ceph 对象网关存储数据文件位置。
类型:String
默认值:/var/lib/ceph/radosgw/$cluster-$id
rgwenableapis
描述:启用指定的 API 。
类型:String
默认值:所有 API : s3,swift,swift_auth,admin
rgwcacheenabled
描述:是否启用 Ceph 对象网关缓存。
类型:Boolean
默认值:true
rgwcachelrusize
描述:Ceph 对象网关缓存的条目限制。
类型:Integer
默认值:10000
rgwsocketpath
描述:域套接字的路径, FastCgiExternalServer 要使用此套接字。若未指定, Ceph 对象网关就不会以外部服务器的方式运行。这里的路径必须与 rgw.conf 里的路径相同。
类型:String
默认值:N/A
rgwhost
描述:Ceph 对象网关实例所在主机,可以是 IP 地址或者主机名。
类型:String
默认值:0.0.0.0
rgwport
描述:对象网关实例接受请求的端口。若未指定, Ceph 对象网关将运行外部 FastCGI 。
类型:String
默认值:None
rgwdnsname
描述:所服务域的 DNS 名称。请参考 region 配置里的 hostnames 选项。
类型:String
默认值:None
rgwscripturi
描述:如果请求中没带 SCRIPT_URI 变量,这里的设置将作为默认值使用.
类型:String
默认值:None
rgwrequesturi
描述:如果请求中没带 REQUEST_URI 变量,这里的设置将作为默认值使用。
类型:String
默认值:None
rgwprintcontinue
描述:如果可能的话,启用 100-continue
类型:Boolean
默认值:true
rgwremoteaddrparam
描述:远端地址参数。例如, HTTP 字段或者 X-Forwarded-For 地址(如果用了反向代理)。
类型:String
默认值:REMOTE_ADDR
rgwopthreadtimeout
描述:运行中线程的超时值。
类型:Integer
默认值:600
rgwopthreadsuicidetimeout
描述:Ceph 对象网关进程的超时自杀值( timeout )。设置为 0 时禁用。
类型:Integer
默认值:0
rgwthreadpoolsize
描述:线程池的尺寸。
类型:Integer
默认值:100 threads.
rgwnumradoshandles
描述:Ceph 对象网关的 RADOS 集群处理器数量。通过配置 RADOS 处理器数量可以使得各种类型的载荷都明显地提升性能,因为各个 RGW 工作线程在其短暂的活跃期内都可以分别挂靠一个 RADOS 处理器。
类型:Integer
默认值:1
rgwnumcontroloids
描述:不同的 rgw 实例间用于缓存同步的通知对象数量。
类型:Integer
默认值:8
rgwinittimeout
描述:Ceph 对象网关放弃初始化前坚持的时间,秒。
类型:Integer
默认值:30
rgwmimetypesfile
描述:MIME 类型数据库文件的路径,Swift 自动探测对象类型时要用到。
类型:String
默认值:/etc/mime.types
rgwgcmaxobjs
描述:垃圾回收进程在一个处理周期内可处理的最大对象数。
类型:Integer
默认值:32
rgwgcobjminwait
描述:对象可被删除并由垃圾回收器处理前最少等待多长时间。
类型:Integer
默认值:2*3600
rgwgcprocessormaxtime
描述:两个连续的垃圾回收周期起点的最大时间间隔。
类型:Integer
默认值:3600
rgwgcprocessorperiod
描述:垃圾回收进程的运行周期。
类型:Integer
默认值:3600
rgws3successcreateobjstatus
描述:create-obj 的另一种成功状态响应。
类型:Integer
默认值:0
rgwresolvecname
描述:如果主机名与 rgwdnsname 不同, rgw 是否应该用请求的 hostname 字段的 DNS CNAME 记录。
类型:Boolean
默认值:false
rgwobjstripesize
描述:Ceph 对象网关的对象条带尺寸。关于条带化请参考体系结构
类型:Integer
默认值:4<<20
rgwextendedhttpattrs
描述:为实体(用户、桶或对象)新增可设置的属性集。可以在上传实体时把这些额外属性设置在 HTTP 头的字段里、或者用 POST 方法修改;如果设置过,在此实体上执行 GET/HEAD 操作时这些属性就会以 HTTP 头的字段返回。
类型:String
默认值:None
实例:“content_foo, content_bar, x-foo-bar”
rgwexittimeoutsecs
描述:等待某一进程多长时间(秒)后无条件退出。
类型:Integer
默认值:120
rgwgetobjwindowsize
描述:为单对象请求预留的窗口大小(字节)。
类型:Integer
默认值:16<<20
rgwgetobjmaxreqsize
描述:向 Ceph 存储集群发起的一次 GET 请求的最大尺寸。
类型:Integer
默认值:4<<20
rgwrelaxeds3bucketnames
描述:对 US region 的桶启用宽松的桶名规则。
类型:Boolean
默认值:false
rgwlistbucketsmaxchunk
描述:列举用户桶时,每次检出的最大桶数。
类型:Integer
默认值:1000
rgwoverridebucketindexmaxshards
描述:桶索引对象的分片数量, 0 表示没有分片。我们不建议把这个值设置得太大(比如大于 1000 ),因为这样会增加罗列桶时的开销。
类型:Integer
默认值:0
rgwnumzoneopstateshards
描述:用于保存 region 间复制进度的最大消息片数。
类型:Integer
默认值:128
rgwopstateratelimitsec
描述:各次上传后状态更新操作的最小间隔时间。 0 禁用此限速。
类型:Integer
默认值:30
rgwcurlwaittimeoutms
描述:某些特定 curl 调用的超时值,毫秒。
类型:Integer
默认值:1000
rgwcopyobjprogress
描述:长时间复制操作时允许输出对象进度。
类型:Boolean
默认值:true
rgwcopyobjprogresseverybytes
描述:复制进度输出的粒度,字节数。
类型:Integer
默认值:1024*1024
rgwadminentry
描述:管理 URL 请求的入口点。
类型:String
默认值:admin
rgwcontentlengthcompat
描述:允许兼容设置了 CONTENT_LENGTH 和 HTTP_CONTENT_LENGTH 的 FCGI 请求。
类型:Boolean
默认值:false

region (域组)

Ceph 从 v0.67 版开始,通过 region 概念支持 Ceph 对象网关联盟部署和统一的命名空间。 region 定义了位于一或多个域内的 Ceph 对象网关实例的地理位置。

region 的配置不同于一般配置过程,因为不是所有的配置都放在 Ceph 配置文件中。从 Ceph 0.67 版开始,你可以列出所有 region 、获取 region 配置以及设置 region 配置。

列出所有 region

Ceph 集群可包含一系列 region ,可用下列命令列出所有 region

  1. sudo radosgw-admin regions list
radosgw-admin 命令会返回 JSON 格式的 region 列表。
  1. { "default_info": { "default_region": "default"}, "regions": [ "default"]}
### 获取 region-map要获取各 region 的详细情况,可执行:
  1. sudo radosgw-admin region-map get
Note如果你得到了 failedtoreadregionmap 错误,先试试 sudoradosgw-adminregion-mapupdate 。### 获取单个 region要查看某 region 的配置,执行:
  1. radosgw-admin region get [—rgw-region=<region>]
default 这个 region 的配置大致如此:
  1. {"name": "default", "api_name": "", "is_master": "true", "endpoints": [], "hostnames": [], "master_zone": "", "zones": [ {"name": "default", "endpoints": [], "log_meta": "false", "log_data": "false"} ], "placement_targets": [ {"name": "default-placement", "tags": [] }], "default_placement": "default-placement"}
### 设置一个 region定义 region 需创建一个 JSON 对象、并提供必需的参数:- name: region 名字,必需。- api_name: 此 region 的 API 名字,可选。- is_master: 决定着此 region 是否为主 region ,必需。注:只能有一个主 region 。- endpoints: region 内的所有结点列表。例如,你可以用多个域名指向同一 region 区,记得在斜杠前加反斜杠进行转义( \/ )。也可以给结点指定端口号( fqdn:port ),可选。- hostnames: region 内所有主机名的列表。例如,这样你就可以在同一 region 内使用多个域名了。可选配置。此列表会自动包含 rgwdnsname 配置。更改此配置后需重启所有 radosgw 守护进程。- master_zone: region 的主域,可选。若未指定,则选择默认域。注:每个 region 只能有一个主域。- zones: region 内所有域的列表。各个域都有名字(必需的)、一系列结点(可选的)、以及网关是否要记录元数据和数据操作(默认不记录)。- placement_targets: 放置目标列表(可选)。每个放置目标都包含此放置目标的名字(必需)、还有一个标签列表(可选),这样只有带这些标签的用户可以使用此放置目标(即用户信息中的 placement_tags 字段)。- default_placement: 对象索引及数据的默认放置目标,默认为 default-placement 。你可以在用户信息里给各用户设置一个用户级的默认放置目标。要配置一个 region ,需创建一个包含必需字段的 JSON 对象,把它存入文件(如 region.json ),然后执行下列命令:
  1. sudo radosgw-admin region set infile region.json
其中 region.json 是你创建的 JSON 文件。Important默认 region defaultis_master 字段值默认为 true 。如果你想新建一 region 并让它作为主 region ,那你必须把 default region 的 is_master 设置为 false ,或者干脆删除 default region 。最后,更新 region map。
  1. sudo radosgw-admin region-map update
### 配置 region map配置 region map的过程包括创建含一或多个 region 的 JSON 对象,还有设置集群的主 region master_region 。 region map内的各 region 都由键/值对组成,其中 key 选项等价于单独配置 region 时的 name 选项, val 是包含单个 region 完整配置的 JSON 对象。你可以只有一个 region ,其 is_master 设置为 true ,而且必须在 region map末尾设置为 master_region 。下面的 JSON 对象是默认 region map的实例。
  1. { "regions": [ { "key": "default", "val": { "name": "default", "api_name": "", "is_master": "true", "endpoints": [], "hostnames": [], "master_zone": "", "zones": [ { "name": "default", "endpoints": [], "log_meta": "false", "log_data": "false"}], "placement_targets": [ { "name": "default-placement", "tags": []}], "default_placement": "default-placement" } } ], "master_region": "default"}
要配置一个 region map,执行此命令:
  1. sudo radosgw-admin region-map set infile regionmap.json
其中 regionmap.json 是创建的 JSON 文件。确保你创建了 region map里所指的那些域。最后,更新此map。
  1. sudo radosgw-admin regionmap update
## Zones从 Ceph v0.67 版起, Ceph 对象网关支持zone概念,它是一或多个 Ceph 对象网关实例组成的逻辑组。zone的配置不同于典型配置过程,因为并非所有配置都位于 Ceph 配置文件内。从 0.67 版起,你可以列出所有zone、获取zone配置、设置zone配置。### 列出所有zone要列出某集群内的所有zone,执行:
  1. sudo radosgw-admin zone list
### 获取单个zone要获取某一zone的配置,执行:
  1. sudo radosgw-admin zone get [—rgw-zone=<zone>]
default 这个默认zone的配置大致如此:
  1. { "domain_root": ".rgw", "control_pool": ".rgw.control", "gc_pool": ".rgw.gc", "log_pool": ".log", "intent_log_pool": ".intent-log", "usage_log_pool": ".usage", "user_keys_pool": ".users", "user_email_pool": ".users.email", "user_swift_pool": ".users.swift", "user_uid_pool": ".users.uid", "system_key": { "access_key": "", "secret_key": ""}, "placement_pools": [ { "key": "default-placement", "val": { "index_pool": ".rgw.buckets.index", "data_pool": ".rgw.buckets"} } ] }
### 配置zone配置zone时需指定一系列的 Ceph 对象网关存储池。为保持一致性,我们建议用region名作为存储池名字的前缀。存储池配置见存储池。要配置起一个zone,需创建包含存储池的 JSON 对象、并存入文件(如 zone.json );然后执行下列命令,把 {zone-name} 替换为zone名称:
  1. sudo radosgw-admin zone set rgw-zone={zone-name} infile zone.json
其中, zone.json 是你创建的 JSON 文件。## region 和 zone 选项你可以在 Ceph 配置文件中的各实例 [client.radosgw.{instance-name}] 段下设置下列选项。New in version v.67.rgwzone
描述:网关例程所在的zone名称。
类型:String
默认值:None

New in version v.67.

rgwregion
描述:网关例程所在的 region 名。
类型:String
默认值:None

New in version v.67.

rgwdefaultregioninfooid
描述:用于保存默认 region 的 OID 。我们不建议更改此选项。
类型:String
默认值:default.region

存储池

Ceph zone会映射一系列 Ceph 存储集群的存储池。

Ceph 对象网关的默认 zone 的默认存储池有:

  • .rgw
  • .rgw.control
  • .rgw.gc
  • .log
  • .intent-log
  • .usage
  • .users
  • .users.email
  • .users.swift
  • .users.uid

你应该能够清晰地判断某个 zone 会怎样访问各存储池。你可以为每个 zone 创建一系列存储池,或者让多个 zone 共用同一系列的存储池。作为最佳实践,我们建议分别位于各 region 中的主 zone 和第二 zone 都要有各自的一系列存储池。为某个域创建存储池时,建议默认存储池名以 region 名和 zone 名作为前缀,例如:

  • .region1-zone1.domain.rgw
  • .region1-zone1.rgw.control
  • .region1-zone1.rgw.gc
  • .region1-zone1.log
  • .region1-zone1.intent-log
  • .region1-zone1.usage
  • .region1-zone1.users
  • .region1-zone1.users.email
  • .region1-zone1.users.swift
  • .region1-zone1.users.uid

Ceph 对象网关会把 bucket 索引( index_pool )和 bucket 数据( data_pool )存储到归置存储池,这些可以重叠——也就是你可以把索引和数据存入同一存储池。索引存储池的默认归置地是 .rgw.buckets.index ,数据存储池的默认归置地是 .rgw.buckets ,给 zone 指定存储池的方法见Zones

Deprecated since version v.67.

rgwclusterrootpool
描述:为此实例存储 radosgw 元数据的存储池。从 v0.67 之后不再支持,可改用 rgwzonerootpool
类型:String
是否必需:No
默认值:.rgw.root
替代选项:rgwzonerootpool

New in version v.67.

rgwregionrootpool
描述:用于存储此 region 所有相关信息的存储池。
类型:String
默认值:.rgw.root

New in version v.67.

rgwzonerootpool
描述:用于存储此 zone 所有相关信息的存储池。
类型:String
默认值:.rgw.root

Swift 选项

rgwenforceswiftacls
描述:强制使用 Swift 的访问控制列表( ACL )选项。
类型:Boolean
默认值:true
rgwswifttokenexpiration
描述:Swift 令牌过期时间,秒。
类型:Integer
默认值:24*3600
rgwswifturl
描述:Ceph 对象网关 Swift 接口的 URL 。
类型:String
默认值:None
rgwswifturlprefix
描述:Swift API 的 URL 前缀。
默认值:swift
实例:http://fqdn.com/swift
rgwswiftauthurl
描述:验证 v1 版令牌的默认 URL (如果没用 Swift 内建认证)。
类型:String
默认值:None
rgwswiftauthentry
描述:Swift 认证 URL 的入口点。
类型:String
默认值:auth

日志记录选项

rgwlognonexistentbucket
描述:让 Ceph 对象网关记录访问不存在的 bucket 的请求。
类型:Boolean
默认值:false
rgwlogobjectname
描述:对象名的记录格式。关于格式说明见 date
类型:Date
默认值:%Y-%m-%d-%H-%i-%n
rgwlogobjectnameutc
描述:记录的对象名是否需包含 UTC 时间,设置为 false 时将使用本地时间。
类型:Boolean
默认值:false
rgwusagemaxshards
描述:使用率日志的最大可分片数量。
类型:Integer
默认值:32
rgwusagemaxusershards
描述:单个用户使用率日志的最大可分片数量。
类型:Integer
默认值:1
rgwenableopslog
描述:允许记录各次成功的 Ceph 对象网关操作。
类型:Boolean
默认值:false
rgwenableusagelog
描述:允许记录使用率日志。
类型:Boolean
默认值:false
rgwopslogrados
描述:操作日志是否应该写入 Ceph 存储集群后端。
类型:Boolean
默认值:true
rgwopslogsocketpath
描述:用于写入操作日志的 Unix 域套接字。
类型:String
默认值:None
rgwopslogdatabacklog
描述:最多积攒多少操作日志数据才写入 Unix 域套接字。
类型:Integer
默认值:5<<20
rgwusagelogflushthreshold
描述:使用率日志合并过多少条目才刷回。
类型:Integer
默认值:1024
rgwusagelogtickinterval
描述:n 秒执行一次使用率日志刷回。
类型:Integer
默认值:30
rgwintentlogobjectname
描述:意图日志对象名的记录格式。格式的详细说明见 date
类型:Date
默认值:%Y-%m-%d-%i-%n
rgwintentlogobjectnameutc
描述:意图日志对象名是否应包含 UTC 时间,设置为 false 时使用本地时间。
类型:Boolean
默认值:false
rgwdatalogwindow
描述:数据日志窗口,秒。
类型:Integer
默认值:30
rgwdatalogchangessize
描述:内存中保留的数据变更日志条数。
类型:Integer
默认值:1000
rgwdatalognumshards
描述:用于保存数据变更日志的分片(对象)数量。
类型:Integer
默认值:128
rgwdatalogobjprefix
描述:数据日志的对象名前缀。
类型:String
默认值:data_log
rgwreplicalogobjprefix
描述:复制日志的对象名前缀。
类型:String
默认值:replicalog
rgwmdlogmaxshards
描述:用于元数据日志的最大分片数。
类型:Integer
默认值:64

Keystone 选项

rgwkeystoneurl
描述:Keystone 服务器的 URL 。
类型:String
默认值:None
rgwkeystoneadmintoken
描述:Keystone 的管理令牌(共享密钥)。
类型:String
默认值:None
rgwkeystoneacceptedroles
描述:要接受请求所需的角色。
类型:String
默认值:Member,admin
rgwkeystonetokencachesize
描述:各 Keystone 令牌缓存的最大条数。
类型:Integer
默认值:10000
rgwkeystonerevocationinterval
描述:令牌有效期查验的周期,秒。
类型:Integer
默认值:15*60
rgwkeystoneverifyssl
描述:将 token 请求发送给 keystone 时验证 SSL 证书.
类型:Boolean
默认值:true