radosgw – rados REST 风格的网关

提纲

radosgw

描述

radosgw 是 RADOS 对象存储的一个 HTTP REST 网关,是 Ceph 分布式存储系统的一部分。它是用 libfcgi 实现的一个 FastCGI 模块,可联合任何支持 FastCGI 功能的网页服务器使用。

选项

  • -c ceph.conf, —conf=ceph.conf
  • 用指定的 ceph.conf 配置文件而非默认的 /etc/ceph/ceph.conf 来确定启动时所需的监视器地址。
  • -m monaddress[:port]
  • 连接到指定监视器,而非通过 ceph.conf 查询。
  • -i ID, —id ID
  • 设置 radosgw 名字的 ID 部分。
  • -n TYPE.ID, —name TYPE.ID
  • 设置网关的 rados 用户名(如 client.radosgw.gateway )。
  • —cluster NAME
  • 设置集群名称(默认: ceph )
  • -d
  • 在前台运行,日志记录到标准错误
  • -f
  • 在前台运行,日志记录到正常位置
  • —rgw-socket-path=path
  • 指定 Unix 域套接字的路径
  • —rgw-region=region
  • radosgw 所在 region
  • —rgw-zone=zone
  • radosgw 所在的区域

配置

先前的 RADOS 网关配置依赖 Apachemod_fastcgi ;现在则用 mod_proxy_fcgi 替换了 mod_fastcgi ,因为后者使用了非自由许可证。 mod_proxy_fcgi 不同于传统的 FastCGI 模块,它需要 mod_proxy 模块所支持的 FastCGI 协议。所以,要处理 FastCGI 协议,服务器需同时有 mod_proxymod_proxy_fcgi 模块。不像 mod_fastcgimod_proxy_fcgi 不能启动应用进程。某些平台提供了 fcgistarter 来实现此功能。然而, FastCGI 应用框架有可能具备外部启动或进程管理功能。

Apache 可以通过本机 TCP 连接或 Unix 域套接字使用 mod_proxy_fcgi 模块。不支持 Unix 域套接字的 mod_proxy_fcgi ,像 Apache 2.2 和 2.4 的早期版本,必需通过本机 TCP 连接。

  • 更改 /etc/ceph/ceph.conf 文件,让 radosgw 使用 TCP 而非 Unix 域套接字。
  1. [client.radosgw.gateway]
  2. host = {hostname}
  3. keyring = /etc/ceph/ceph.client.radosgw.keyring
  4. rgw socket path = ""
  5. log file = /var/log/ceph/client.radosgw.gateway.log
  6. rgw frontends = fastcgi socket_port=9000 socket_host=0.0.0.0
  7. rgw print continue = false
  • 把下列内容加入网关配置文件:

在 Debian/Ubuntu 上,加入 /etc/apache2/conf-available/rgw.conf

  1. <VirtualHost *:80>
  2. ServerName localhost
  3. DocumentRoot /var/www/html
  4.  
  5. ErrorLog /var/log/apache2/rgw_error.log
  6. CustomLog /var/log/apache2/rgw_access.log combined
  7.  
  8. # LogLevel debug
  9.  
  10. RewriteEngine On
  11.  
  12. RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
  13.  
  14. SetEnv proxy-nokeepalive 1
  15.  
  16. ProxyPass / fcgi://localhost:9000/
  17.  
  18. </VirtualHost>

在 CentOS/RHEL 上,加入 /etc/httpd/conf.d/rgw.conf:

<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/html

ErrorLog /var/log/httpd/rgw_error.log
CustomLog /var/log/httpd/rgw_access.log combined

# LogLevel debug

RewriteEngine On

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

SetEnv proxy-nokeepalive 1

ProxyPass / fcgi://localhost:9000/

</VirtualHost>
  • 对于搭载了支持 Unix 域套接字的 Apache 2.4.9 及更高版的发行版,可使用下列配置:
[client.radosgw.gateway]
host = {hostname}
keyring = /etc/ceph/ceph.client.radosgw.keyring
rgw socket path = /var/run/ceph/ceph.radosgw.gateway.fastcgi.sock
log file = /var/log/ceph/client.radosgw.gateway.log
rgw print continue = false
  • 把下列内容加入网关配置文件中:

在 CentOS/RHEL 上,加入 /etc/httpd/conf.d/rgw.conf:

<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/html

ErrorLog /var/log/httpd/rgw_error.log
CustomLog /var/log/httpd/rgw_access.log combined

# LogLevel debug

RewriteEngine On

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

SetEnv proxy-nokeepalive 1

ProxyPass / unix:///var/run/ceph/ceph.radosgw.gateway.fastcgi.sock|fcgi://localhost:9000/

</VirtualHost>

Ubuntu 14.04 自带 Apache2.4.7 ,它不支持 Unix 域套接字,所以必须配置成本机 TCP 。 Unix 域套接字支持存在于 Apache2.4.9 及其后续版本中。已经有人提交了申请,要求把 UDS 支持移植到 Ubuntu14.04 的 Apache2.4.7 。在这里:https://bugs.launchpad.net/ubuntu/+source/apache2/+bug/1411030

  • 给 radosgw 生成一个密钥,用于到集群认证。
ceph-authtool -C -n client.radosgw.gateway --gen-key /etc/ceph/keyring.radosgw.gateway
ceph-authtool -n client.radosgw.gateway --cap mon 'allow rw' --cap osd 'allow rwx' /etc/ceph/keyring.radosgw.gateway
  • 把密钥导入集群。
ceph auth add client.radosgw.gateway --in-file=keyring.radosgw.gateway
  • 启动 Apache 和 radosgw 。

Debian/Ubuntu:

sudo /etc/init.d/apache2 start
sudo /etc/init.d/radosgw start

CentOS/RHEL:

sudo apachectl start
sudo /etc/init.d/ceph-radosgw start

记录使用日志

radosgw 会异步地维护使用率日志,它会累积用户操作统计并周期性地刷回。可用 radosgw-admin 访问和管理日志。

记录的信息包括数据传输总量、操作总量、成功操作总量。这些数据是按小时记录到桶所有者名下的,除非操作是针对服务的(如罗列桶时),这时会记录到操作用户名下。

下面是个配置实例:

[client.radosgw.gateway]
rgw enable usage log = true
rgw usage log tick interval = 30
rgw usage log flush threshold = 1024
rgw usage max shards = 32
rgw usage max user shards = 1

碎片总数决定着总共需要多少对象来保存使用日志信息。每用户碎片数确定了为单个用户保存使用信息需多少对象。 tick interval 可配置刷回日志的间隔秒数, flush threshold 决定了保留的日志条数达到多少才调用异步刷回。

使用范围

radosgw 是 Ceph 的一部分,这是个伸缩力强、开源、分布式的存储系统,更多信息参见 http://ceph.com/docs

参考

ceph(8)radosgw-admin(8)