Red Hat Enterprise Linux 对象网关指南
在 Red Hat Enterprise Linux 上配置和管理 Ceph 存储对象网关
摘要
第 1 章 概述 复制链接链接已复制到粘贴板!
Ceph 对象网关(也称为 RADOS 网关(RGW))是在 librados 基础上构建的对象存储接口,为应用提供 Ceph 存储群集的 RESTful 网关。Ceph 对象网关支持两个接口:
- S3 兼容: 提供对象存储功能,与 Amazon S3 RESTful API 的大子集兼容。
- Swift 兼容: 提供对象存储功能,与 OpenStack Swift API 的大子集兼容。
Ceph 对象网关是与 Ceph 存储集群交互的服务器。由于它提供与 OpenStack Swift 和 Amazon S3 兼容的接口,Ceph 对象网关具有自己的用户管理。Ceph 对象网关可以将数据存储到同一 Ceph 存储群集中,用于存储来自 Ceph 块设备客户端的数据;不过,它涉及单独的池,可能会涉及到不同的 CRUSH 层次结构。S3 和 Swift API 共享一个通用命名空间,因此您可以通过一个 API 写入数据,并在另一个 API 检索数据。
不要对 RGW 使用的池使用 RADOS 快照。这样做可能会导致不必要的数据不一致。
第 2 章 Configuration 复制链接链接已复制到粘贴板!
2.1. CivetWeb 前端 复制链接链接已复制到粘贴板!
默认情况下,Ceph 对象网关利用 CivetWeb Web 服务器通过 HTTP 公开其 RESTful 接口。Civetweb 是可嵌入的 C/C++ 嵌入式 Web 服务器。
其它资源
2.2. 更改 CivetWeb 端口 复制链接链接已复制到粘贴板!
使用 Ansible 安装 Ceph 对象网关时,它会将 CivetWeb 配置为在端口 8080 上运行。Ansible 通过在 Ceph 配置文件中添加类似如下的行来实现此操作:
rgw frontends = civetweb port=192.168.122.199:8080 num_threads=100
如果 Ceph 配置文件不包含 rgw frontends = civetweb 行,Ceph 对象网关侦听端口 7480。如果它包含 rgw_frontends = civetweb 行,但没有指定端口,Ceph 对象网关侦听端口 80。
由于 Ansible 将 Ceph 对象网关配置为侦听端口 8080,并且安装红帽 Ceph 存储 3 的支持方式是使用 ceph-ansible,因此端口 8080 被视为红帽 Ceph 存储 3 文档中的默认端口。
先决条件
- 正在运行的红帽 Ceph 存储 3.3 集群。
- Ceph 对象网关节点.
流程
-
在网关节点上,打开
/etc/ceph/目录中的 Ceph 配置文件。 找到类似以下示例的 RGW 客户端部分:
[client.rgw.gateway-node1] host = gateway-node1 keyring = /var/lib/ceph/radosgw/ceph-rgw.gateway-node1/keyring log file = /var/log/ceph/ceph-rgw-gateway-node1.log rgw frontends = civetweb port=192.168.122.199:8080 num_threads=100[client.rgw.gateway-node1]标题将 Ceph 配置文件的这一部分标识为配置 Ceph 存储集群客户端,其中客户端类型是由rgw标识的 Ceph 对象网关,节点的名称则是gateway-node1。将默认 Ansible 配置的端口
8080更改为80,编辑rgw frontends行:rgw frontends = civetweb port=192.168.122.199:80 num_threads=100确保
rgw_frontends键/值对中的port= port-number之间没有空格。在您要更改端口的任何其他网关节点上重复此步骤。
从每个网关节点重启 Ceph 对象网关服务,使新端口设置生效:
# systemctl restart ceph-radosgw.target确定在每个网关节点的防火墙中打开配置的端口:
# firewall-cmd --list-all如果没有打开端口,请添加端口并重新载入防火墙配置:
# firewall-cmd --zone=public --add-port 80/tcp --permanent # firewall-cmd --reload
其它资源
- 如需更多信息,请参阅 通过 CivetWeb 使用 SSL。
- 如需更多信息,请参阅 Civetweb 配置选项。
2.3. 将 SSL 与 Civetweb 一起使用 复制链接链接已复制到粘贴板!
在 Red Hat Ceph Storage 1 中,对 Ceph 对象网关的 Civetweb SSL 支持依赖于 HAProxy 和 keepalived。在 Red Hat Ceph Storage 2 及更新的版本中,Civetweb 可以使用 OpenSSL 库来提供传输层安全性(TLS)。
生产部署 MUST 使用 HAProxy 和 keepalived 在 HAProxy 终止 SSL 连接。建议仅通过 Civetweb 使用 SSL 进行 中小型 测试和预生产 部署。
若要将 SSL 与 Civetweb 一起使用,请从与网关节点主机名匹配的证书颁发机构(CA)获取证书。红帽建议从具有 主题备用名称 字段的 CA 获取证书,并使用通配符与 S3 样式子域一起使用。
Civetweb 需要在单个 .pem 文件中提供密钥、服务器证书以及任何其他证书颁发机构或中间证书。
a .pem 文件包含 secret key。保护 .pem 文件免受未经授权的访问。
若要配置 SSL 的端口,请将端口号添加到 rgw_frontends,并将 s 附加到端口号,以指明它是一个安全端口。另外,使用指向 .pem 文件的路径添加 ssl_certificate。例如:
[client.rgw.{hostname}]
rgw_frontends = "civetweb port=443s ssl_certificate=/etc/ceph/private/server.pem"
2.4. Civetweb 配置选项 复制链接链接已复制到粘贴板!
以下 Civetweb 配置选项可以传递到 RADOS 网关的 Ceph 配置文件中的嵌入式 Web 服务器:每个选项都有一个默认值,如果没有指定值,则默认值为空。
| 选项 | 描述 | 默认 |
|---|---|---|
|
| 用于访问日志的文件的路径。完整路径或相对于当前工作目录的相对路径。如果不存在(默认),则不会记录访问权限。 | 空 |
|
| 错误日志的文件路径。完整路径或相对于当前工作目录的相对路径。如果缺少 (默认),则不会记录错误. | 空 |
|
| worker 线程数量。Civetweb 在一个单独的线程中处理每个传入的连接。因此,此选项的值实际上就是 Civetweb 可以处理的并发 HTTP 连接数。 | 512 |
|
| 网络读取和网络写入操作的超时,以毫秒为单位。如果客户端计划保持长时间的连接,可以增加这个值或(更好)使用 keep-alive 消息。 | 30000 |
如果设置 num_threads,它将覆盖 rgw_thread_pool_size。因此,可以将两者都设置为相同的值,或者仅设置 rgw_thread_pool_size 且不设置 num_threads。默认情况下,ceph -ansible 将两个变量都设为 512。
以下是设置了其中一些选项的 /etc/ceph/ceph.conf 文件示例:
...
[client.rgw.node1]
rgw frontends = civetweb request_timeout_ms=30000 error_log_file=/var/log/radosgw/civetweb.error.log access_log_file=/var/log/radosgw/civetweb.access.log
2.5. 使用 Beast 前端 复制链接链接已复制到粘贴板!
Ceph 对象网关将 CivetWeb 和 Beast 嵌入式 HTTP 服务器作为前端提供。Beast 前端使用 Boost.Beast 库进行 HTTP 解析,Beast 前端将 Boost.Asio 库用于异步网络 I/O。由于 CivetWeb 是默认的前端,因此使用 Beast 前端在红帽 Ceph 存储 配置文件中的 rgw_frontends 参数中指定它。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 已安装 Ceph 对象网关。
流程
修改管理服务器上的
/etc/ceph/ceph.conf配置文件:-
添加一个标题为
[client.rgw.<gateway-node>]的部分,将<gateway-node>替换为 Ceph 对象网关节点的短节点名称。 -
使用
hostname -s检索主机的短名称。 例如,如果网关节点名称是
gateway-node1,请在/etc/ceph/ceph.conf文件的[global]部分后添加如下部分:[client.rgw.gateway-node1] rgw frontends = beast endpoint=192.168.0.100:80
-
添加一个标题为
将更新的配置文件复制到 Ceph 对象网关节点和其他 Ceph 节点。
# scp /etc/ceph/ceph.conf <ceph-node>:/etc/ceph重启 Ceph 对象网关以启用 Beast 前端:
# systemctl restart ceph-radosgw.target确保节点的防火墙上已打开配置的端口。如果未打开,请添加端口并重新加载防火墙配置。例如,在 Ceph 对象网关节点上执行:
# firewall-cmd --list-all # firewall-cmd --zone=public --add-port 80/tcp --permanent # firewall-cmd --reload
其它资源
- 如需更多信息,请参阅 Beast 配置选项。
2.6. Past 配置选项 复制链接链接已复制到粘贴板!
以下 Beast 配置选项可以传递到 RADOS 网关的 Ceph 配置文件中的嵌入式 Web 服务器:每个选项都有一个默认值。如果没有指定值,则默认值为空。
| 选项 | 描述 | 默认 |
|---|---|---|
|
|
以地址 [ | 空 |
|
| 用于启用 SSL 端点的 SSL 证书文件路径。 | 空 |
|
|
用于启用 SSL 端点的私钥文件的可选路径。如果未提供文件,则使用 | 空 |
使用 SSL 的 Beast 选项的 /etc/ceph/ceph.conf 文件示例:
...
[client.rgw.node1]
rgw frontends = beast ssl_endpoint=192.168.0.100:443 ssl_certificate=<path to SSL certificate>
其它资源
- 如需更多信息 ,请参阅使用 Beast 前端。
2.7. 向 DNS 添加通配符 复制链接链接已复制到粘贴板!
要将 Ceph 与 S3 样式子域搭配使用,如 bucket-name.domain-name.com,请向 DNS 服务器的 DNS 记录添加通配符,供 ceph-radosgw 守护进程用于解析域名。
对于 dnsmasq,使用主机名前的句点(.)添加以下地址设置:
address=/.{hostname-or-fqdn}/{host-ip-address}
例如:
address=/.gateway-node1/192.168.122.75
对于 绑定,向 DNS 记录添加一个通配符。例如:
$TTL 604800
@ IN SOA gateway-node1. root.gateway-node1. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS gateway-node1.
@ IN A 192.168.122.113
* IN CNAME @
重启 DNS 服务器并使用子域对服务器发出 ping 命令,以确保 ceph-radosgw 守护进程可以处理子域请求:
ping mybucket.{hostname}
例如:
ping mybucket.gateway-node1
如果 DNS 服务器位于本地计算机上,您可能需要通过为本地机器添加 nameserver 条目来修改 /etc/resolv.conf。
最后,使用 rgw_dns_name = {hostname 部分中指定 DNS 服务器的主机名或地址。例如:
} 设置在 Ceph 配置文件的相应 [client.rgw.{instance} ]
[client.rgw.rgw1]
...
rgw_dns_name = {hostname}
作为最佳实践,请在中央位置(如管理节点或 ceph-ansible )更改 Ceph 配置文件,并根据需要重新分发配置文件,以确保集群间的一致性。
最后,重新启动 Ceph 对象网关,以使 DNS 设置生效。
2.8. 调整日志记录和调试输出 复制链接链接已复制到粘贴板!
完成设置过程后,检查日志输出以确保它满足您的需要。如果遇到与配置相关的问题,您可以在 Ceph 配置文件的 [global] 部分中增加日志和调试消息,并重新启动网关,以帮助对所有配置问题进行故障排除。例如:
[global]
#append the following in the global section.
debug ms = 1
debug rgw = 20
debug civetweb = 20
您还可以在运行时修改这些设置。例如:
# ceph tell osd.0 injectargs --debug_civetweb 10/20
默认情况下,Ceph 日志文件位于 /var/log/ceph 中。
有关日志记录和调试的一般详情,请参阅《红帽 Ceph 存储 3 配置指南》 中的日志配置 参考 一章。有关特定于 Ceph 对象网关的日志记录的详细信息,请参阅本指南的日志 配置参考 一章中的 Ceph 对象网关 章节。
2.9. S3 API Server-side Encryption 复制链接链接已复制到粘贴板!
Ceph 对象网关支持对 S3 API 的上载对象进行服务器端加密。服务器端加密意味着 S3 客户端以未加密的形式通过 HTTP 发送数据,而 Ceph 对象网关以加密的形式将数据存储在 Ceph 存储群集中。
红帽不支持 SLO(静态大对象)和 DLO(Dynamic 大型对象)的 S3 对象加密。
若要使用加密,客户端请求 MUST 通过 SSL 连接发送请求。除非 Ceph 对象网关使用 SSL,否则红帽不支持从客户端进行 S3 加密。但是,出于测试目的,管理员可以在测试期间禁用 SSL,方法是 在运行时 将 rgw_crypt_require_ssl 配置设置设置为 false,在 Ceph 配置文件中将其设置为 false,并在 Ansible 配置文件中将其设置为 false,并代表 Ceph 对象网关的 Ansible playbook。
管理加密密钥有两个选项:
客户提供的密钥
在使用客户提供的密钥时,S3 客户端会传递加密密钥以及每个请求来读取或写入加密数据。客户负责管理这些密钥。客户必须记住用于加密每个对象的 Ceph 对象网关的关键是什么。
Ceph 对象网关根据 Amazon SSE-C 规范在 S3 API 中实施客户提供的关键行为。
由于客户处理密钥管理,并且 S3 客户端将密钥传递到 Ceph 对象网关,因此 Ceph 对象网关不需要特殊配置来支持这种加密模式。
密钥管理服务
在使用密钥管理服务时,安全密钥管理服务存储密钥,Ceph 对象网关则按需检索密钥,为数据加密或解密请求提供服务。
Ceph 对象网关根据 Amazon SSE-KMS 规范在 S3 API 中实施关键管理服务行为。
目前,唯一经过测试的密钥管理实施使用 OpenStack Barbican。但是,尚未全面支持使用 OpenStack Barbican。在生产中使用它的唯一方法是获得支持例外。有关更多信息,请联系 技术支持。
2.10. 测试网关 复制链接链接已复制到粘贴板!
若要使用 REST 接口,首先要为 S3 接口创建初始 Ceph 对象网关用户。然后,为 Swift 接口创建一个子用户。然后,您需要验证创建的用户是否能够访问该网关。
2.10.1. 创建 S3 用户 复制链接链接已复制到粘贴板!
若要测试网关,请创建 S3 用户并授予用户访问权限。man radosgw-admin 命令提供关于其他命令选项的信息。
在多站点部署中,始终在 master zone group 的 master zone 中的主机上创建用户。
先决条件
-
root或sudo访问权限 - 已安装 Ceph 对象网关
流程
创建 S3 用户:
radosgw-admin user create --uid=name --display-name="First User"使用 S3 用户的名称替换 name,例如:
[root@master-zone]# radosgw-admin user create --uid="testuser" --display-name="First User" { "user_id": "testuser", "display_name": "First User", "email": "", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [], "keys": [ { "user": "testuser", "access_key": "CEP28KDIQXBKU4M15PDC", "secret_key": "MARoio8HFc8JxhEilES3dKFVj8tV3NOOYymihTLO" } ], "swift_keys": [], "caps": [], "op_mask": "read, write, delete", "default_placement": "", "placement_tags": [], "bucket_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "user_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "temp_url_keys": [], "type": "rgw" }验证输出,以确保
access_key和secret_key的值不包含 JSON 转义字符(\)。访问验证需要这些值,但如果值包含 JSON 转义字符,某些客户端将无法处理。要解决这个问题,请执行以下操作之一:- 删除 JSON 转义字符。
- 将字符串封装在引号内。
- 重新生成密钥,并确保 不包含 JSON 转义字符。
- 手动指定密钥和 secret。
不要删除正斜杠
/,因为它是一个有效的字符。
2.10.2. 创建 Swift 用户 复制链接链接已复制到粘贴板!
要测试 Swift 接口,请创建一个 Swift 子用户。创建 Swift 用户分为两个步骤:第一步是创建用户。第二步是创建机密密钥。
在多站点部署中,始终在 master zone group 的 master zone 中的主机上创建用户。
先决条件
-
root或sudo访问权限 - 已安装 Ceph 对象网关
流程
创建 Swift 用户:
radosgw-admin subuser create --uid=name --subuser=name:swift --access=full使用 Swift 用户名替换 name , 例如:
[root@master-zone]# radosgw-admin subuser create --uid=testuser --subuser=testuser:swift --access=full { "user_id": "testuser", "display_name": "First User", "email": "", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [ { "id": "testuser:swift", "permissions": "full-control" } ], "keys": [ { "user": "testuser", "access_key": "O8JDE41XMI74O185EHKD", "secret_key": "i4Au2yxG5wtr1JK01mI8kjJPM93HNAoVWOSTdJd6" } ], "swift_keys": [ { "user": "testuser:swift", "secret_key": "13TLtdEW7bCqgttQgPzxFxziu0AgabtOc6vM8DLA" } ], "caps": [], "op_mask": "read, write, delete", "default_placement": "", "placement_tags": [], "bucket_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "user_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "temp_url_keys": [], "type": "rgw" }创建 secret 密钥:
radosgw-admin key create --subuser=name:swift --key-type=swift --gen-secret使用 Swift 用户名替换 name , 例如:
[root@master-zone]# radosgw-admin key create --subuser=testuser:swift --key-type=swift --gen-secret { "user_id": "testuser", "display_name": "First User", "email": "", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [ { "id": "testuser:swift", "permissions": "full-control" } ], "keys": [ { "user": "testuser", "access_key": "O8JDE41XMI74O185EHKD", "secret_key": "i4Au2yxG5wtr1JK01mI8kjJPM93HNAoVWOSTdJd6" } ], "swift_keys": [ { "user": "testuser:swift", "secret_key": "a4ioT4jEP653CDcdU8p4OuhruwABBRZmyNUbnSSt" } ], "caps": [], "op_mask": "read, write, delete", "default_placement": "", "placement_tags": [], "bucket_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "user_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "temp_url_keys": [], "type": "rgw" }
2.10.3. 测试 S3 访问 复制链接链接已复制到粘贴板!
您需要编写并运行 Python 测试脚本来验证 S3 访问权限。S3 访问测试脚本将连接到 radosgw,创建一个新 bucket 并列出所有存储桶。aws_access_key_id 和 aws_secret_access_key 的值取自 radosgw key 的值。
_admin 命令返回的 access __key 和 secret
执行以下步骤:
启用 common 存储库。
# subscription-manager repos --enable=rhel-7-server-rh-common-rpms安装
python-boto软件包。sudo yum install python-boto创建 Python 脚本:
vi s3test.py在文件中添加以下内容:
import boto import boto.s3.connection access_key = $access secret_key = $secret boto.config.add_section('s3') conn = boto.connect_s3( aws_access_key_id = access_key, aws_secret_access_key = secret_key, host = 's3.<zone>.hostname', port = <port>, is_secure=False, calling_format = boto.s3.connection.OrdinaryCallingFormat(), ) bucket = conn.create_bucket('my-new-bucket') for bucket in conn.get_all_buckets(): print "{name}\t{created}".format( name = bucket.name, created = bucket.creation_date, )-
将
<zone> 替换为您配置网关服务的主机的区域名称。也就是说,网关主机。确保主机设置通过 DNS 解析。将<port>替换为网关的端口号。 -
将
$access和$secret替换为 Create an S3 User 部分中的access值。_key和 secret_key
-
将
运行脚本:
python s3test.py输出结果类似如下:
my-new-bucket 2015-02-16T17:09:10.000Z
2.10.4. 测试 Swift 访问 复制链接链接已复制到粘贴板!
可以通过 swift 命令行客户端验证 Swift 访问权限。命令 man swift 将提供有关可用命令行选项的更多信息。
要安装 swift 客户端,请执行以下操作:
sudo yum install python-setuptools
sudo easy_install pip
sudo pip install --upgrade setuptools
sudo pip install --upgrade python-swiftclient
要测试 swift 访问,请执行以下操作:
swift -A http://{IP ADDRESS}:{port}/auth/1.0 -U testuser:swift -K '{swift_secret_key}' list
将 {IP ADDRESS} 替换为网关服务器的公共 IP 地址,将 {swift_secret_key} 替换为为 swift 用户执行的 radosgw-admin key create 命令中的值。将 {port} 替换为您要使用 Civetweb 的端口号(例如,80 80 是默认值)。如果不替换端口,它将默认为端口 80。
例如:
swift -A http://10.19.143.116:8080/auth/1.0 -U testuser:swift -K '244+fz2gSqoHwR3lYtSbIyomyPHf3i7rgSJrF/IA' list
输出应该是:
my-new-bucket
2.11. 配置 HAProxy/keepalived 复制链接链接已复制到粘贴板!
Ceph 对象网关允许您将多个对象网关实例分配到一个区域,以便您可以在负载增加时横向扩展,即相同的 zone group 和 zone;但是,您不需要联合架构来使用 HAProxy/keepalived。由于每个对象网关实例都有自己的 IP 地址,因此您可以使用 HAProxy 和 keepalived 在 Ceph 对象网关服务器之间平衡负载。
HAProxy 和 keepalived 的另一个用例是在 HAProxy 服务器上终止 HTTPS。红帽 Ceph 存储(RHCS)1.3.x 使用 Civetweb,而 RHCS 1.3.x 中的实施不支持 HTTPS。您可以使用 HAProxy 服务器在 HAProxy 服务器上终止 HTTPS,并在 HAProxy 服务器和 Civetweb 网关实例之间使用 HTTP。
2.11.1. HAProxy/keepalived 先决条件 复制链接链接已复制到粘贴板!
要使用 Ceph 对象网关设置 HA 代理,您必须具有:
- 正在运行的 Ceph 集群
-
同一区域中至少有两个 Ceph 对象网关服务器,配置为在端口
80上运行。如果您遵循简单的安装过程,网关实例默认位于同一 zone group 和 zone 中。如果您使用联合架构,请确保实例位于同一 zone group 和 zone 中;以及, -
HAProxy 和
keepalived至少两台服务器。
本节假定您在运行测试脚本时至少有两个 Ceph 对象网关服务器运行,并且您在通过端口 80 运行测试脚本时从各自获得有效的响应。
有关 HAProxy 和 keepalived 的详细讨论,请参阅 负载平衡器管理。
2.11.2. 准备 HAProxy 节点 复制链接链接已复制到粘贴板!
以下设置假定两个名为 haproxy 和 haproxy 2 的 HAProxy 节点,以及名为 rgw1 和 的 Ceph 对象网关服务器。您可以使用您喜欢的任何命名规则。在至少两个 HAProxy 节点上执行以下步骤:
rgw 2
- 安装 RHEL 7.x.
注册节点。
[root@haproxy]# subscription-manager register启用 RHEL 服务器存储库。
[root@haproxy]# subscription-manager repos --enable=rhel-7-server-rpms更新服务器。
[root@haproxy]# yum update -y-
根据需要安装管理工具(如
wget、vim 等)。 打开端口
80。[root@haproxy]# firewall-cmd --zone=public --add-port 80/tcp --permanent [root@haproxy]# firewall-cmd --reload对于 HTTPS,打开端口
443。[root@haproxy]# firewall-cmd --zone=public --add-port 443/tcp --permanent [root@haproxy]# firewall-cmd --reload
2.11.3. 安装和配置 keepalived 复制链接链接已复制到粘贴板!
在至少两个 HAProxy 节点上执行以下步骤:
先决条件
- 至少两个 HAProxy 节点。
- 至少两个对象网关节点。
流程
安装
keepalived:[root@haproxy]# yum install -y keepalived配置
keepalived在两个 HAProxy 节点上:[root@haproxy]# vim /etc/keepalived/keepalived.conf在配置文件中,有一个用于检查
haproxy进程脚本:vrrp_script chk_haproxy { script "killall -0 haproxy" # check the haproxy process interval 2 # every 2 seconds weight 2 # add 2 points if OK }接下来,主负载平衡器和备份负载平衡器上的实例使用
eno1作为网络接口。它还分配虚拟 IP 地址,即192.168.1.20。Master 负载均衡器节点
vrrp_instance RGW { state MASTER # might not be necessary. This is on the Master LB node. @main interface eno1 priority 100 advert_int 1 interface eno1 virtual_router_id 50 @main unicast_src_ip 10.8.128.43 80 unicast_peer { 10.8.128.53 } authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.20 } track_script { chk_haproxy } } virtual_server 192.168.1.20 80 eno1 { #populate correct interface delay_loop 6 lb_algo wlc lb_kind dr persistence_timeout 600 protocol TCP real_server 10.8.128.43 80 { # ip address of rgw2 on physical interface, haproxy listens here, rgw listens to localhost:8080 or similar weight 100 TCP_CHECK { # perhaps change these to a HTTP/SSL GET? connect_timeout 3 } } real_server 10.8.128.53 80 { # ip address of rgw3 on physical interface, haproxy listens here, rgw listens to localhost:8080 or similar weight 100 TCP_CHECK { # perhaps change these to a HTTP/SSL GET? connect_timeout 3 } } }备份负载均衡器节点
vrrp_instance RGW { state BACKUP # might not be necessary? priority 99 advert_int 1 interface eno1 virtual_router_id 50 unicast_src_ip 10.8.128.53 80 unicast_peer { 10.8.128.43 } authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.20 } track_script { chk_haproxy } } virtual_server 192.168.1.20 80 eno1 { #populate correct interface delay_loop 6 lb_algo wlc lb_kind dr persistence_timeout 600 protocol TCP real_server 10.8.128.43 80 { # ip address of rgw2 on physical interface, haproxy listens here, rgw listens to localhost:8080 or similar weight 100 TCP_CHECK { # perhaps change these to a HTTP/SSL GET? connect_timeout 3 } } real_server 10.8.128.53 80 { # ip address of rgw3 on physical interface, haproxy listens here, rgw listens to localhost:8080 or similar weight 100 TCP_CHECK { # perhaps change these to a HTTP/SSL GET? connect_timeout 3 } } }启用并启动
keepalived服务:[root@haproxy]# systemctl enable keepalived [root@haproxy]# systemctl start keepalived
其它资源
-
有关配置
keepalived的详细讨论,请参阅 Keepalived 初始负载平衡器配置。
2.11.4. 安装和配置 HAProxy 复制链接链接已复制到粘贴板!
在至少两个 HAProxy 节点上执行以下步骤:
安装
haproxy。[root@haproxy]# yum install haproxy为 SELinux 和 HTTP 配置
haproxy。[root@haproxy]# vim /etc/firewalld/services/haproxy-http.xml添加以下行:
<?xml version="1.0" encoding="utf-8"?> <service> <short>HAProxy-HTTP</short> <description>HAProxy load-balancer</description> <port protocol="tcp" port="80"/> </service>以
root身份,为haproxy-http.xml文件分配正确的 SELinux 上下文和文件权限。[root@haproxy]# cd /etc/firewalld/services [root@haproxy]# restorecon haproxy-http.xml [root@haproxy]# chmod 640 haproxy-http.xml如果要使用 HTTPS,请为 SELinux 和 HTTPS 配置
haproxy。[root@haproxy]# vim /etc/firewalld/services/haproxy-https.xml添加以下行:
<?xml version="1.0" encoding="utf-8"?> <service> <short>HAProxy-HTTPS</short> <description>HAProxy load-balancer</description> <port protocol="tcp" port="443"/> </service>以
root身份,为haproxy-https.xml文件分配正确的 SELinux 上下文和文件权限。# cd /etc/firewalld/services # restorecon haproxy-https.xml # chmod 640 haproxy-https.xml如果您打算使用 HTTPS,请为 SSL 生成密钥。如果您没有证书,您可以使用自签名证书。要生成密钥,请参阅红帽企业 Linux 7 的《系统管理员指南》 中的 生成新密钥和证书一节。
最后,将证书和密钥放入 PEM 文件中。
[root@haproxy]# cat example.com.crt example.com.key > example.com.pem [root@haproxy]# cp example.com.pem /etc/ssl/private/配置
haproxy。[root@haproxy]# vim /etc/haproxy/haproxy.cfg全局和默认值可能保持不变。在defaults部分后,您需要配置frontend和backend部分。例如:frontend http_web *:80 mode http default_backend rgw frontend rgw-https bind *:443 ssl crt /etc/ssl/private/example.com.pem default_backend rgw backend rgw balance roundrobin mode http server rgw1 10.0.0.71:80 check server rgw2 10.0.0.80:80 check有关 HAProxy 配置的详细讨论,请参阅 HAProxy 配置。
enable/start
haproxy[root@haproxy]# systemctl enable haproxy [root@haproxy]# systemctl start haproxy
2.11.5. 测试 HAProxy 配置 复制链接链接已复制到粘贴板!
在 HAProxy 节点上,检查 以确保出现来自 keepalived 配置的虚拟 IP 地址。
[root@haproxy]# ip addr show
在 calamari 节点上,查看您是否能通过负载平衡器配置访问网关节点。例如:
[root@haproxy]# wget haproxy
这应该返回相同的结果,如下:
[root@haproxy]# wget rgw1
如果返回包含以下内容的 index.html 文件:
<?xml version="1.0" encoding="UTF-8"?>
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>anonymous</ID>
<DisplayName></DisplayName>
</Owner>
<Buckets>
</Buckets>
</ListAllMyBucketsResult>
然后,您的配置可以正常工作。
2.12. 为静态 Web 托管配置网关 复制链接链接已复制到粘贴板!
传统的 Web 托管涉及为每个网站设置 Web 服务器,当内容未动态更改时,此服务器会以低效的方式使用资源。Ceph 对象网关可以在 S3 buckets- 中托管静态网站,即不使用 PHP、servlet、数据库、nodejs 等服务器端服务的站点。这种方法比为每个站点设置具有 Web 服务器的虚拟机更经济。
2.12.1. 静态 Web 托管假设 复制链接链接已复制到粘贴板!
静态 Web 托管要求至少有一个正在运行的 Ceph 存储群集,以及至少两个用于静态网站的 Ceph 对象网关实例。红帽假定每个区域都有多个通过 HAProxy/keepalived 进行负载平衡的网关实例。
有关 HAProxy/keepalived 的详情,请参阅配置 HAProxy/keepalived。
红帽 不支持 使用 Ceph 对象网关实例来同时部署标准 S3/Swift API 和静态 Web 主机。
2.12.2. 静态 Web 托管要求 复制链接链接已复制到粘贴板!
静态 Web 托管功能使用自己的 API,因此将网关配置为在 S3 存储桶中使用静态网站需要以下内容:
- S3 静态 Web 托管使用 Ceph 对象网关实例,这些实例与用于标准 S3/Swift API 用例的实例不同。
- 托管 S3 静态网站的网关实例应具有独立于标准 S3/Swift API 网关实例的单独、非覆盖域名。
- 托管 S3 静态网站的网关实例应使用与标准 S3/Swift API 网关实例独立的面向公共的 IP 地址。
- 托管 S3 静态 web 站点负载均衡的网关实例,如有必要,使用 HAProxy/keepalived 终止 SSL。
2.12.3. 静态 Web 托管网关设置 复制链接链接已复制到粘贴板!
要为静态 Web 托管启用网关,请编辑 Ceph 配置文件并添加以下设置:
[client.rgw.<STATIC-SITE-HOSTNAME>]
...
rgw_enable_static_website = true
rgw_enable_apis = s3, s3website
rgw_dns_name = objects-zonegroup.domain.com
rgw_dns_s3website_name = objects-website-zonegroup.domain.com
rgw_resolve_cname = true
...
rgw_enable_static_website 设置 MUST 为 true。rgw_enable_apis 设置 MUST 启用 s3website API。rgw_dns_name 和 rgw_dns_s3website_name 设置必须提供其完全限定的域。如果站点将使用规范名称扩展名,请将 rgw_resolve_cname 设置为 true。
rgw_dns_name 和 rgw_dns_s3website_name 的 FQDN 不 重叠。
2.12.4. 静态 Web 托管 DNS 配置 复制链接链接已复制到粘贴板!
以下是假定 DNS 设置的示例,其中前两行使用标准 S3 接口指定网关实例的域,并分别指向 IPv4 和 IPv6 地址。第三行使用规范名称扩展为 S3 存储桶提供通配符 CNAME 设置。第四行和第五行使用 S3 网站接口指定网关实例的域,并分别指向它们的 IPv4 和 IPv6 地址。
objects-zonegroup.domain.com. IN A 192.0.2.10
objects-zonegroup.domain.com. IN AAAA 2001:DB8::192:0:2:10
*.objects-zonegroup.domain.com. IN CNAME objects-zonegroup.domain.com.
objects-website-zonegroup.domain.com. IN A 192.0.2.20
objects-website-zonegroup.domain.com. IN AAAA 2001:DB8::192:0:2:20
前两行中的 IP 地址与第四和第五个行中的 IP 地址有所不同。
如果在多站点配置中使用 Ceph 对象网关,请考虑使用路由解决方案将流量路由到最接近客户端的网关。
Amazon Web Service(AWS)需要静态 Web 主机存储桶才能与主机名匹配。Ceph 提供了几种不同的配置 DNS 的方式,如果代理具有匹配的证书,HTTPS 将正常工作。
Subdomain 中 Bucket 的主机名
要使用 AWS 风格的 S3 子域,请在 DNS 条目中使用通配符,并可将请求重定向到任何存储桶。DNS 条目可能类似如下:
*.objects-website-zonegroup.domain.com. IN CNAME objects-website-zonegroup.domain.com.
使用以下方法访问存储桶名称:
http://bucket1.objects-website-zonegroup.domain.com
存储桶名称为 bucket1。
主机名到非匹配问题
Ceph 支持将域名映射到 bucket,而不在请求中包含 bucket 名称,这对 Ceph 对象网关而言是唯一的。要使用域名访问 bucket,请将域名映射到 bucket 名称。DNS 条目可能类似如下:
www.example.com. IN CNAME bucket2.objects-website-zonegroup.domain.com.
存储桶名称为 bucket2。
使用以下方法访问存储桶:
http://www.example.com
使用 CNAME 到 Long Bucket 的主机名
AWS 通常需要存储桶名称来匹配域名。要使用 CNAME 为静态 Web 托管配置 DNS,DNS 条目可能类似如下:
www.example.com. IN CNAME www.example.com.objects-website-zonegroup.domain.com.
使用以下方法访问存储桶:
http://www.example.com
没有 CNAME 的 Long Bucket 的主机名
如果 DNS 名称包含其他非 CNAME 记录,如 SOA、NS、MX 或 TXT,DNS 记录必须将域名直接映射到 IP 地址。例如:
www.example.com. IN A 192.0.2.20
www.example.com. IN AAAA 2001:DB8::192:0:2:20
使用以下方法访问存储桶:
http://www.example.com
2.12.5. 创建静态 Web 托管站点 复制链接链接已复制到粘贴板!
要创建静态网站,请执行以下步骤:
-
创建 S3 存储桶。bucket 名称 MAY 与网站的域名相同。例如,
mysite.com可能具有 bucket 名称mysite.com。AWS 需要此功能,但 Ceph 不需要它。详情请参阅 DNS 设置。 -
将静态网站内容上传到 bucket。内容可能包括 HTML、CSS、客户端 JavaScript、图像、音频/视频内容和其他可下载的文件。网站 MUST 具有
index.html文件,并且 MAY 有error.html文件。 - 验证网站内容。此时,只有 bucket 的创建者有权访问其内容。
- 设置文件的权限,以便可以公开读取。
2.13. 将命名空间导出到 NFS-Ganesha 复制链接链接已复制到粘贴板!
在 Red Hat Ceph Storage 3 中,Ceph 对象网关通过将 NFS 版本 3 和 NFS 版本 4.1 用于生产系统来导出 S3 对象命名空间。
NFS Ganesha 功能不用于一般用途,而仅适用于迁移到 S3 云。
其实施符合 Amazon Web Services(AWS)分层命名空间约定,将 UNIX 风格路径名称映射到 S3 存储桶和对象。连接的命名空间的顶级(如果存在)属于 NFSv4 伪根,由 Ceph 对象网关 S3 存储桶组成,其中 bucket 表示为 NFS 目录。bucket 中的对象呈现为 NFS 文件和目录层次结构,遵循 S3 约定。支持创建文件和目录的操作。
不支持创建或删除硬链接或软链接 IS。不支持通过 NFS 对存储桶或目录执行重命名操作,但对目录内和目录间支持的文件以及文件系统和 NFS 挂载之间的文件重命名。通过 NFS 执行文件重命名操作时,其成本会更高,因为它们会更改目标目录,并且通常强制完整 读取目录进行刷新。
不支持通过 NFS mount IS 编辑文件。
Ceph 对象网关要求应用按顺序写入文件偏移 0 至文件末尾。尝试写出订单会导致上传操作失败。要临时解决这个问题,请在将文件复制到 NFS 空间时使用 cp、cat 或 rsync 等实用程序。始终使用 sync 选项挂载。
具有 NFS 的 Ceph 对象网关基于网关服务器的内部库打包,以及用于 NFS-Ganesha NFS 服务器的文件系统抽象层(FSAL)命名空间驱动程序。在运行时,一个 Ceph 对象网关守护进程实例与 NFS 结合了完整的 Ceph 对象网关守护进程,这是一个不含 Civetweb HTTP 服务且在一个进程中具有 NFS-Ganesha 实例的省事。要使用此功能,请部署 NFS-Ganesha 版本 2.3.2 或更高版本。
在包含 NFS-Ganesha(nfs-ganesha-rgw)实例的主机上,执行 启动和配置 NFS-Ganesha 实例前 的步骤。
运行多个 NFS 网关
每个 NFS-Ganesha 实例充当完整的网关端点,但当前的限制是 NFS-Ganesha 实例无法配置为导出 HTTP 服务。与普通网关实例一样,可以启动任意数量的 NFS-Ganesha 实例,从群集导出相同或不同的资源。这可实现 NFS-Ganesha 实例的集群。但是,这并不表示高可用性。
当常规网关实例和 NFS-Ganesha 实例重叠相同的数据资源时,可以从标准 S3 API 和导出的 NFS-Ganesha 实例访问它们。您可以将 NFS-Ganesha 实例与 Ceph 对象网关实例在同一主机上并置。
开始前
- 在尝试运行 NFS-Ganesha 之前,禁用将运行 NFS-Ganesha 的任何主机上运行的任何内核 NFS 服务实例。如果另一个 NFS 实例正在运行,NFS-Ganesha 将不会启动。
作为
root 用户,启用 Red Hat Ceph Storage 3 Tools 存储库:# subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms确保
rpcbind服务正在运行:# systemctl start rpcbind注意提供
rpcbind的 Therpcbind软件包通常会默认安装。否则,请先安装软件包。有关 NFS 如何使用
rpcbind的详细信息,请参阅 Red Hat Enterprise Linux 7 的存储管理指南中的 Required Services 部分。如果
nfs-service服务正在运行,请停止并禁用该服务:# systemctl stop nfs-server.service # systemctl disable nfs-server.service
配置 NFS-Ganesha 实例
安装
nfs-ganesha-rgw软件包:# yum install nfs-ganesha-rgw将 Ceph 配置文件从 Ceph 监控节点复制到 NFS-Ganesha 主机的
/etc/ceph/目录,并根据需要编辑该文件:# scp <mon-host>:/etc/ceph/ceph.conf <nfs-ganesha-rgw-host>:/etc/ceph注意Ceph 配置文件必须包含有效的
[client.rgw.{instance-name}]部分,以及各种必要的网关配置变量的对应参数,如rgw_data、密钥环或rgw_frontends。如果导出不符合有效 S3 存储桶命名要求的 Swift 容器,请将 Ceph 配置文件的[client.rgw]部分中的rgw_relaxed_s3_bucket_names 设置为true。例如,如果 Swift 容器名称包含下划线,则它不是有效的 S3 存储桶名称,并且不会同步,除非rgw_relaxed_s3_bucket_names设为true。当在 NFS 之外添加对象和存储桶时,这些对象会在rgw_nfs_namespace_expire_secs设置的时间里显示在 NFS 命名空间中,默认为大约 5 分钟。覆盖 Ceph 配置文件中的rgw_nfs_namespace_expire_secs的默认值,以更改刷新率。打开 NFS-Ganesha 配置文件:
# vim /etc/ganesha/ganesha.conf使用
FSAL(File System Abstraction Layer)块配置EXPORT部分。提供 ID、S3 用户 ID、S3 访问密钥和机密。对于 NFSv4,它应类似如下:EXPORT { Export_ID={numeric-id}; Path = "/"; Pseudo = "/"; Access_Type = RW; SecType = "sys"; NFS_Protocols = 4; Transport_Protocols = TCP; Squash = No_Root_Squash; FSAL { Name = RGW; User_Id = {s3-user-id}; Access_Key_Id ="{s3-access-key}"; Secret_Access_Key = "{s3-secret}"; } }Path选项指示 Ganesha 在哪里查找导出。对于 VFS FSAL,这是服务器命名空间中的位置。对于其他 FSAL,它可能是由 FSAL 命名空间管理的文件系统中的位置。例如,如果 Ceph FSAL 用于导出整个 CephFS 卷,则路径将是/。Pseudo选项指示 Ganesha 将导出放在 NFS v4 的伪文件系统命名空间内。NFS v4 指定服务器可以构造不与任何实际导出位置对应的伪命名空间,并且该伪文件系统的部分可能仅存在于 NFS 服务器的域中且不与任何物理目录对应。此外,NFS v4 服务器将其所有导出放置在一个命名空间内。可以将单个导出导出为伪文件系统 root,但将多个导出放置在伪文件系统中更为常见。使用传统的 VFS 时,Pseudo位置通常与路径位置相同。使用/作为路径返回到示例 CephFS导出,如果需要多个导出,则导出可能会有其他内容作为Pseudo选项。例如,/ceph。任何应支持 NFSv3 的
EXPORT块都应在NFS_Protocols设置中包含版本 3。此外,NFSv3 是支持 UDP 传输的最后一个主要版本。早期版本的标准包括 UDP,但 RFC 7530 禁止其使用。要启用 UDP,将其包含在Transport_Protocols 设置中。例如:EXPORT { ... NFS_Protocols = 3,4; Transport_Protocols = UDP,TCP; ... }设置
SecType = sys;允许客户端在没有 Kerberos 身份验证的情况下附加.设置
Squash = No_Root_Squash;允许用户在 NFS 挂载中更改目录所有权.使用传统 OS 原生 NFS 4.1 客户端的 NFS 客户端通常会看到由目标服务器的
pseudofsroot 定义的导出文件系统的联合命名空间。其中任意数量的可以是 Ceph 对象网关导出。每个导出都有自己的
名称组User_Id、access_Key和Secret_Access_Key,并且创建对指定用户可见的对象命名空间的代理。ganesha.conf中的导出也可以包含NFSV4块。红帽 Ceph 存储支持Allow_Numeric_Owners和 onlyly_Numberic_Owners参数,作为设置idmapper程序的替代选择。NFSV4 { Allow_Numeric_Owners = true; Only_Numeric_Owners = true; }配置
NFS_CORE_PARAM块。NFS_CORE_PARAM{ mount_path_pseudo = true; }当
mount_path_pseudo配置设置被设置为true时,它将使 NFS v3 和 NFS v4.x 挂载使用相同的服务器侧路径来访问导出,例如:mount -o vers=3 <IP ADDRESS>:/export /mnt mount -o vers=4 <IP ADDRESS>:/export /mntPath Pseudo Tag Mechanism Mount /export/test1 /export/test1 test1 v3 Pseudo mount -o vers=3 server:/export/test1 /export/test1 /export/test1 test1 v3 Tag mount -o vers=3 server:test1 /export/test1 /export/test1 test1 v4 Pseudo mount -o vers=4 server:/export/test1 / /export/ceph1 ceph1 v3 Pseudo mount -o vers=3 server:/export/ceph1 / /export/ceph1 ceph1 v3 Tag mount -o vers=3 server:ceph1 / /export/ceph1 ceph1 v4 Pseudo mount -o vers=4 server:/export/ceph1 / /export/ceph2 ceph2 v3 Pseudo mount -o vers=3 server:/export/ceph2 / /export/ceph2 ceph2 v3 Tag mount -o vers=3 server:ceph2 / /export/ceph2 ceph2 v4 Pseudo mount -o vers=4当
mount_path_pseudo配置设置设为false时,NFS v3 挂载使用Path选项,NFS v4.x 挂载使用Pseudo选项。Path Pseudo Tag Mechanism Mount /export/test1 /export/test1 test1 v3 Path mount -o vers=3 server:/export/test1 /export/test1 /export/test1 test1 v3 Tag mount -o vers=3 server:test1 /export/test1 /export/test1 test1 v4 Pseudo mount -o vers=4 server:/export/test1 / /export/ceph1 ceph1 v3 Path mount -o vers=3 server:/ / /export/ceph1 ceph1 v3 Tag mount -o vers=3 server:ceph1 / /export/ceph1 ceph1 v4 Pseudo mount -o vers=4 server:/export/ceph1 / /export/ceph2 ceph2 v3 Path not accessible / /export/ceph2 ceph2 v3 Tag mount -o vers=3 server:ceph2 / /export/ceph2 ceph2 v4 Pseudo mount -o vers=4 server:/export/ceph2配置
RGW部分。指定实例的名称,提供 Ceph 配置文件的路径,并指定任何初始化参数:RGW { name = "client.rgw.{instance-name}"; ceph_conf = "/etc/ceph/ceph.conf"; init_args = "--{arg}={arg-value}"; }-
保存
/etc/ganesha/ganesha.conf配置文件。 启用并启动
nfs-ganesha服务。# systemctl enable nfs-ganesha # systemctl start nfs-ganesha对于非常大型的伪目录,请将
ceph.conf文件中的可配置参数rgw_nfs_s3_fast_attrs设置为true,使命名空间不可变并加快速度:rgw_nfs_s3_fast_attrs= true从每个网关节点重启 Ceph 对象网关服务
# systemctl restart ceph-radosgw.target
配置 NFSv4 客户端
要访问命名空间,请将配置的 NFS-Ganesha 导出挂载到本地 POSIX 命名空间中的所需位置。如前文所述,这种实施有一些独特的限制:
- 仅支持 NFS 4.1 和更高协议类别。
-
要强制执行写顺序,请使用
sync挂载选项。
要挂载 NFS-Ganesha 导出,请在客户端主机上的 /etc/fstab 文件中添加以下条目:
<ganesha-host-name>:/ <mount-point> nfs noauto,soft,nfsvers=4.1,sync,proto=tcp 0 0
指定 NFS-Ganesha 主机名和客户端上挂载点的路径。
为了成功挂载 NFS-Ganesha 导出,客户端上必须存在 /sbin/mount.nfs 文件。nfs-tools 软件包提供此文件。在大多数情况下,会默认安装 软件包。但是,验证是否在客户端上安装了 nfs-tools 软件包,如果未安装,请进行安装。
有关 NFS 的详情,请参阅 Red Hat Enterprise Linux 7 的存储管理指南中的 网络文件系统(NFS) 一章。
配置 NFSv3 客户端
通过提供 nfsvers=3 和 挂载。要使用 UDP 作为传输,请将 noacl 作为挂载选项,可以将 Linux 客户端配置为通过 NFSv3proto=udp 添加到挂载选项中。但是,TCP 是首选的协议。
<ganesha-host-name>:/ <mount-point> nfs noauto,noacl,soft,nfsvers=3,sync,proto=tcp 0 0
如果挂载将使用版本 3 和 UDP,则使用版本 3 和 传输设置 配置 NFS Ganesha EXPORT 块 协议 设置。
由于 NFSv3 不将客户端 OPEN 和 CLOSE 操作告知文件服务器,RGW NFS 无法使用这些操作来标记文件上传事务的开始和结束。相反,当第一次写入以偏移 0 发送到文件时,RGW NFS 会尝试启动新的上传,并在默认情况下 10 秒内看到对 文件的新写入时完成上传。要更改此值,请在 Ceph 配置文件的 RGW 部分中为 rgw_nfs_write_completion_interval_s 设置值。
第 3 章 管理 复制链接链接已复制到粘贴板!
管理员可以使用 radosgw-admin 命令行界面管理 Ceph 对象网关。
3.1. 管理数据存储 复制链接链接已复制到粘贴板!
Ceph 对象网关将管理数据存储在实例的区域配置中定义的一系列池中。例如,后续部分中讨论的 bucket、用户、用户配额和使用量统计存储在 Ceph 存储群集的池中。默认情况下,Ceph 对象网关将创建下列池,并将它们映射到默认区域:
-
.rgw -
.rgw.control -
.rgw.gc -
.log -
.intent-log -
.usage -
.users -
.users.email -
.users.swift -
.users.uid
您应该考虑手动创建这些池,以便您可以设置 CRUSH 规则集和放置组的数量。在典型的配置中,存储 Ceph 对象网关管理数据的池通常会使用相同的 CRUSH 规则集,并且使用较少的 PG,因为管理数据有 10 个池。如需了解更多详细信息,请参阅 Red Hat Ceph Storage 3 的 池 和存储 策略 指南。
另请参阅 每个池 PG PG 计算器来获取 PG 计算详细信息。如果将过多的 PG 分配给池(默认情况下为 300 个),mon_pg_warn_max_per_osd 设置将发出警告。您可以调整值以满足您的需求和硬件的功能,其中 n 是每个 OSD 的最大 PG 数。
mon_pg_warn_max_per_osd = n
3.2. 创建存储策略 复制链接链接已复制到粘贴板!
Ceph 对象网关通过标识放置目标并在与放置目标关联的池中存储 bucket 和对象来存储客户端存储桶和对象。如果您不配置放置目标,并将它们映射到实例区域配置中的池,Ceph 对象网关将使用默认目标和池,如 default_placement。
存储策略为 Ceph 对象网关客户端提供了一种访问存储策略的方式,即能够将特定类型的存储作为目标,如 SSD、SAS 驱动器、SATA 驱动器。确保持久性、复制、纠删代码等特殊方法。详情请参阅 Red Hat Ceph Storage 3 的存储策略 指南。
要创建存储策略,请使用以下步骤:
-
使用所需的存储策略,创建一个新的 pool
.rgw.buckets.special。例如,使用纠删代码、特定 CRUSH 规则集、副本数和 apg_num 和计数自定义的池。pgp_num 获取 zone group 配置并将其存储在文件中,如
zonegroup.json:语法
[root@master-zone]# radosgw-admin zonegroup --rgw-zonegroup=<zonegroup_name> get > zonegroup.json示例
[root@master-zone]# radosgw-admin zonegroup --rgw-zonegroup=default get > zonegroup.json在
zonegroup.json文件中,在placement_target下添加一个特殊placement条目。{ "name": "default", "api_name": "", "is_master": "true", "endpoints": [], "hostnames": [], "master_zone": "", "zones": [{ "name": "default", "endpoints": [], "log_meta": "false", "log_data": "false", "bucket_index_max_shards": 5 }], "placement_targets": [{ "name": "default-placement", "tags": [] }, { "name": "special-placement", "tags": [] }], "default_placement": "default-placement" }使用修改的 zone
group.json 文件设置 zone group:[root@master-zone]# radosgw-admin zonegroup set < zonegroup.json获取区配置并将其存储在文件中,如
zone.json:[root@master-zone]# radosgw-admin zone get > zone.json编辑区文件并在
placement_pool下添加新放置策略键:{ "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", "data_extra_pool": ".rgw.buckets.extra" } }, { "key": "special-placement", "val": { "index_pool": ".rgw.buckets.index", "data_pool": ".rgw.buckets.special", "data_extra_pool": ".rgw.buckets.extra" } }] }设置新区域配置。
[root@master-zone]# radosgw-admin zone set < zone.json更新 zone group map。
[root@master-zone]# radosgw-admin period update --commitspecial-placement条目列为placement_target。
在发出请求时指定存储策略:
例如:
$ curl -i http://10.0.0.1/swift/v1/TestContainer/file.txt -X PUT -H "X-Storage-Policy: special-placement" -H "X-Auth-Token: AUTH_rgwtxxxxxx"
3.3. 创建无索引 Bucket 复制链接链接已复制到粘贴板!
可以在创建的存储桶不使用存储桶索引来存储对象索引时配置放置目标,即无索引存储桶。不使用数据复制或列表的放置目标可能会实现无索引存储桶。
Indexless bucket 提供了一种机制,其中的放置目标不会跟踪特定存储桶中的对象。这消除了每当发生对象写入时发生的资源争用,并减少 Ceph 对象网关对 Ceph 存储集群进行的往返次数。这可能会对并发操作和小对象写入性能产生积极的影响。
要将放置目标指定为无索引,请使用以下步骤:
获取
zone.json的配置:$ radosgw-admin zone get --rgw-zone=<zone> > zone.json通过添加新的放置目标或修改现有目标使其具有
"index_type": 1来修改zone.json,例如:"placement_pools": [ { "key": "default-placement", "val": { "index_pool": "default.rgw.buckets.index", "data_pool": "default.rgw.buckets.data", "data_extra_pool": "default.rgw.buckets.non-ec", "index_type": 1, "compression": "" } }, { "key": "indexless", "val": { "index_pool": "default.rgw.buckets.index", "data_pool": "default.rgw.buckets.data", "data_extra_pool": "default.rgw.buckets.non-ec", "index_type": 1 } } ],设置
zone.json的配置:$ radosgw-admin zone set --rgw-zone=<zone> --infile zone.json如果您创建了新的放置目标,请确保
zonegroup引用新的放置目标:$ radosgw-admin zonegroup get --rgw-zonegroup=<zonegroup> > zonegroup.json设置 zonegroup 的
default_placement:$ radosgw-admin zonegroup placement default --placement-id indexless根据
需要修改 zonegroup.json。例如:"placement_targets": [ { "name": "default-placement", "tags": [] }, { "name": "indexless", "tags": [] } ], "default_placement": "default-placement",$ radosgw-admin zonegroup set --rgw-zonegroup=<zonegroup> < zonegroup.json如果集群处于多站点配置中,请更新并提交周期:
$ radosgw-admin period update --commit
在本例中,在 "indexless" 目标中创建的存储桶将是无索引存储桶。
bucket 索引不会反映存储桶的正确状态,列出这些存储桶将无法正确返回其对象列表。这会影响多个功能。具体来说,这些存储桶不会在多区环境中同步,因为存储桶索引不用于存储更改信息。不建议在无索引存储桶上使用 S3 对象版本控制,因为此功能需要存储桶索引。
使用无索引存储桶可移除单个 bucket 中最大对象数量的限值。
无法从 NFS 列出无索引存储桶中的对象
3.4. 配置 Bucket 划分 复制链接链接已复制到粘贴板!
Ceph 对象网关将 bucket 索引数据存储在索引池(index_pool)中,默认为 .rgw.buckets.index。当客户端将许多对象 -hunds 放入数以百万计的对象时,在单个 bucket 中没有为每个存储桶设置最大对象数量的配额,索引池可能会遭遇显著的性能下降。
当每个存储 桶允许大量对象时,bucket 索引分片 有助于防止性能瓶颈。
您可以为新存储桶配置存储桶索引分片,或者更改现有存储桶的存储桶索引。
配置存储桶索引分片:
-
对于简单配置中的新 bucket,请使用
rgw_override_bucket_index_max_shards选项。请查看 第 3.4.2 节 “在简单配置中配置 Bucket Index Sharding” -
对于多站点配置中的新 bucket,请使用
bucket_index_max_shards选项。请查看 第 3.4.3 节 “在多站点配置中配置 Bucket Index Sharding”
重新定义存储桶:
- 动态查看 第 3.4.4 节 “动态 Bucket Index Resharding”
- 手动,请参阅 第 3.4.5 节 “手动 Bucket Index Resharding”
- 在多站点配置中,请参阅使用多站点手动 Resharding Buckets
3.4.1. bucket 划分限制 复制链接链接已复制到粘贴板!
请谨慎使用以下限制:您的硬件选择会有影响,因此您应该始终与您的红帽客户团队讨论这些要求。
- 在需要分片前,一个存储桶中的最大对象数量: 红帽建议每个存储桶索引分片最多 102,400 个对象。为充分利用分片,请在 Ceph 对象网关 bucket 索引池中提供足够数量的 OSD 来获取最大并行性。
- 使用分片时的最大对象数量: 基于之前的测试,当前支持的存储桶索引分片数量为 65521。红帽质量保证未对存储桶分片执行完整的可扩展性测试。
3.4.2. 在简单配置中配置 Bucket Index Sharding 复制链接链接已复制到粘贴板!
要在所有新存储桶上启用和配置 bucket 索引分片,请使用 rgw_override_bucket_index_max_shards 参数。将参数设置为:
-
0禁用存储桶索引分片。这是默认值。 -
值大于
0,以启用存储桶分片并设置分片的最大数量。
先决条件
- 阅读 bucket 分片限制。
流程
计算推荐的分片数量。要做到这一点,请使用以下公式:
number of objects expected in a bucket / 100,000请注意,分片的最大数量为 65521。
将
rgw_override_bucket_index_max_shards添加到 Ceph 配置文件:rgw_override_bucket_index_max_shards = value使用上一步中计算的推荐分片数量替换 value,例如:
rgw_override_bucket_index_max_shards = 10-
要为 Ceph 对象网关的所有实例配置 bucket 索引分片,请在
[global]部分下添加rgw_override_bucket_index_max_shards。 -
要仅为 Ceph 对象网关的特定实例配置 bucket 索引分片,请在实例下添加
rgw_override_bucket_index_max_shards。
-
要为 Ceph 对象网关的所有实例配置 bucket 索引分片,请在
重启 Ceph 对象网关:
# systemctl restart ceph-radosgw.target
3.4.3. 在多站点配置中配置 Bucket Index Sharding 复制链接链接已复制到粘贴板!
在多站点配置中,每个区域都有不同的 index_pool 设置来管理故障转移。要为一个 zone group 中的 zone 配置一致的分片计数,请在该 zone group 配置中设置 bucket_index_max_shards 设置。将参数设置为:
-
0禁用存储桶索引分片。这是默认值。 -
值大于
0,以启用存储桶分片并设置分片的最大数量。
将索引池(如果适用)映射到基于 SSD 的 OSD 的 CRUSH 规则集也可能有助于 bucket 索引性能。
先决条件
- 阅读 bucket 分片限制。
流程
计算推荐的分片数量。要做到这一点,请使用以下公式:
number of objects expected in a bucket / 100,000请注意,分片的最大数量为 65521。
将 zone group 配置提取到
zonegroup.json文件中:$ radosgw-admin zonegroup get > zonegroup.json在
zonegroup.json文件中,为每个命名区域设置bucket_index_max_shards设置。bucket_index_max_shards = value使用上一步中计算的推荐分片数量替换 value,例如:
bucket_index_max_shards = 10重置 zone group:
$ radosgw-admin zonegroup set < zonegroup.json更新周期:
$ radosgw-admin period update --commit
3.4.4. 动态 Bucket Index Resharding 复制链接链接已复制到粘贴板!
动态 bucket 重新划分的过程定期检查所有 Ceph 对象网关存储桶,并检测需要重新划分的存储桶。如果 bucket 增长大于 rgw_max_objs_per_shard 参数中指定的值,Ceph 对象网关会在后台动态重新定义存储桶。rgw_max_objs_per_shard 的默认值是每个分片 100k 对象。
目前,红帽不支持在多站点配置中重新划分动态存储桶。要在此类配置中重新定义存储桶索引,请参阅使用多站点手动 Resharding Buckets。
先决条件
- 阅读 bucket 分片限制。
流程
启用动态存储桶索引重新划分
-
将 Ceph
配置文件中的 rgw_dynamic_resharding设置设为true,这是默认值。 可选。如果需要,更改 Ceph 配置文件中的以下参数:
-
rgw_reshard_num_logs:重新划分日志的分片数量。默认值为16。 -
rgw_reshard_bucket_lock_duration:在重新划分期间存储桶上锁定的持续时间。默认值为120秒。 -
rgw_dynamic_resharding:启用或禁用动态重新划分。默认值为true。 -
rgw_max_objs_per_shard:每个分片的最大对象数量。默认值为每个分片100000对象。 -
rgw_reshard_thread_interval:重新线程处理循环之间的最长时间。默认值为600秒。
-
-
将 Ceph
将存储桶添加到重新划分队列中:
radosgw-admin reshard add --bucket BUCKET_NAME --num-shards NUMBER替换:
- BUCKET_NAME,带有要重新shard 的存储桶的名称。
- NUMBER,使用新分片数。
例如:
$ radosgw-admin reshard add --bucket data --num-shards 10列出重新划分队列:
$ radosgw-admin reshard list检查存储桶重新划分状态:
radosgw-admin reshard status --bucket BUCKET_NAME替换:
- BUCKET_NAME,带有要重新shard的存储桶的名称
例如:
$ radosgw-admin reshard status --bucket data注意The
radosgw-admin reshard status命令将显示以下状态标识符之一:-
not-resharding -
in-progress -
done
立即处理重新划分队列中的条目:
$ radosgw-admin reshard process取消待处理的存储桶重新划分:
radosgw-admin reshard cancel --bucket BUCKET_NAME替换:
- BUCKET_NAME,待处理 bucket 的名称。
例如:
$ radosgw-admin reshard cancel --bucket data重要您只能取消 待处理的 重新划分操作。不要取消 持续 重新划分的操作。
- 如果您使用 Red Hat Ceph Storage 3.1 及更早的版本,请删除过时的存储桶条目,如 重新划分后清除过时的实例 中所述。
3.4.5. 手动 Bucket Index Resharding 复制链接链接已复制到粘贴板!
如果 bucket 已增长大于已优化的初始配置,请使用 radosgw-admin bucket reshard 命令重新缩小存储桶索引池。这个命令:
- 为指定存储桶创建新的 bucket 索引对象集合。
- 在这些 bucket 索引对象之间分发对象条目。
- 创建新的 bucket 实例。
- 使用存储桶链接新 bucket 实例,以便所有新的索引操作都通过新 bucket 索引进行。
- 将旧的和新的 bucket ID 打印到命令输出。
仅在简单配置中使用这个步骤。要在多站点配置中重新定义存储桶,请参阅使用 多站点手动 Resharding Buckets。
先决条件
- 阅读 bucket 分片限制。
流程
备份原始存储桶索引:
radosgw-admin bi list --bucket=BUCKET > BUCKET.list.backup替换:
- BUCKET,带有要重新shard的存储桶的名称
例如,对于名为
data的存储桶,请输入:$ radosgw-admin bi list --bucket=data > data.list.backup重新定义存储桶索引:
radosgw-admin bucket reshard --bucket=BUCKET --num-shards=NUMBER替换:
- BUCKET,带有要重新shard的存储桶的名称
- 使用新分片数量的 NUMBER
例如,对于名为
data 的存储桶,以及所需的分片数量为100,请输入:$ radosgw-admin bucket reshard --bucket=data --num-shards=100- 如果您使用 Red Hat Ceph Storage 3.1 及更早的版本,请删除过时的存储桶条目,如 重新划分后清除过时的实例 中所述。
3.4.6. 在重新划分后清理过时的实例 复制链接链接已复制到粘贴板!
在红帽 Ceph 存储 3.1 和之前版本中,重新划分过程不会自动清理存储桶条目的陈旧实例。如果没有手动清理,这些过时的实例可能会影响集群的性能。
这个过程只在不在多站点集群中的简单配置中使用。
先决条件
- 安装了 Ceph 对象网关.
流程
列出过时的实例:
$ radosgw-admin reshard stale-instances list清理过时的实例:
$ radosgw-admin reshard stale-instances rm
3.5. 启用压缩 复制链接链接已复制到粘贴板!
Ceph 对象网关支持利用任何 Ceph 的压缩插件对上传对象进行服务器端压缩。包括:
-
zlib:支持. -
snappy:技术预览. -
zstd:技术预览.
snappy 和 zstd 压缩插件是技术预览功能,因此不被完全支持,因为红帽还没有对它们完成质量保证测试。
Configuration
要在区放置目标中启用压缩,请向 radosgw-admin 区放置修改 命令提供 --compression=<type> 选项。压缩 类型 指的是在写入新对象数据时要使用的压缩插件名称。
每个压缩对象存储压缩类型。更改 设置不会影响解压缩现有压缩对象的能力,也不会强制 Ceph 对象网关重新压缩现有的对象。
此压缩设置适用于使用此放置目标上传到存储桶的所有新对象。
要禁用对区放置目标的压缩,请向 radosgw-admin zone placement modify 命令提供 --compression=<type> 选项 并指定一个空字符串或 none。
例如:
$ radosgw-admin zone placement modify --rgw-zone=default --placement-id=default-placement --compression=zlib
{
...
"placement_pools": [
{
"key": "default-placement",
"val": {
"index_pool": "default.rgw.buckets.index",
"data_pool": "default.rgw.buckets.data",
"data_extra_pool": "default.rgw.buckets.non-ec",
"index_type": 0,
"compression": "zlib"
}
}
],
...
}
在启用或禁用压缩后,重新启动 Ceph 对象网关实例,以便更改生效。
Ceph 对象网关创建 默认 区域和一组池。有关生产部署,请参阅 用于生产的 Ceph 对象网关指南,更具体来说,请参阅首先 创建域 部分。另请参阅 多站点。
statistics
虽然所有现有命令和 API 都继续根据其未压缩数据报告对象和 bucket 大小,但 radosgw-admin bucket stats 命令包含给定存储桶的压缩统计信息。
$ radosgw-admin bucket stats --bucket=<name>
{
...
"usage": {
"rgw.main": {
"size": 1075028,
"size_actual": 1331200,
"size_utilized": 592035,
"size_kb": 1050,
"size_kb_actual": 1300,
"size_kb_utilized": 579,
"num_objects": 104
}
},
...
}
size_utilized 和 size_kb_utilized 字段 分别代表压缩数据的总大小,单位为字节和 KB。
3.6. 用户管理 复制链接链接已复制到粘贴板!
Ceph 对象存储用户管理是指属于 Ceph 对象存储服务的客户端应用的用户,而不是 Ceph 对象网关作为 Ceph 存储群集的客户端应用。您必须创建用户、访问密钥和机密,以使客户端应用能够与 Ceph 对象网关服务交互。
用户类型有两种:
- 用户: 术语"用户"反映了 S3 接口的用户。
- 子用户: 术语"子用户"反映了 Swift 界面的用户。子用户 与用户 关联.
您可以创建、修改、查看、暂停和删除用户及子用户。
在多站点部署中管理用户时,ALWAYS 对 master zone group master zone 中的 Ceph 对象网关节点执行 radosgw-admin 命令,以确保用户在整个多站点集群中同步。不要从 second zone 或 second zone group 创建、修改或删除多站点群集上的用户。本文档使用 [root@master-zone]# 作为 master zone group 的 master zone 中主机的命令行惯例。
除了创建用户和子用户 ID 外,您还可以为用户添加显示名称和电子邮件地址。您可以指定一个密钥和 secret,或者自动生成密钥和 secret。在生成或指定密钥时,请注意用户 ID 与 S3 密钥类型对应,子用户 ID 对应于 swift 密钥类型。Swift 密钥也具有 读取、写入、读写 和 完全 的访问权限级别。
用户管理命令行语法通常遵循 用户 <command> <user-id> 模式,其中 <user-id> 是 --uid= 选项,后跟用户的 ID(S3)或 --subuser= 选项,后跟用户名(Swift)。例如:
[root@master-zone]# radosgw-admin user <create|modify|info|rm|suspend|enable|check|stats> <--uid={id}|--subuser={name}> [other-options]
可能需要其他选项,具体取决于您执行的命令。
3.6.1. multi Tenancy 复制链接链接已复制到粘贴板!
在 Red Hat Ceph Storage 2 及更高版本中,Ceph 对象网关支持 S3 和 Swift API 的多租户,其中每个用户和 bucket 都位于"租户"。 当多个租户使用通用 bucket 名称(如"test"、"main" 等)时,多租户可防止命名空间冲突。
每个用户和 bucket 位于租户下。为向后兼容,将添加带有空名称的"传统"租户。每当不指定租户的情况下引用存储桶时,Swift API 将假定为"传统"租户。现有用户也存储在传统租户下,因此他们将像之前的版本一样访问 bucket 和对象。
租户对其没有任何操作。在管理用户时,它们根据需要显示和消失。为了创建、修改和删除具有显式租户的用户,提供了一个额外的选项 --tenant,或者在 >"。
radosgw-admin 命令的参数中使用了语法"<tenant>$<user
要为 S3 创建用户 testx$tester,请执行以下操作:
[root@master-zone]# radosgw-admin --tenant testx --uid tester \
--display-name "Test User" --access_key TESTER \
--secret test123 user create
要为 Swift 创建用户 testx$tester,请执行以下任一操作:
[root@master-zone]# radosgw-admin --tenant testx --uid tester \
--display-name "Test User" --subuser tester:swift \
--key-type swift --access full subuser create
[root@master-zone]# radosgw-admin key create --subuser 'testx$tester:swift' \
--key-type swift --secret test123
shell 中必须用引号括起具有显式租户的子用户。
3.6.2. 创建用户 复制链接链接已复制到粘贴板!
使用 用户 create 命令创建 S3-interface 用户。您必须指定用户 ID 和显示名称。您也可以指定一个电子邮件地址。如果您不指定密钥或 secret,radosgw-admin 将自动为您生成。但是,如果您不希望使用生成的键/secret 对,您可以指定一个键和/或 secret。
[root@master-zone]# radosgw-admin user create --uid=<id> \
[--key-type=<type>] [--gen-access-key|--access-key=<key>]\
[--gen-secret | --secret=<key>] \
[--email=<email>] --display-name=<name>
例如:
[root@master-zone]# radosgw-admin user create --uid=janedoe --display-name="Jane Doe" --email=jane@example.com
{ "user_id": "janedoe",
"display_name": "Jane Doe",
"email": "jane@example.com",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [],
"keys": [
{ "user": "janedoe",
"access_key": "11BS02LGFB6AL6H1ADMW",
"secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"placement_tags": [],
"bucket_quota": { "enabled": false,
"max_size_kb": -1,
"max_objects": -1},
"user_quota": { "enabled": false,
"max_size_kb": -1,
"max_objects": -1},
"temp_url_keys": []}
检查 密钥输出。sometimes radosgw-admin 生成 JSON 转义(\)字符,一些客户端不知道如何处理 JSON 转义字符。强制包括删除 JSON 转义字符(\),用引号括起字符串,重新生成密钥,并确保它没有 JSON 转义字符,或者手动指定密钥和 secret。
3.6.3. 创建子用户 复制链接链接已复制到粘贴板!
要创建子用户(Swift 接口),您必须指定用户 ID(--uid={username})、子用户 ID 和子用户的访问级别。如果您不指定密钥或 secret,radosgw-admin 将自动为您生成。但是,如果您不希望使用生成的键/secret 对,您可以指定一个键和/或 secret。
full 不 读写,因为它还包含访问控制策略。
[root@master-zone]# radosgw-admin subuser create --uid={uid} --subuser={uid} --access=[ read | write | readwrite | full ]
例如:
[root@master-zone]# radosgw-admin subuser create --uid=janedoe --subuser=janedoe:swift --access=full
{ "user_id": "janedoe",
"display_name": "Jane Doe",
"email": "jane@example.com",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [
{ "id": "janedoe:swift",
"permissions": "full-control"}],
"keys": [
{ "user": "janedoe",
"access_key": "11BS02LGFB6AL6H1ADMW",
"secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"placement_tags": [],
"bucket_quota": { "enabled": false,
"max_size_kb": -1,
"max_objects": -1},
"user_quota": { "enabled": false,
"max_size_kb": -1,
"max_objects": -1},
"temp_url_keys": []}
3.6.4. 获取用户信息 复制链接链接已复制到粘贴板!
要获取有关用户的信息,您必须指定用户 信息和用户 ID(--uid={username})。
# radosgw-admin user info --uid=janedoe
3.6.5. 修改用户信息 复制链接链接已复制到粘贴板!
要修改用户的信息,您必须指定用户 ID(--uid={username})和您要修改的属性。典型的修改包括密钥和机密、电子邮件地址、显示名称和访问级别。例如:
[root@master-zone]# radosgw-admin user modify --uid=janedoe / --display-name="Jane E. Doe"
若要修改子用户值,请指定 子用户修改 和子用户 ID。例如:
[root@master-zone]# radosgw-admin subuser modify --subuser=janedoe:swift / --access=full
3.6.6. 启用和提示用户 复制链接链接已复制到粘贴板!
当您创建用户时,该用户默认是启用的。但是,您可以暂停用户特权并稍后重新启用它们。若要暂停用户,可 指定用户暂停 和用户 ID。
[root@master-zone]# radosgw-admin user suspend --uid=johndoe
要重新启用暂停的用户,请 指定用户启用 和用户 ID。
[root@master-zone]# radosgw-admin user enable --uid=johndoe
禁用该用户将禁用该子用户。
3.6.7. 删除用户 复制链接链接已复制到粘贴板!
删除用户时,用户和子用户将从系统中删除。但是,如果您愿意,您可以仅删除该子用户。要删除用户(及子用户),请 指定用户 rm 和用户 ID。
[root@master-zone]# radosgw-admin user rm --uid=<uid> [--purge-keys] [--purge-data]
例如:
[root@master-zone]# radosgw-admin user rm --uid=johndoe --purge-data
若要仅删除子用户,请指定 子用户 rm 和 subuser 名称。
[root@master-zone]# radosgw-admin subuser rm --subuser=johndoe:swift --purge-keys
选项包括:
-
清除数据: --
purge-data选项清除与 UID 关联的所有数据。 -
清除密钥: --
purge-keys选项清除与 UID 关联的所有密钥。
3.6.8. 删除子用户 复制链接链接已复制到粘贴板!
删除子用户时,您要删除对 Swift 接口的访问。用户将保留在系统中。Ceph 对象网关用于移除子用户,指定 子用户 rm 和子用户 ID。
[root@master-zone]# radosgw-admin subuser rm --subuser=johndoe:test
选项包括:
-
清除密钥: --
purge-keys选项清除与 UID 关联的所有密钥。
3.6.9. 重命名用户 复制链接链接已复制到粘贴板!
要更改用户名称,请使用 radosgw-admin 用户 rename 命令。此命令花费的时间取决于用户拥有的 bucket 和对象的数量。如果数量较大,红帽建议在 屏幕 软件包提供的 Screen 实用程序中使用 命令。
先决条件
- 正常工作的 Ceph 集群
-
root或sudo访问权限 - 已安装的 Ceph 对象网关
流程
重命名用户:
radosgw-admin user rename --uid=current-user-name --new-uid=new-user-name例如,要将
user1重命名为user2:# radosgw-admin user rename --uid=user1 --new-uid=user2 { "user_id": "user2", "display_name": "user 2", "email": "", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [], "keys": [ { "user": "user2", "access_key": "59EKHI6AI9F8WOW8JQZJ", "secret_key": "XH0uY3rKCUcuL73X0ftjXbZqUbk0cavD11rD8MsA" } ], "swift_keys": [], "caps": [], "op_mask": "read, write, delete", "default_placement": "", "placement_tags": [], "bucket_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "user_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "temp_url_keys": [], "type": "rgw" }如果用户位于租户中,请使用 租户$user-name 格式:
radosgw-admin user rename --uid=tenant$current-user-name --new-uid=tenant$new-user-name例如,在
测试租户中将:user1重命名为 user2# radosgw-admin user rename --uid=test$user1 --new-uid=test$user2 1000 objects processed in tvtester1. Next marker 80_tVtester1_99 2000 objects processed in tvtester1. Next marker 64_tVtester1_44 3000 objects processed in tvtester1. Next marker 48_tVtester1_28 4000 objects processed in tvtester1. Next marker 2_tVtester1_74 5000 objects processed in tvtester1. Next marker 14_tVtester1_53 6000 objects processed in tvtester1. Next marker 87_tVtester1_61 7000 objects processed in tvtester1. Next marker 6_tVtester1_57 8000 objects processed in tvtester1. Next marker 52_tVtester1_91 9000 objects processed in tvtester1. Next marker 34_tVtester1_74 9900 objects processed in tvtester1. Next marker 9_tVtester1_95 1000 objects processed in tvtester2. Next marker 82_tVtester2_93 2000 objects processed in tvtester2. Next marker 64_tVtester2_9 3000 objects processed in tvtester2. Next marker 48_tVtester2_22 4000 objects processed in tvtester2. Next marker 32_tVtester2_42 5000 objects processed in tvtester2. Next marker 16_tVtester2_36 6000 objects processed in tvtester2. Next marker 89_tVtester2_46 7000 objects processed in tvtester2. Next marker 70_tVtester2_78 8000 objects processed in tvtester2. Next marker 51_tVtester2_41 9000 objects processed in tvtester2. Next marker 33_tVtester2_32 9900 objects processed in tvtester2. Next marker 9_tVtester2_83 { "user_id": "test$user2", "display_name": "User 2", "email": "", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [], "keys": [ { "user": "test$user2", "access_key": "user2", "secret_key": "123456789" } ], "swift_keys": [], "caps": [], "op_mask": "read, write, delete", "default_placement": "", "placement_tags": [], "bucket_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "user_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "temp_url_keys": [], "type": "rgw" }验证用户是否已成功重命名:
radosgw-admin user info --uid=new-user-name例如:
# radosgw-admin user info --uid=user2如果用户位于租户中,请使用 租户$user-name 格式:
radosgw-admin user info --uid=tenant$new-user-name# radosgw-admin user info --uid=test$user2
其它资源
-
screen(1)手册页
3.6.10. 创建密钥 复制链接链接已复制到粘贴板!
要为用户创建密钥,您必须指定 key create。对于用户,指定用户 ID 和 s3 密钥类型。若要为子用户创建密钥,您必须指定子用户 ID 和 swift keytype。例如:
[root@master-zone]# radosgw-admin key create --subuser=johndoe:swift --key-type=swift --gen-secret
{ "user_id": "johndoe",
"rados_uid": 0,
"display_name": "John Doe",
"email": "john@example.com",
"suspended": 0,
"subusers": [
{ "id": "johndoe:swift",
"permissions": "full-control"}],
"keys": [
{ "user": "johndoe",
"access_key": "QFAMEDSJP5DEKJO0DDXY",
"secret_key": "iaSFLDVvDdQt6lkNzHyW4fPLZugBAI1g17LO0+87"}],
"swift_keys": [
{ "user": "johndoe:swift",
"secret_key": "E9T2rUZNu2gxUjcwUBO8n\/Ev4KX6\/GprEuH4qhu1"}]}
3.6.11. 添加和删除访问密钥 复制链接链接已复制到粘贴板!
用户和子用户必须具有使用 S3 和 Swift 接口的访问密钥。当您创建用户或子用户且您没有指定 access key 和 secret 时,密钥和 secret 会自动生成。您可以创建一个密钥,并指定或生成 access key 和/或 secret。您也可以删除访问密钥和机密。选项包括:
-
--secret=<key>指定一个 secret key(例如,手动生成)。 -
--Gen-access-key生成随机访问密钥(默认为 S3 用户)。 -
--Gen-secret生成随机 secret key。 -
--key-type=<type>指定一个键类型。这些选项有:swift、s3
要添加密钥,请指定用户:
[root@master-zone]# radosgw-admin key create --uid=johndoe --key-type=s3 --gen-access-key --gen-secret
您也可以指定密钥和 secret。
要删除访问密钥,您需要指定用户和密钥:
查找特定用户的访问密钥:
[root@master-zone]# radosgw-admin user info --uid=<testid>access 键是输出中的
"access_key"值,例如:$ radosgw-admin user info --uid=johndoe { "user_id": "johndoe", ... "keys": [ { "user": "johndoe", "access_key": "0555b35654ad1656d804", "secret_key": "h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q==" } ], ... }指定用户 ID 和上一步中的访问密钥以删除访问密钥:
[root@master-zone]# radosgw-admin key rm --uid=<user_id> --access-key <access_key>例如:
[root@master-zone]# radosgw-admin key rm --uid=johndoe --access-key 0555b35654ad1656d804
3.6.12. 添加和删除管理功能 复制链接链接已复制到粘贴板!
Ceph 存储集群提供了一个管理 API,允许用户通过 REST API 执行管理功能。默认情况下,用户没有访问此 API 的权限。要让用户练习管理功能,请为用户提供管理功能。
为用户添加管理功能:
[root@master-zone]# radosgw-admin caps add --uid={uid} --caps={caps}
您可以向用户、存储桶、元数据和使用(利用率)添加读取、写入或所有功能。例如:
--caps="[users|buckets|metadata|usage|zone]=[*|read|write|read, write]"
例如:
[root@master-zone]# radosgw-admin caps add --uid=johndoe --caps="users=*"
从用户中删除管理功能:
[root@master-zone]# radosgw-admin caps rm --uid=johndoe --caps={caps}
3.7. 配额管理 复制链接链接已复制到粘贴板!
Ceph 对象网关允许您设置用户拥有的用户和 bucket 的配额。配额包括 bucket 中对象的最大数量,以及最大存储大小(以 MB 为单位)。
-
bucket:
--bucket选项允许您为用户拥有的存储桶指定配额。 -
最大对象:
--max-objects设置允许您指定对象的最大数量。负值将禁用此设置。 -
最大大小:
--max-size选项允许您为最大字节数指定配额。负值将禁用此设置。 -
配额范围: --
quota-scope选项设置配额的范围。选项为bucket和user。bucket 配额应用到用户拥有的 bucket。用户配额应用到用户。
具有大量对象的 bucket 可能会导致严重的性能问题。个 bucket 中建议的最多对象数量为 100,000。要增加这个数量,请配置存储桶索引分片。详情请查看 第 3.4 节 “配置 Bucket 划分”。
3.7.1. 设置用户配额 复制链接链接已复制到粘贴板!
在启用配额前,您必须首先设置配额参数。例如:
[root@master-zone]# radosgw-admin quota set --quota-scope=user --uid=<uid> [--max-objects=<num objects>] [--max-size=<max size>]
例如:
radosgw-admin quota set --quota-scope=user --uid=johndoe --max-objects=1024 --max-size=1024
num 对象和 / 或 max size 的负值表示禁用特定的配额属性检查。
3.7.2. 启用和禁用用户配额 复制链接链接已复制到粘贴板!
设置用户配额后,您可以启用它。例如:
[root@master-zone]# radosgw-admin quota enable --quota-scope=user --uid=<uid>
您可以禁用启用的用户配额。例如:
[root@master-zone]# radosgw-admin quota disable --quota-scope=user --uid=<uid>
3.7.3. 设置 Bucket Quotas 复制链接链接已复制到粘贴板!
bucket 配额应用到指定 uid 拥有的 bucket。它们独立于用户。
[root@master-zone]# radosgw-admin quota set --uid=<uid> --quota-scope=bucket [--max-objects=<num objects>] [--max-size=<max size]
num 对象和 / 或 max size 的负值表示禁用特定的配额属性检查。
3.7.4. 启用和禁用 Bucket Quotas 复制链接链接已复制到粘贴板!
设置存储桶配额后,您可以启用它。例如:
[root@master-zone]# radosgw-admin quota enable --quota-scope=bucket --uid=<uid>
禁用启用的存储桶配额:
[root@master-zone]# radosgw-admin quota disable --quota-scope=bucket --uid=<uid>
3.7.5. 获取配额设置 复制链接链接已复制到粘贴板!
您可以通过用户信息 API 访问每个用户的配额设置。要使用 CLI 接口读取用户配额设置信息,请执行以下操作:
# radosgw-admin user info --uid=<uid>
3.7.6. 更新配额统计信息 复制链接链接已复制到粘贴板!
配额统计异步更新。您可以手动更新所有用户和所有存储桶的配额统计,以检索最新的配额统计。
[root@master-zone]# radosgw-admin user stats --uid=<uid> --sync-stats
3.7.7. 获取用户配额使用列表 复制链接链接已复制到粘贴板!
要查看用户消耗的配额量,请执行以下操作:
# radosgw-admin user stats --uid=<uid>
您应当使用 --sync 统计信息,以接收最新的数据。
-stats 选项执行radosgw- admin 用户
3.7.8. 配额缓存 复制链接链接已复制到粘贴板!
为每个 Ceph 网关实例缓存配额统计数据。如果有多个实例,缓存可以防止完全强制执行配额,因为每个实例对配额有不同的视图。控制此问题的选项是 rgw bucket 配额 ttl、rg w用户配额存储桶同步间隔 和 rgw 用户配额同步间隔。这些值越大,配额操作效率越高,但多个实例不同步就会越高。这些值越低,将更接近于完美地实施多个实例。如果所有三个都是 0,则有效禁用配额缓存,多个实例也具有完美的配额实施。有关这些选项的详情,请查看 第 4 章 配置参考。
3.7.9. 读取和写入全局配额 复制链接链接已复制到粘贴板!
您可以在 zonegroup map 中读取和写入配额设置。获取 zonegroup map:
[root@master-zone]# radosgw-admin global quota get
全局配额设置可以使用配额 集的 全局配额 对、配额启用和配额 禁用 命令进行操作,例如:
[root@master-zone]# radosgw-admin global quota set --quota-scope bucket --max-objects 1024
[root@master-zone]# radosgw-admin global quota enable --quota-scope bucket
在存在 realm 和 period 的多站点配置中,必须使用 period update --commit 提交对全局配额的更改。如果没有 period,则必须重启 Ceph 对象网关,才能使更改生效。
3.8. 使用 复制链接链接已复制到粘贴板!
Ceph 对象网关日志各个用户的使用情况。您还可以在日期范围内跟踪用户使用情况。
选项包括:
-
起始日期:
--start-date选项允许您从特定开始日期过滤使用情况统计信息(format:yyyy-mm-dd[HH:MM:SS])。 -
结束日期:
--end-date选项允许您过滤特定日期的使用情况(format:yyyy-mm-dd[HH:MM:SS])。 -
日志条目:
--show-log-entries选项允许您指定是否使用使用 stats 包括日志条目(options:true|false)。
您可以使用分钟和秒指定时间,但是以 1 小时分辨率存储。
3.8.1. 显示使用情况 复制链接链接已复制到粘贴板!
要显示使用情况统计信息,请指定 用量显示。要显示特定用户的使用情况,您必须指定用户 ID。您还可以指定起始日期和结束日期,以及是否显示日志条目。
# radosgw-admin usage show \
--uid=johndoe --start-date=2012-03-01 \
--end-date=2012-04-01
您还可以通过省略用户 ID 来显示所有用户的使用情况信息摘要。
# radosgw-admin usage show --show-log-entries=false
3.8.2. trim usage 复制链接链接已复制到粘贴板!
使用大量使用时,使用情况日志可能会开始占用存储空间。您可以为所有用户和特定用户修剪使用日志。您还可以指定 Trim 操作的日期范围。
[root@master-zone]# radosgw-admin usage trim --start-date=2010-01-01 \
--end-date=2010-12-31
[root@master-zone]# radosgw-admin usage trim --uid=johndoe
[root@master-zone]# radosgw-admin usage trim --uid=johndoe --end-date=2013-12-31
3.8.3. 查找机构对象 复制链接链接已复制到粘贴板!
通常,在健康的存储集群中,您不应有任何泄漏对象,但在某些情况下可能会发生泄漏的对象。例如,如果 RADOS 网关在某一操作的中间发生,这可能会导致一些 RADOS 对象变得孤立。另外,未知的错误可能导致这些孤立对象发生。The radosgw-admin 命令为您提供一个工具,用于搜索这些孤立对象并对其进行清理。通过 --pool 选项,您可以指定要扫描泄漏的 RADOS 对象的池。使用 --num-shards 选项,您可以指定用来保留临时扫描数据的分片数量。
创建新日志池:
示例
# rados mkpool .log搜索孤立对象:
语法
# radosgw-admin orphans find --pool=<data_pool> --job-id=<job_name> [--num-shards=<num_shards>] [--orphan-stale-secs=<seconds>]示例
# radosgw-admin orphans find --pool=.rgw.buckets --job-id=abc123清理搜索数据:
语法
# radosgw-admin orphans finish --job-id=<job_name>示例
# radosgw-admin orphans finish --job-id=abc123
3.9. bucket 管理 复制链接链接已复制到粘贴板!
作为存储管理员,在使用 Ceph 对象网关时,您可以通过在用户之间移动 bucket 并将它们重命名来管理存储桶。
3.9.1. 移动存储桶 复制链接链接已复制到粘贴板!
The radosgw-admin bucket 实用程序提供在用户之间移动 bucket 的功能。为此,请将存储桶链接到新用户,并将 bucket 的所有权更改为新用户。
您可以移动存储桶:
3.9.1.1. 先决条件 复制链接链接已复制到粘贴板!
- 正在运行的 Red Hat Ceph Storage 集群
- 已安装 Ceph 对象网关
- bucket
- 各种租户和非租户用户
3.9.1.2. 在非租户用户之间移动存储桶 复制链接链接已复制到粘贴板!
The radosgw-admin bucket chown 命令提供将 bucket 的所有权及其包含的所有对象从一个用户更改为另一个用户的功能。为此,请从当前用户取消链接存储桶,将它链接到新用户,然后将 bucket 的所有权更改为新用户。
流程
将存储桶链接到一个新用户:
radosgw-admin bucket link --uid=user --bucket=bucket替换:
- 使用用户名 将存储桶链接到的用户
- 带有 存储桶 名称的存储桶
例如,要将
数据存储桶链接到名为user2的用户:# radosgw-admin bucket link --uid=user2 --bucket=data验证存储桶已成功链接到
user2:# radosgw-admin bucket list --uid=user2 [ "data" ]将存储桶的所有权更改为新用户:
radosgw-admin bucket chown --uid=user --bucket=bucket替换:
- 用户名 为 user 的用户,将存储桶所有权更改为
- 带有 存储桶 名称的存储桶
例如,要将数据存储的所有权更改为
user2:# radosgw-admin bucket chown --uid=user2 --bucket=data通过检查以下命令输出中的
所有者行来验证数据存储桶的所有权是否已成功更改:# radosgw-admin bucket list --bucket=data
3.9.1.3. 在租户用户之间移动存储桶 复制链接链接已复制到粘贴板!
您可以将存储桶从一个租户用户移动到另一个租户用户。
流程
将存储桶链接到一个新用户:
radosgw-admin bucket link --bucket=current-tenant/bucket --uid=new-tenant$user替换 :
- bucket 是租户名称 的当前 租户
- 带有 存储桶 名称的存储桶以链接
- 新租户,名称为新用户的租户
- 用户名 为新用户的用户
例如,将
数据存储桶从test租户链接到test的用户:2 租户中名为 user2# radosgw-admin bucket link --bucket=test/data --uid=test2$user2验证存储桶已成功链接到
user2:# radosgw-admin bucket list --uid=test$user2 [ "data" ]将存储桶的所有权更改为新用户:
radosgw-admin bucket chown --bucket=new-tenant/bucket --uid=new-tenant$user替换:
- 带有 存储桶 名称的存储桶以链接
- 新租户,名称为新用户的租户
- 用户名 为新用户的用户
例如,将
数据存储桶的所有权更改为test:2 租户中的 user2# radosgw-admin bucket chown --bucket='test2/data' --uid='test$tuser2'通过检查以下命令输出中的
所有者行来验证数据存储桶的所有权是否已成功更改:# radosgw-admin bucket list --bucket=test2/data
3.9.1.4. 将存储桶从非租户用户移到租户的用户 复制链接链接已复制到粘贴板!
您可以将存储桶从非租户用户移到租户用户。
流程
可选。如果您还没有多个租户,您可以通过启用
rgw_keystone_implicit_tenants并从外部租户访问 Ceph 对象网关来创建它们:打开并编辑 Ceph 配置文件,默认为
/etc/ceph/ceph.conf。启用rgw_keystone_implicit_tenants选项:rgw_keystone_implicit_tenants = true使用
s3cmd或swift命令从外部租户访问 Ceph 对象网关:# swift list或使用
s3cmd:# s3cmd ls从外部租户进行第一次访问可创建等效的 Ceph 对象网关用户。
将存储桶移到租户的用户:
radosgw-admin bucket link --bucket=/bucket --uid='tenant$user'替换 :
- 带有 存储桶 名称的存储桶
- 带有 新用户的租户名称的租户
- 用户名 为新用户的用户
例如,将
数据存储桶移到测试租户中的tenanted-user中:# radosgw-admin bucket link --bucket=/data --uid='test$tenanted-user'验证
数据存储桶是否已成功链接到tenanted-user:# radosgw-admin bucket list --uid='test$tenanted-user' [ "data" ]将存储桶的所有权更改为新用户:
radosgw-admin bucket chown --bucket='tenant/bucket name' --uid='tenant$user'替换 :
- 带有 存储桶 名称的存储桶
- 带有 新用户的租户名称的租户
- 用户名 为新用户的用户
例如,将
数据存储桶的所有权更改为test租户内的tenanted-user:# radosgw-admin bucket chown --bucket='test/data' --uid='test$tenanted-user'通过检查以下命令输出中的
所有者行来验证数据存储桶的所有权是否已成功更改:# radosgw-admin bucket list --bucket=test/data
3.9.2. 重命名存储桶 复制链接链接已复制到粘贴板!
您可以重命名存储桶。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 已安装 Ceph 对象网关。
- bucket.
流程
列出存储桶:
radosgw-admin bucket list例如,请注意输出中的存储桶:
# radosgw-admin bucket list [ "34150b2e9174475db8e191c188e920f6/swcontainer", "s3bucket1", "34150b2e9174475db8e191c188e920f6/swimpfalse", "c278edd68cfb4705bb3e07837c7ad1a8/ec2container", "c278edd68cfb4705bb3e07837c7ad1a8/demoten1", "c278edd68cfb4705bb3e07837c7ad1a8/demo-ct", "c278edd68cfb4705bb3e07837c7ad1a8/demopostup", "34150b2e9174475db8e191c188e920f6/postimpfalse", "c278edd68cfb4705bb3e07837c7ad1a8/demoten2", "c278edd68cfb4705bb3e07837c7ad1a8/postupsw" ]重命名存储桶:
radosgw-admin bucket link --bucket=original-name --bucket-new-name=new-name --uid=user-ID例如,要将
s3bucket1存储桶重命名为s3newb:# radosgw-admin bucket link --bucket=s3bucket1 --bucket-new-name=s3newb --uid=testuser如果存储桶位于租户中,还要指定租户:
radosgw-admin bucket link --bucket=tenant/original-name --bucket-new-name=new-name --uid=tenant$user-ID例如:
# radosgw-admin bucket link --bucket=test/s3bucket1 --bucket-new-name=s3newb --uid=test$testuser验证存储桶已被重命名:
radosgw-admin bucket list例如:现在存在名为
s3newb的存储桶:# radosgw-admin bucket list [ "34150b2e9174475db8e191c188e920f6/swcontainer", "34150b2e9174475db8e191c188e920f6/swimpfalse", "c278edd68cfb4705bb3e07837c7ad1a8/ec2container", "s3newb", "c278edd68cfb4705bb3e07837c7ad1a8/demoten1", "c278edd68cfb4705bb3e07837c7ad1a8/demo-ct", "c278edd68cfb4705bb3e07837c7ad1a8/demopostup", "34150b2e9174475db8e191c188e920f6/postimpfalse", "c278edd68cfb4705bb3e07837c7ad1a8/demoten2", "c278edd68cfb4705bb3e07837c7ad1a8/postupsw" ]
3.9.3. 其它资源 复制链接链接已复制到粘贴板!
- 如需更多信息 ,请参阅使用 Keystone 验证 Ceph 对象网关用户。
- 如需更多信息,请参阅 开发人员指南。
3.10. 优化 Ceph 对象网关的垃圾回收 复制链接链接已复制到粘贴板!
当新数据对象写入到存储集群中时,Ceph 对象网关会立即为这些新对象分配存储。在删除或覆盖存储集群中的数据对象后,Ceph 对象网关将从存储桶索引中删除这些对象。之后一段时间后,Ceph 对象网关会清除用于存储存储群集中对象的空间。从存储集群中清除已删除对象数据的过程称为 Garbage Collection 或 GC。
垃圾回收操作通常在后台运行。您可以将这些操作配置为持续执行,或者仅在低活动和轻型工作负载期间运行。默认情况下,Ceph 对象网关持续执行 GC 操作。由于 GC 操作是 Ceph 对象网关操作的一个正常部分,因此大部分时间都存在符合垃圾回收条件的已删除对象。
3.10.1. 查看垃圾回收队列 复制链接链接已复制到粘贴板!
在从存储集群中清除被删除和覆盖对象前,useradosgw-admin 来查看等待垃圾回收的对象。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- Ceph 对象网关的根级别访问权限.
流程
查看等待垃圾回收的对象队列:
示例
[root@rgw ~] radosgw-admin gc list
要列出队列中的所有条目,包括未过期条目,请使用 --include-all 选项。
3.10.2. 为删除密集型工作负载调整垃圾回收 复制链接链接已复制到粘贴板!
某些工作负载可能会临时或永久超过垃圾回收率(GC)活动的速度。对于删除密集型工作负载而言,这尤其适用,其中很多对象在短时间内存储,然后会被删除。对于这些类型的工作负载,请考虑增加垃圾回收操作相对于其他操作的优先级。如有关于 Ceph 对象网关粘合的其他问题,请联系红帽支持团队。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 对存储集群中所有节点的根级别访问权限。
流程
-
打开
/etc/ceph/ceph.conf进行编辑。 将
rgw_gc_max_concurrent_io 的值设置为 20,将rgw_gc_max_trim_chunk 的值设置为 64。rgw_gc_max_concurrent_io = 20 rgw_gc_max_trim_chunk = 64- 保存并关闭该文件。
- 重新启动 Ceph 对象网关,以允许更改的设置生效。
- 在 GC 活动期间监控存储集群,以验证增加的值不会影响性能。
切勿修改正在运行的集群中的 rgw_gc_max_objs 选项的值。您应该仅在部署 RGW 节点前更改此值。
第 4 章 配置参考 复制链接链接已复制到粘贴板!
以下设置可以添加到 Ceph 配置文件(通常是 ceph.conf)的 部分下。设置中可以包含默认值。如果不在 Ceph 配置文件中指定每个设置,则会自动设置默认值。
[client. rgw.<instance_name>]
在 [client.rgw.<instance_name>] 部分下设置的配置变量不会应用到 rgw or orradosgw-admin 命令。因此,要应用到所有 Ceph 对象网关实例或 all radosgw -admin 命令,但未在命令中指定的 instance_name 的情况下,将不适用于 rgwradosgw-admin 命令的变量可以放在 [global] 或 [client] 部分中,以避免指定 instance_name。
4.1. 常规设置 复制链接链接已复制到粘贴板!
| 名称 | 描述 | 类型 | 默认 |
|---|---|---|---|
|
| 设置 Ceph 对象网关的数据文件的位置。 | 字符串 |
|
|
| 启用指定的 API。 | 字符串 |
|
|
| 是否启用 Ceph 对象网关缓存。 | 布尔值 |
|
|
| Ceph 对象网关缓存中的条目数。 | 整数 |
|
|
|
域套接字的套接字路径。 | 字符串 | N/A |
|
| Ceph 对象网关实例的主机。可以是 IP 地址或主机名. | 字符串 |
|
|
| 实例侦听请求的端口。如果未指定,Ceph 对象网关将运行外部 FastCGI。 | 字符串 | 无 |
|
|
服务域的 DNS 名称。另请参阅 zone group | 字符串 | 无 |
|
|
如果请求中没有设置 | 字符串 | 无 |
|
|
REQUEST | 字符串 | 无 |
|
|
如果运行 | 布尔值 |
|
|
|
远程地址参数.例如,如果反向代理正常运行,包含远程地址的 HTTP 字段或 | 字符串 |
|
|
| 打开线程的超时时间(以秒为单位)。 | 整数 |
|
|
|
Ceph 对象网关进程结束前的时间 | 整数 |
|
|
|
线程池的大小。如果设置,则此变量将被 | 整数 |
|
|
|
用于不同 | 整数 |
|
|
| Ceph 对象网关在初始化时放弃之前的秒数。 | 整数 |
|
|
| MIME 类型的路径和位置。用于 Swift 自动检测对象类型. | 字符串 |
|
|
| 在一个垃圾收集周期内可由垃圾回收处理的最大对象数量。 | 整数 |
|
|
| 对象移除并通过垃圾回收处理处理前的最短等待时间。 | 整数 |
|
|
| 两个连续垃圾回收处理周期开始之间的最长时间。 | 整数 |
|
|
| 垃圾回收处理的周期时间。 | 整数 |
|
|
|
| 整数 |
|
|
|
| 布尔值 |
|
|
| Ceph 对象网关对象分条的大小。 | 整数 |
|
|
| 添加可以在对象上设置的新属性集合。在放置对象时,可以通过 HTTP 标头字段设置这些额外属性。如果设置,这些属性将在对象上执行 GET/HEAD 时返回为 HTTP 字段。 | 字符串 | none.例如:"content_foo, content_bar" |
|
| 在无条件退出之前等待进程的秒数。 | 整数 |
|
|
| 单个对象请求的窗口大小,以字节为单位。 | 整数 |
|
|
| 发送到 Ceph 存储群集的单个 get 操作的最大请求大小。 | 整数 |
|
|
| 为 zone group bucket 启用松散的 S3 存储桶规则。 | 布尔值 |
|
|
| 列出用户 bucket 时,在单个操作中检索的最大 bucket 数量。 | 整数 |
|
|
|
bucket 索引对象的分片数量。值
该变量应在 | 整数 |
|
|
| 保存 zonegroup 复制进度信息的最大分片数量。 | 整数 |
|
|
|
一次上传时 opstate 更新之间的最小时间。 | 整数 |
|
|
|
某些 | 整数 |
|
|
| 在长时间复制操作期间启用对象进度输出。 | 布尔值 |
|
|
| 复制进度输出之间的最小字节数。 | 整数 |
|
|
| 管理请求 URL 的入口点。 | 字符串 |
|
|
| 启用 FCGI 请求的兼容性,同时设置了 CONTENT_LENGTH AND HTTP_CONTENT_LENGTH。 | 布尔值 |
|
|
| 每个 bucket 的默认最大对象数量。如果未指定任何其他配额,则在新用户上设置这个值。它对现有用户没有影响。
该变量应在 | 整数 |
|
|
| 缓存的配额信息的时间(以秒为单位)是可信的。超时后,配额信息将从集群中重新获取。 | 整数 |
|
|
| 在与集群同步前,收集存储桶配额信息的时间(以秒为单位)。在这段时间中,其他 RGW 实例不会看到来自此实例的操作的 bucket 配额统计的更改。 | 整数 |
|
|
| 在同步集群前,会先累计用户配额信息的时间(以秒为单位)。在这段时间中,其他 RGW 实例不会看到此实例的操作中用户配额统计的更改。 | 整数 |
|
4.2. 关于池 复制链接链接已复制到粘贴板!
Ceph zone 映射到一系列 Ceph 存储群集池。
手动创建池与.生成池
如果 Ceph 对象网关的用户密钥包含写入功能,则网关能够自动创建池。这对入门来说非常方便。但是,Ceph 对象存储群集使用 PG 默认值,除非已在 Ceph 配置文件中进行了设置。此外,Ceph 将使用默认的 CRUSH 层次结构。这些设置 不是 生产系统的理想选择。
要设置生产系统,请参阅红帽 Ceph 存储 3 的 Ceph 对象网关生产 指南。有关存储策略,请参阅 Ceph Object Gateway for Production 指南中的开发 存储策略 一节。
Ceph 对象网关默认区的池包括:
-
.rgw.root -
.default.rgw.control -
.default.rgw.gc -
.default.log -
.default.intent-log -
.default.usage -
.default.users -
.default.users.email -
.default.users.swift -
.default.users.uid
Ceph 对象网关基于每个区域创建池。如果手动创建池,请预先填充区域名称。系统池存储与系统控制、垃圾收集、日志记录、用户信息、使用情况等相关的对象。按照惯例,这些池名称的前置为池名称的区域名称。
-
.<zone-name>.rgw.control:控制池。 -
.<zone-name>.rgw.gc:垃圾回收池,其中包含要删除对象的散列存储桶。 -
.<zone-name>.log:日志池包含所有存储桶/容器的日志,以及创建、读取、更新和删除对象操作的日志。 -
.<zone-name>.intent-log:意图日志池包含对象更新请求的副本,以便在请求失败时协助撤销/恢复。 -
.<zone-name>.users.uid:用户 ID 池包含唯一用户 ID 的映射。 -
.<zone-name>.users.keys:密钥池包含每个用户 ID 的访问密钥和密钥。 -
.<zone-name>.users.email:电子邮件池包含与用户 ID 关联的电子邮件地址。 -
.<zone-name>.users.swift:Swift 池包含用户 ID 的 Swift 子用户信息。 -
.<zone-name>.usage:使用池包含每个用户的使用情况日志。
Ceph 对象网关存储放置池中 bucket 索引(index_pool)和 bucket 数据(data_pool)的数据。它们可能会重叠;即,您可以对索引和数据使用相同的池。默认放置的索引池是 {zone-name}.rgw.buckets.index,默认放置的数据池是 {zone-name}.rgw.buckets。
| 名称 | 描述 | 类型 | 默认 |
|---|---|---|---|
|
| 用于存储所有 zone group 特定信息的池。 | 字符串 |
|
|
| 用于存储特定区域信息的池。 | 字符串 |
|
4.3. Swift 设置 复制链接链接已复制到粘贴板!
| 名称 | 描述 | 类型 | 默认 |
|---|---|---|---|
|
| 强制实施 Swift 访问控制列表(ACL)设置。 | 布尔值 |
|
|
| 到期 Swift 令牌的时间(以秒为单位)。 | 整数 |
|
|
| Ceph 对象网关 Swift API 的 URL。 | 字符串 | 无 |
|
|
Swift API 的 URL 前缀(例如 |
| N/A |
|
| 用于验证 v1 身份验证令牌的默认 URL(如果不使用内部 Swift auth)。 | 字符串 | 无 |
|
| Swift 身份验证 URL 的入口点。 | 字符串 |
|
4.4. 日志记录设置 复制链接链接已复制到粘贴板!
| 名称 | 描述 | 类型 | 默认 |
|---|---|---|---|
|
| 启用 Ceph 对象网关,以记录对不存在的 bucket 的请求。 | 布尔值 |
|
|
| 对象名称的日志格式。有关格式指定程序的详细信息,请参阅 man page 日期。 | Date |
|
|
|
记录的对象名称是否包含 UTC 时间。如果为 | 布尔值 |
|
|
| 使用日志记录的最大分片数量。 | 整数 |
|
|
| 用于单个用户使用日志记录的最大分片数量。 | 整数 |
|
|
| 为每个成功的 Ceph 对象网关操作启用日志记录。 | 布尔值 |
|
|
| 启用用量日志。 | 布尔值 |
|
|
| 操作日志是否应写入 Ceph 存储群集后端。 | 布尔值 |
|
|
| 用于编写操作日志的 Unix 域套接字。 | 字符串 | 无 |
|
| 写入 Unix 域套接字的操作日志的最大数据大小。 | 整数 |
|
|
| 在异步清空前,用量日志中脏合并条目的数量。 | 整数 | 1024 |
|
|
每 | 整数 |
|
|
| 有意的日志对象名称的日志格式。有关格式指定程序的详细信息,请参阅 man page 日期。 | Date |
|
|
|
意图日志对象名称是否包含 UTC 时间。如果为 | 布尔值 |
|
|
| 数据日志条目窗口(以秒为单位)。 | 整数 |
|
|
| 要保存的数据更改日志的内存中条目数量。 | 整数 |
|
|
| 要保留数据更改日志的分片(对象)的数量。 | 整数 |
|
|
| 数据日志的对象名称前缀。 | 字符串 |
|
|
| 副本日志的对象名称前缀。 | 字符串 |
|
|
| 元数据日志的最大分片数量。 | 整数 |
|
4.5. Keystone 设置 复制链接链接已复制到粘贴板!
| 名称 | 描述 | 类型 | 默认 |
|---|---|---|---|
|
| Keystone 服务器的 URL。 | 字符串 | 无 |
|
| Keystone admin 令牌(共享机密)。 | 字符串 | 无 |
|
| 角色需要服务请求。 | 字符串 |
|
|
| 每个 Keystone 令牌缓存中条目的最大数量。 | 整数 |
|
|
| 令牌撤销检查间隔秒数。 | 整数 |
|
4.6. LDAP 设置 复制链接链接已复制到粘贴板!
| 名称 | 描述 | 类型 | 示例 |
|---|---|---|---|
|
| 以 URI 格式的以空格分隔的 LDAP 服务器列表。 | 字符串 |
|
|
| LDAP 搜索域名,也称为基域。 | 字符串 |
|
|
| 网关将与此 LDAP 条目绑定(用户匹配)。 | 字符串 |
|
|
|
包含 | 字符串 |
|
|
| 包含 Ceph 对象网关用户名的 LDAP 属性(以构成 binddns)。 | 字符串 |
|
第 5 章 多站点 复制链接链接已复制到粘贴板!
单个区域配置通常由一个 zone group 和一个或多个 ceph-radosgw 实例组成,您可以在实例之间负载平衡网关客户端请求。在单一区域配置中,通常多个网关实例指向单个 Ceph 存储集群。但是,红帽支持几个用于 Ceph 对象网关的多站点配置选项:
-
多 zone: 更高级的配置包含一个 zone group 和多个 zone,每个 zone 都有一个或多个
ceph-radosgw实例。每个 zone 都由自己的 Ceph 存储群集支持。一个 zone group 中的多个 zone 为 zone group 提供灾难恢复,如果其中一个 zone 发生重大故障。在红帽 Ceph 存储 2 及更高版本中,每个区域都处于活动状态,可能会收到写入操作。除了灾难恢复之外,多个活动区也可以充当内容交付网络的基础。要配置多个区域而无需复制,请参阅 第 5.11 节 “在不使用复制的情况下配置多个区域”。 - multi-zone-group: 称为"regions",Ceph 对象网关也可以支持多个 zone group,每个 zone group 都有一个或多个 zone。存储在同一域中的 zone group 的对象共享全局命名空间,确保 zone group 和 zone 之间唯一对象 ID。
- 多个 Realms: 在红帽 Ceph 存储 2 及更高版本中,Ceph 对象网关支持 realm 的概念,可以是单个 zone group 或多个 zone group,并且是该域的全局唯一命名空间。多个域提供支持大量配置和命名空间的功能。
5.1. 要求和假设 复制链接链接已复制到粘贴板!
多站点配置要求至少两个 Ceph 存储集群,至少两个 Ceph 对象网关实例,每个 Ceph 存储集群一个。
本指南假定地理上至少有两个 Ceph 存储群集,但配置可以在同一物理站点工作。本指南还假设四台 Ceph 对象网关服务器分别名为 rgw1、rgw2、rgw3 和 rgw4。
多站点配置需要 master zone group 和 master zone。另外,每个 zone group 都需要一个 master zone。zone group 可能具有一个或多个次要或非主控机区域。
域的 master zone group 中的 master zone 负责存储域元数据的主副本,包括用户、配额和 bucket(由 radosgw-admin CLI 创建)。此元数据会自动同步到 second zone 和 second zone group。使用 theradosgw-admin CLI MUST 在 master zone group 的 master zone 的主机上执行的元数据操作,以确保它们同步到 second zone group 和 zone。目前,可以对 second zone 和 zone group 执行 元数据操作,但不建议这样做,因为它们 WILL 未同步,从而导致元数据碎片。
在以下示例中,rgw 1 主机将充当 master zone group 的 master zone;rg w2 主机将充当 master zone group 的 second zone;rg w3 主机将充当 second zone group 的 master zone;rg w4 主机将充当 second zone group 的 second zone。
5.2. 池 复制链接链接已复制到粘贴板!
红帽建议使用 Ceph 放置组的每个池计算要创建 的池的适当 PG 数量。在 Ceph 配置文件中将计算的值设置为默认值。例如:
osd pool default pg num = 50
osd pool default pgp num = 50
对存储群集上的 Ceph 配置文件进行此更改;然后,对配置进行运行时更改,以便在网关实例创建池时使用该默认值。
或者,也可手动创建池。有关创建 池 的详细信息,请参阅 存储策略 指南中的池章节。
特定于区域的池名称遵循命名约定 {zone-name}.pool-name。例如,名为 us-east 的区域将具有以下池:
-
.rgw.root -
us-east.rgw.control -
us-east.rgw.data.root -
us-east.rgw.gc -
us-east.rgw.log -
us-east.rgw.intent-log -
us-east.rgw.usage -
us-east.rgw.users.keys -
us-east.rgw.users.email -
us-east.rgw.users.swift -
us-east.rgw.users.uid -
us-east.rgw.buckets.index -
us-east.rgw.buckets.data
5.3. 安装对象网关 复制链接链接已复制到粘贴板!
要安装 Ceph 对象网关,请参阅红帽企业 Linux 的红帽 Ceph 存储 3 安装指南。
所有 Ceph 对象网关节点都必须遵循 安装红帽 Ceph 存储要求 一节中列出的任务。
Ansible 可以安装和配置 Ceph 对象网关,以用于 Ceph 存储集群。对于多站点和多站点组部署,您应该具有每个区域的 Ansible 配置。
如果使用 Ansible 安装 Ceph 对象网关,Ansible playbook 将为您处理初始配置。要使用 Ansible 安装 Ceph 对象网关,请将您的主机添加到 /etc/ansible/hosts 文件中。在 [rgws] 部分下添加 Ceph 对象网关主机,以将其角色标识到 Ansible。如果您的主机有顺序命名,您可以使用范围。例如:
[rgws]
<rgw-host-name-1>
<rgw-host-name-2>
<rgw-host-name[3..10]>
添加主机后,您可以重新运行 Ansible playbook。
Ansible 将确保您的网关正在运行,因此可能需要手动删除默认区域和池。本指南提供这些步骤。
当使用异步更新更新现有多站点集群时,请按照安装说明进行更新。然后,重新启动网关实例。
重新启动实例不需要的顺序。红帽建议先重启 master zone group 和 master zone,然后重启 second zone group 和 second zone。
5.4. 建立多站点域 复制链接链接已复制到粘贴板!
群集中的所有网关都具有配置。在多站点域中,这些网关可能驻留在不同的 zone group 和 zone 中。然而,它们必须在此领域中协同工作。在多站点域中,所有网关实例 MUST 从 master zone group 和 master zone 中主机上的 ceph-radosgw 守护进程检索其配置。
因此,创建多站点集群的第一步是建立 realm、master zone group 和 master zone。要在多站点配置中配置网关,可选择一个 ceph-radosgw 实例,它将存放 realm 配置、master zone group 和 master zone。
5.4.1. 创建 Realm 复制链接链接已复制到粘贴板!
realm 包含 zone group 和 zone 的多站点配置,也服务于在该域中强制实施全局唯一的命名空间。
通过在 master zone group 和 zone 中标识服务的主机上打开命令行界面,为多站点配置创建一个新域。然后执行以下操作:
[root@master-zone]# radosgw-admin realm create --rgw-realm={realm-name} [--default]
例如:
[root@master-zone]# radosgw-admin realm create --rgw-realm=movies --default
如果集群有一个域,请指定 --default 标志。如果指定了 --default,radosgw-admin 将默认使用此域。如果没有指定 --default,添加 zone-groups 和区域需要指定 --rgw-realm 标志或 标志,以便在添加 zone group 和 zone 时标识域。
--realm -id
在创建了 realm 后,radosgw-admin 将回显 realm 配置。例如:
{
"id": "0956b174-fe14-4f97-8b50-bb7ec5e1cf62",
"name": "movies",
"current_period": "1950b710-3e63-4c41-a19e-46a715000980",
"epoch": 1
}
Ceph 为 realm 生成唯一 ID,允许在需要时重命名域。
5.4.2. 创建主区组 复制链接链接已复制到粘贴板!
realm 必须至少有一个 zone group,它将充当该域的 master zone group。
通过在 master zone group 和 zone 中服务的主机中打开命令行界面,为多站点配置创建一个新的 master zone group。然后执行以下操作:
[root@master-zone]# radosgw-admin zonegroup create --rgw-zonegroup={name} --endpoints={url} [--rgw-realm={realm-name}|--realm-id={realm-id}] --master --default
例如:
[root@master-zone]# radosgw-admin zonegroup create --rgw-zonegroup=us --endpoints=http://rgw1:80 --rgw-realm=movies --master --default
如果 realm 只有一个 zone group,请指定 --default 标志。如果指定了 --default,则在添加新区域时,radosgw-admin 将默认使用此 zone group。如果没有指定 --default,添加区域将要求 --rgw-zonegroup 标志或 --zonegroup-id 标志在添加或修改区域时识别 zone group。
创建 master zone group 后,radosgw-admin 将回显 zone group 配置。例如:
{
"id": "f1a233f5-c354-4107-b36c-df66126475a6",
"name": "us",
"api_name": "us",
"is_master": "true",
"endpoints": [
"http:\/\/rgw1:80"
],
"hostnames": [],
"hostnames_s3webzone": [],
"master_zone": "",
"zones": [],
"placement_targets": [],
"default_placement": "",
"realm_id": "0956b174-fe14-4f97-8b50-bb7ec5e1cf62"
}
5.4.3. 创建主区域 复制链接链接已复制到粘贴板!
必须在位于 区域内的 Ceph 对象网关节点上创建区域。
通过在 master zone group 和 zone 中标识的主机上打开命令行界面,为多站点配置创建一个 master zone。然后执行以下操作:
[root@master-zone]# radosgw-admin zone create
--rgw-zonegroup={zone-group-name} \
--rgw-zone={zone-name} \
--master --default \
--endpoints={http://fqdn:port}[,{http://fqdn:port}]
例如:
[root@master-zone]# radosgw-admin zone create --rgw-zonegroup=us \
--rgw-zone=us-east \
--master --default \
--endpoints={http://fqdn:port}[,{http://fqdn:port}]
未指定 --access-key 和 --secret。下一节中创建用户后,这些设置将添加到区域。
以下步骤假设使用新安装的系统(这些系统尚未存储数据)进行多站点配置。如果您已在使用默认区域及其池来存储数据,请勿对 默认 区域及其池进行 DELETE,否则数据将被删除并不可恢复。
5.4.4. 删除 Default Zone Group 和 Zone 复制链接链接已复制到粘贴板!
删除 默认 区域(如果存在)。确保首先将其从 default zone group 中删除。
[root@master-zone]# radosgw-admin zonegroup remove --rgw-zonegroup=default --rgw-zone=default
[root@master-zone]# radosgw-admin period update --commit
[root@master-zone]# radosgw-admin zone delete --rgw-zone=default
[root@master-zone]# radosgw-admin period update --commit
[root@master-zone]# radosgw-admin zonegroup delete --rgw-zonegroup=default
[root@master-zone]# radosgw-admin period update --commit
最后,如果 Ceph 存储集群 中的默认 池存在,请删除它们。
以下步骤假设使用新安装的系统进行多站点配置,这些系统当前并未存储数据。如果您已在 使用默认 zone group 存储数据,请不要对其执行 DELETE。
要访问默认区域和 zonegroup 中的旧数据,请在 radosgw-admin 命令中使用 --rgw-zone 和 default --rgw-zonegroup default
# rados rmpool default.rgw.control default.rgw.control --yes-i-really-really-mean-it
# rados rmpool default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
# rados rmpool default.rgw.gc default.rgw.gc --yes-i-really-really-mean-it
# rados rmpool default.rgw.log default.rgw.log --yes-i-really-really-mean-it
# rados rmpool default.rgw.users.uid default.rgw.users.uid --yes-i-really-really-mean-it
5.4.5. 创建系统用户 复制链接链接已复制到粘贴板!
ceph-radosgw 守护进程必须在拉取域和句点信息之前进行身份验证。在 master 区域中,创建一个系统用户来帮助在后台程序之间进行身份验证。
[root@master-zone]# radosgw-admin user create --uid="{user-name}" --display-name="{Display Name}" --system
例如:
[root@master-zone]# radosgw-admin user create --uid="synchronization-user" --display-name="Synchronization User" --system
记录 access_key 和 secret_key,因为次要区域将需要它们与 master 区域进行身份验证。
最后,将系统用户添加到 master 区域。
[root@master-zone]# radosgw-admin zone modify --rgw-zone=us-east --access-key={access-key} --secret={secret}
[root@master-zone]# radosgw-admin period update --commit
5.4.6. 更新 Period 复制链接链接已复制到粘贴板!
在更新 master zone 配置后,更新 period。
# radosgw-admin period update --commit
更新 period 将更改 epoch,并确保其他区域接收更新的配置。
5.4.7. 更新 Ceph 配置文件 复制链接链接已复制到粘贴板!
通过添加 rgw_zone 配置选项和 master zone 的名称到实例条目,更新 master zone 主机上的 Ceph 配置文件。
[client.rgw.{instance-name}]
...
rgw_zone={zone-name}
例如:
[client.rgw.rgw1]
host = rgw1
rgw frontends = "civetweb port=80"
rgw_zone=us-east
5.4.8. 启动网关 复制链接链接已复制到粘贴板!
在对象网关主机上,启动并启用 Ceph 对象网关服务:
# systemctl start ceph-radosgw@rgw.`hostname -s`
# systemctl enable ceph-radosgw@rgw.`hostname -s`
如果服务已在运行,重启该服务而不是启动和启用它:
# systemctl restart ceph-radosgw@rgw.`hostname -s`
5.5. 建立第二个区域 复制链接链接已复制到粘贴板!
zone group 中的区域复制所有数据,以确保每个 zone 有相同的数据。在创建 second zone 时,在标识为 second zone 服务的主机上执行 ALL of theradosgw-admin zone 操作。
要添加其他区域,请遵循与添加 second zone 相同的步骤。使用不同的区域名称。
您必须在 master zonegroup 的 master zone 中的主机上执行元数据操作,如用户创建和配额。master zone 和 second zone 可以从 RESTful API 接收 bucket 操作,但 second zone 将存储桶操作重定向到 master zone。如果 master zone 停机,则存储桶操作将失败。如果使用 theradosgw-admin CLI 创建存储桶,则必须在 master zone group 的 master zone 中的主机上执行,否则存储桶不会同步到其他 zone group 和 zone。
5.5.1. 拉取 Realm 复制链接链接已复制到粘贴板!
使用 master zone group 中 master zone 的 URL 路径、访问密钥和机密,将域拉取到主机。若要拉取非默认域,可使用 --rgw-realm 或 配置选项来指定域。
--realm- id
# radosgw-admin realm pull --url={url-to-master-zone-gateway} --access-key={access-key} --secret={secret}
如果此 realm 是默认域或唯一的域,请将 realm 设为默认域。
# radosgw-admin realm default --rgw-realm={realm-name}
5.5.2. 拉取 Period 复制链接链接已复制到粘贴板!
使用 master zone group 中 master zone 的 URL 路径、access key 和 secret,将 period 拉取到主机。若要从非默认域拉取句点,可使用 --rgw-realm 或 配置选项指定域。
--realm- id
# radosgw-admin period pull --url={url-to-master-zone-gateway} --access-key={access-key} --secret={secret}
拉取 period 将检索该域的最新版本 zone group 和 zone 配置。
5.5.3. 创建第二个区域 复制链接链接已复制到粘贴板!
必须在位于 区域内的 Ceph 对象网关节点上创建区域。
通过在标记为为 second zone 的主机上打开命令行界面,为多站点配置创建一个 second zone。指定 zone group ID、新 zone 名称和 zone 的端点。不要 使用 --master 或 --default 标志。在红帽 Ceph 存储 2 中,默认情况下,所有区域都以主动-主动配置运行;即,网关客户端可能会将数据写入任何区域,区域会将数据复制到 zone group 中的所有其他 zone。如果 second zone 不接受写操作,请指定 --read-only 标志,以在 master zone 和 second zone 之间创建主动-被动配置。另外,为存储在 master zone group 的 master zone 中的生成的系统用户提供 access 。执行以下命令:
_key 和 secret_key
[root@second-zone]# radosgw-admin zone create \
--rgw-zonegroup={zone-group-name}\
--rgw-zone={zone-name} --endpoints={url} \
--access-key={system-key} --secret={secret}\
--endpoints=http://{fqdn}:80 \
[--read-only]
例如:
[root@second-zone]# radosgw-admin zone create --rgw-zonegroup=us \
--rgw-zone=us-west \
--access-key={system-key} --secret={secret} \
--endpoints=http://rgw2:80
以下步骤假设使用新安装的系统(这些系统没有存储数据)进行多站点配置。如果您已在使用默认区域及其池来存储数据,请勿对 默认 区域及其池进行 DELETE,否则数据将会丢失并不可恢复。
删除默认区域(如果需要)。
[root@second-zone]# radosgw-admin zone delete --rgw-zone=default
最后,根据需要删除 Ceph 存储集群中的默认池。
# rados rmpool default.rgw.control default.rgw.control --yes-i-really-really-mean-it
# rados rmpool default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
# rados rmpool default.rgw.gc default.rgw.gc --yes-i-really-really-mean-it
# rados rmpool default.rgw.log default.rgw.log --yes-i-really-really-mean-it
# rados rmpool default.rgw.users.uid default.rgw.users.uid --yes-i-really-really-mean-it
5.5.4. 更新 Period 复制链接链接已复制到粘贴板!
在更新 master zone 配置后,更新 period。
# radosgw-admin period update --commit
更新 period 将更改 epoch,并确保其他区域接收更新的配置。
5.5.5. 更新 Ceph 配置文件 复制链接链接已复制到粘贴板!
通过将 rgw_zone 配置选项和 second zone 的名称添加到实例条目,更新 second zone 主机上的 Ceph 配置文件。
[client.rgw.{instance-name}]
...
rgw_zone={zone-name}
例如:
[client.rgw.rgw2]
host = rgw2
rgw frontends = "civetweb port=80"
rgw_zone=us-west
5.5.6. 启动网关 复制链接链接已复制到粘贴板!
在对象网关主机上,启动并启用 Ceph 对象网关服务:
# systemctl start ceph-radosgw@rgw.`hostname -s`
# systemctl enable ceph-radosgw@rgw.`hostname -s`
如果服务已在运行,重启该服务而不是启动和启用它:
# systemctl restart ceph-radosgw@rgw.`hostname -s`
5.6. 故障切换和灾难恢复 复制链接链接已复制到粘贴板!
如果 master zone 应该失败,请切换到 second zone 进行灾难恢复。
将 second zone 设置为 master 和 default zone。例如:
# radosgw-admin zone modify --rgw-zone={zone-name} --master --default默认情况下,Ceph 对象网关将在主动-主动配置中运行。如果集群配置为以主动-被动配置运行,则 second zone 是只读区域。删除
--read-only状态,以允许区域接收写入操作。例如:# radosgw-admin zone modify --rgw-zone={zone-name} --master --default更新 period 以使更改生效。
# radosgw-admin period update --commit最后,重新启动 Ceph 对象网关。
# systemctl restart ceph-radosgw@rgw.`hostname -s`
如果前一个 master zone 恢复,请恢复该操作。
从恢复的区域中,从当前 master 区域中拉取 realm。
# radosgw-admin realm pull --url={url-to-master-zone-gateway} \ --access-key={access-key} --secret={secret}将恢复的区域设为 master 和 default 区域。
# radosgw-admin zone modify --rgw-zone={zone-name} --master --default更新 period 以使更改生效。
# radosgw-admin period update --commit然后,在恢复的区域中重启 Ceph 对象网关。
# systemctl restart ceph-radosgw@rgw.`hostname -s`如果 second zone 需要是只读配置,请更新 second zone。
# radosgw-admin zone modify --rgw-zone={zone-name} --read-only更新 period 以使更改生效。
# radosgw-admin period update --commit最后,在 second zone 中重新启动 Ceph 对象网关。
# systemctl restart ceph-radosgw@rgw.`hostname -s`
5.7. 将单一站点系统迁移到多站点 复制链接链接已复制到粘贴板!
要从带有 默认 区组和区的单一站点系统迁移到多站点系统,请使用以下步骤:
创建 realm。将
<name>替换为 realm 名称。[root@master-zone]# radosgw-admin realm create --rgw-realm=<name> --default重命名默认区域和 zonegroup。将
<name>替换为 zonegroup 或 zone name。[root@master-zone]# radosgw-admin zonegroup rename --rgw-zonegroup default --zonegroup-new-name=<name> [root@master-zone]# radosgw-admin zone rename --rgw-zone default --zone-new-name us-east-1 --rgw-zonegroup=<name>配置 master zonegroup。将
<name>替换为 realm 或 zonegroup 名称。将<fqdn>替换为 zonegroup 中的完全限定域名。[root@master-zone]# radosgw-admin zonegroup modify --rgw-realm=<name> --rgw-zonegroup=<name> --endpoints http://<fqdn>:80 --master --default配置 master zone。将
<name>替换为 realm、zonegroup 或 zone name。将<fqdn>替换为 zonegroup 中的完全限定域名。[root@master-zone]# radosgw-admin zone modify --rgw-realm=<name> --rgw-zonegroup=<name> \ --rgw-zone=<name> --endpoints http://<fqdn>:80 \ --access-key=<access-key> --secret=<secret-key> \ --master --default创建系统用户.将
<user-id>替换为用户名。将<display-name>替换为显示名称。它可以包含空格。[root@master-zone]# radosgw-admin user create --uid=<user-id> \ --display-name="<display-name>" \ --access-key=<access-key> --secret=<secret-key> \ --system提交更新的配置。
# radosgw-admin period update --commit最后,重新启动 Ceph 对象网关。
# systemctl restart ceph-radosgw@rgw.`hostname -s`
完成此步骤后,继续建立第二个 区域,以在 master zone group 中创建 second zone。
5.8. 多站点命令行使用 复制链接链接已复制到粘贴板!
5.8.1. realm 复制链接链接已复制到粘贴板!
realm 代表一个全局唯一的命名空间,它由一个或多个 zone group 组成,包含一个或多个 zone,以及包含 bucket 的区域,后者又包含对象。域允许 Ceph 对象网关在同一硬件上支持多个命名空间及其配置。
域中包含句点的概念。每个 period 代表 zone group 和 zone 配置的状态。每次您更改一个 zonegroup 或 zone zone 时,更新 period 并提交。
默认情况下,Ceph 对象网关版本 2 不创建域,以向后兼容版本 1.3 及更早的版本。但是,作为一种最佳实践,红帽建议为新集群创建域。
5.8.1.1. 创建 Realm 复制链接链接已复制到粘贴板!
若要创建域,可执行 realm create 并指定 realm 名称。如果 realm 是默认值,指定 --default。
[root@master-zone]# radosgw-admin realm create --rgw-realm={realm-name} [--default]
例如:
[root@master-zone]# radosgw-admin realm create --rgw-realm=movies --default
通过指定 --default,域将通过 each radosgw-admin 调用隐式调用,除非明确提供了 --rgw-realm 和 realm 名称。
5.8.1.2. 将 Realm 设置为默认值 复制链接链接已复制到粘贴板!
realm 列表中的一个域应为默认域。可能只有一个默认域。如果只有一个域,但没有在创建时指定为默认域,则使其成为默认域。或者,要更改哪个域是默认域,请执行:
[root@master-zone]# radosgw-admin realm default --rgw-realm=movies
当 realm 为 default 时,命令行假设 --rgw-realm=<realm-name> 作为参数。
5.8.1.3. 删除 Realm 复制链接链接已复制到粘贴板!
若要删除域,可执行 realm delete 并指定 realm 名称。
[root@master-zone]# radosgw-admin realm delete --rgw-realm={realm-name}
例如:
[root@master-zone]# radosgw-admin realm delete --rgw-realm=movies
5.8.1.4. 获取域 复制链接链接已复制到粘贴板!
若要获取域,可执行 realm get 并指定 realm 名称。
# radosgw-admin realm get --rgw-realm=<name>
例如:
# radosgw-admin realm get --rgw-realm=movies [> filename.json]
CLI 将回显具有 realm 属性的 JSON 对象。
{
"id": "0a68d52e-a19c-4e8e-b012-a8f831cb3ebc",
"name": "movies",
"current_period": "b0c5bbef-4337-4edd-8184-5aeab2ec413b",
"epoch": 1
}
使用 > 和输出文件名将 JSON 对象输出到文件中。
5.8.1.5. 设置 Realm 复制链接链接已复制到粘贴板!
若要设置 realm,可执行 realm 设置,使用输入文件名指定 realm 名称和 --infile=。
[root@master-zone]# radosgw-admin realm set --rgw-realm=<name> --infile=<infilename>
例如:
[root@master-zone]# radosgw-admin realm set --rgw-realm=movies --infile=filename.json
5.8.1.6. 列出 Realms 复制链接链接已复制到粘贴板!
若要列出 realm,可执行 realm list。
# radosgw-admin realm list
5.8.1.7. 列出 Realm Periods 复制链接链接已复制到粘贴板!
若要列出 realm period,可执行 realm list-periods。
# radosgw-admin realm list-periods
5.8.1.8. 拉取域 复制链接链接已复制到粘贴板!
若要将含有 master zone group 和 master zone 的节点的域拉取到包含 second zone group 或 zone 的节点,请在将接收 realm 配置的节点上执行 realm pull。
# radosgw-admin realm pull --url={url-to-master-zone-gateway} --access-key={access-key} --secret={secret}
5.8.1.9. 重命名域 复制链接链接已复制到粘贴板!
realm 不是该 period 的一部分。因此,仅在本地应用重命名域,且不会通过 realm pull 来拉取。重命名具有多个区域的域时,在每个区域上运行 命令。要重命名域,请执行以下操作:
# radosgw-admin realm rename --rgw-realm=<current-name> --realm-new-name=<new-realm-name>
不要使用 realm set 来更改 name 参数。这仅更改内部名称。指定 --rgw-realm 仍然会使用旧的域名。
5.8.2. zone group 复制链接链接已复制到粘贴板!
Ceph 对象网关利用 zone group 的概念来支持多站点部署和全局命名空间。zone group 以前称为红帽 Ceph 存储 1.3 中的地区,它定义一个或多个 zone 中一个或多个 Ceph 对象网关实例的地理位置。
配置 zone group 与典型的配置过程不同,因为并非所有设置都最终在 Ceph 配置文件中。您可以列出 zone group、获取 zone group 配置并设置 zone group 配置。
The radosgw-admin zonegroup 对 realm内的任何主机上执行 MAY 操作,因为更新 period 的步骤会在整个集群中传播更改。但是,radosgw-admin 区域 在区域内的主机上执行 MUST。
5.8.2.1. 创建区组 复制链接链接已复制到粘贴板!
创建 zone group 包括指定 zone group name。创建区假设它将存在于默认域中,除非指定了 --rgw-realm=<realm-name>。如果 zonegroup 是默认 zonegroup,请指定 --default 标志。如果 zonegroup 是 master zonegroup,请指定 --master 标志。例如:
# radosgw-admin zonegroup create --rgw-zonegroup=<name> [--rgw-realm=<name>][--master] [--default]
使用 zonegroup 修改 --rgw-zonegroup=<zonegroup-name> 来修改现有 zone group 的设置。
5.8.2.2. 将区组设为默认值 复制链接链接已复制到粘贴板!
zonegroups 列表中有一个 zonegroup 应当是 default zonegroup。可能只有一个默认 zonegroup。如果只有一个 zonegroup,并且它没有在创建时指定为默认 zonegroup,则使其成为默认 zonegroup。另外,要更改哪个 zonegroup 是默认 zonegroup,请执行:
# radosgw-admin zonegroup default --rgw-zonegroup=comedy
当 zonegroup 为 default 时,命令行假设 --rgw-zonegroup=<zonegroup-name> 作为参数。
然后,更新周期:
# radosgw-admin period update --commit
5.8.2.3. 在区组中添加一个区 复制链接链接已复制到粘贴板!
若要向 zonegroup 添加区域,您必须在区域中的 主机上执行 此步骤。要在 zonegroup 中添加区,请执行以下操作:
# radosgw-admin zonegroup add --rgw-zonegroup=<name> --rgw-zone=<name>
然后,更新周期:
# radosgw-admin period update --commit
5.8.2.4. 从区组中删除区 复制链接链接已复制到粘贴板!
要从 zonegroup 中删除区,请执行以下操作:
# radosgw-admin zonegroup remove --rgw-zonegroup=<name> --rgw-zone=<name>
然后,更新周期:
# radosgw-admin period update --commit
5.8.2.5. 重命名一个区组 复制链接链接已复制到粘贴板!
要重命名 zonegroup,请执行以下操作:
# radosgw-admin zonegroup rename --rgw-zonegroup=<name> --zonegroup-new-name=<name>
然后,更新周期:
# radosgw-admin period update --commit
5.8.2.6. 删除区组 复制链接链接已复制到粘贴板!
要删除 zonegroup,请执行以下操作:
# radosgw-admin zonegroup delete --rgw-zonegroup=<name>
然后,更新周期:
# radosgw-admin period update --commit
5.8.2.7. 列出区组 复制链接链接已复制到粘贴板!
Ceph 集群包含 zone group 的列表。要列出区组,请执行:
# radosgw-admin zonegroup list
The radosgw-admin 返回一个 JSON 格式的 zone group 列表。
{
"default_info": "90b28698-e7c3-462c-a42d-4aa780d24eda",
"zonegroups": [
"us"
]
}
5.8.2.8. 获取区组 复制链接链接已复制到粘贴板!
要查看 zone group 的配置,请执行:
# radosgw-admin zonegroup get [--rgw-zonegroup=<zonegroup>]
zone group 配置类似如下:
{
"id": "90b28698-e7c3-462c-a42d-4aa780d24eda",
"name": "us",
"api_name": "us",
"is_master": "true",
"endpoints": [
"http:\/\/rgw1:80"
],
"hostnames": [],
"hostnames_s3website": [],
"master_zone": "9248cab2-afe7-43d8-a661-a40bf316665e",
"zones": [
{
"id": "9248cab2-afe7-43d8-a661-a40bf316665e",
"name": "us-east",
"endpoints": [
"http:\/\/rgw1"
],
"log_meta": "true",
"log_data": "true",
"bucket_index_max_shards": 0,
"read_only": "false"
},
{
"id": "d1024e59-7d28-49d1-8222-af101965a939",
"name": "us-west",
"endpoints": [
"http:\/\/rgw2:80"
],
"log_meta": "false",
"log_data": "true",
"bucket_index_max_shards": 0,
"read_only": "false"
}
],
"placement_targets": [
{
"name": "default-placement",
"tags": []
}
],
"default_placement": "default-placement",
"realm_id": "ae031368-8715-4e27-9a99-0c9468852cfe"
}
5.8.2.9. 设置区组 复制链接链接已复制到粘贴板!
定义 zone group 包括创建 JSON 对象,至少指定所需的设置:
-
name:zone group 的名称。必需。 -
api_name:zone group 的 API 名称。可选。 -
is_master:确定 zone group 是 master zone group。必需。注意: 您只能有一个 master zone group。 -
endpoint:zone group 中所有端点的列表。例如,您可以使用多个域名来引用同一 zone group。记住转义正斜杠(\/)。您还可以为每个端点指定一个端口(fqdn:port)。可选。 -
hostnames:zone group 中所有主机名的列表。例如,您可以使用多个域名来引用同一 zone group。可选。rgw dns name设置将自动包含在此列表中。您应在更改此设置后重新启动网关守护进程。 -
master_zone: zone group 的 master zone。可选。如果未指定,则使用默认区域。注意: 每个 zone group 中只能有一个 master zone。 -
zones:zonegroup 中所有 zone 的列表。每个区域都有一个名称(必需),一个端点列表(可选),以及网关是否记录元数据和数据操作(默认为false)。 -
placement_targets:放置目标列表(可选)。每个放置目标都包含放置目标的名称(必需)和一个标签列表(可选),以便只有具有标签的用户才能使用放置目标(例如,用户 info 中的placement_tags字段)。 -
default_placement:对象索引和对象数据的默认放置目标。默认设置为 default-placement。您还可以在用户信息中为每个用户设置默认放置位置。
要设置 zone group,创建一个由所需字段组成的 JSON 对象,将对象保存到文件中(如 zonegroup.json);然后执行以下命令:
# radosgw-admin zonegroup set --infile zonegroup.json
其中 zonegroup.json 是您创建的 JSON 文件。
默认 zone group is_master 设置默认为 true。如果您创建新 zone group 并希望使其成为 master zone group,您必须将 default zone group is_master 设置设置为 false,或删除 default zone group。
最后,更新周期:
# radosgw-admin period update --commit
5.8.2.10. 设置区组映射 复制链接链接已复制到粘贴板!
设置 zone group map 包括创建一个由一个或多个 zone group 组成的 JSON 对象,并为集群设置 master_zonegroup。zone group map 中的每个 zone group 由一个键/值对组成,其中 键 设置等同于单个 zone group 配置的 name 设置,而 val 则是由单个 zone group 配置组成的 JSON 对象。
您只能有一个 zone group is_master 等于 true,它必须指定为 zone group map 末尾的 master_zonegroup。以下 JSON 对象是默认 zone group map 的示例:
{
"zonegroups": [
{
"key": "90b28698-e7c3-462c-a42d-4aa780d24eda",
"val": {
"id": "90b28698-e7c3-462c-a42d-4aa780d24eda",
"name": "us",
"api_name": "us",
"is_master": "true",
"endpoints": [
"http:\/\/rgw1:80"
],
"hostnames": [],
"hostnames_s3website": [],
"master_zone": "9248cab2-afe7-43d8-a661-a40bf316665e",
"zones": [
{
"id": "9248cab2-afe7-43d8-a661-a40bf316665e",
"name": "us-east",
"endpoints": [
"http:\/\/rgw1"
],
"log_meta": "true",
"log_data": "true",
"bucket_index_max_shards": 0,
"read_only": "false"
},
{
"id": "d1024e59-7d28-49d1-8222-af101965a939",
"name": "us-west",
"endpoints": [
"http:\/\/rgw2:80"
],
"log_meta": "false",
"log_data": "true",
"bucket_index_max_shards": 0,
"read_only": "false"
}
],
"placement_targets": [
{
"name": "default-placement",
"tags": []
}
],
"default_placement": "default-placement",
"realm_id": "ae031368-8715-4e27-9a99-0c9468852cfe"
}
}
],
"master_zonegroup": "90b28698-e7c3-462c-a42d-4aa780d24eda",
"bucket_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
}
}
要设置区组映射,请执行以下操作:
# radosgw-admin zonegroup-map set --infile zonegroupmap.json
其中 zonegroupmap.json 是您创建的 JSON 文件。确保为 zone group map 中指定的区域创建了区域。最后,更新周期。
# radosgw-admin period update --commit
5.8.3. Zones 复制链接链接已复制到粘贴板!
Ceph 对象网关支持区域的概念。zone 定义由一个或多个 Ceph 对象网关实例组成的逻辑组。
配置区域与典型配置过程有所不同,因为并非所有设置都最终在 Ceph 配置文件中。您可以列出区、获取区配置和设置区域配置。
All radosgw-admin 区域 在运行 或 区域的主机上执行 MUST。
5.8.3.1. 创建区域 复制链接链接已复制到粘贴板!
要创建区域,请指定区域名称。如果是一个 master 区域,指定 --master 选项。zone group 中只有一个 zone 可以是 master zone。要将区域添加到 zonegroup,请使用 zonegroup 名称指定 --rgw-zonegroup 选项。
必须在位于 区域内的 Ceph 对象网关节点上创建区域。
[root@zone] radosgw-admin zone create --rgw-zone=<name> \
[--zonegroup=<zonegroup-name]\
[--endpoints=<endpoint:port>[,<endpoint:port>] \
[--master] [--default] \
--access-key $SYSTEM_ACCESS_KEY --secret $SYSTEM_SECRET_KEY
然后,更新周期:
# radosgw-admin period update --commit
5.8.3.2. 删除区 复制链接链接已复制到粘贴板!
若要删除区域,首先将其从 zonegroup 中删除。
# radosgw-admin zonegroup remove --zonegroup=<name>\
--zone=<name>
然后,更新周期:
# radosgw-admin period update --commit
接下来,删除该区域。
此过程必须在 区域内的主机上执行。
执行以下命令:
[root@zone]# radosgw-admin zone delete --rgw-zone<name>
最后,更新周期:
# radosgw-admin period update --commit
不要先从 zone group 中删除区域。否则,更新周期将失败。
如果已删除区域的池不会在其他任何位置使用,请考虑删除池。将以下示例 中的 <del-zone> 替换为已删除区的名称。
当 Ceph 删除 zone 池后,它会以无法恢复的方式删除其中的所有数据。仅当 Ceph 客户端不再需要池内容时,仅删除 zone 池。
在多域集群中,删除 .rgw.root 池以及 zone 池将移除群集的所有域信息。在删除 .rgw.root 池之前,确保. rgw.root 不包含其他活动域。
# rados rmpool <del-zone>.rgw.control <del-zone>.rgw.control --yes-i-really-really-mean-it
# rados rmpool <del-zone>.rgw.data.root <del-zone>.rgw.data.root --yes-i-really-really-mean-it
# rados rmpool <del-zone>.rgw.gc <del-zone>.rgw.gc --yes-i-really-really-mean-it
# rados rmpool <del-zone>.rgw.log <del-zone>.rgw.log --yes-i-really-really-mean-it
# rados rmpool <del-zone>.rgw.users.uid <del-zone>.rgw.users.uid --yes-i-really-really-mean-it
5.8.3.3. 修改区域 复制链接链接已复制到粘贴板!
若要修改区域,请指定区域名称和您要修改的参数。
应在位于 区域内的 Ceph 对象网关节点上修改区域。
[root@zone]# radosgw-admin zone modify [options]
--access-key=<key> --secret/--secret-key=<key> --master --default --endpoints=<list>
然后,更新周期:
# radosgw-admin period update --commit
5.8.3.4. 列出区域 复制链接链接已复制到粘贴板!
以 root 用户身份列出集群中的区域,请执行:
# radosgw-admin zone list
5.8.3.5. 获取区域 复制链接链接已复制到粘贴板!
以 root 身份获取区配置,请执行:
# radosgw-admin zone get [--rgw-zone=<zone>]
默认 区类似如下:
{ "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"}
}
]
}
5.8.3.6. 设置区域 复制链接链接已复制到粘贴板!
配置区域涉及指定一系列 Ceph 对象网关池。为保持一致性,我们建议使用与区域名称相同的池前缀。有关配置池的详细信息,请参阅 Pools_。
区域应在位于 区域内的 Ceph 对象网关节点上设置。
要设置区,创建一个由池组成的 JSON 对象,将对象保存到文件中(如 zone.json);然后执行以下命令,将 {zone-name} 替换为区名称:
[root@zone]# radosgw-admin zone set --rgw-zone={zone-name} --infile zone.json
其中 zone.json 是您创建的 JSON 文件。
然后,以 root 用户身份更新周期:
# radosgw-admin period update --commit
5.8.3.7. 重命名区域 复制链接链接已复制到粘贴板!
要重命名区域,请指定区域名称和新区域名称。在区中的主机上执行以下内容:
[root@zone]# radosgw-admin zone rename --rgw-zone=<name> --zone-new-name=<name>
然后,更新周期:
# radosgw-admin period update --commit
5.9. zone group 和 zone 配置设置 复制链接链接已复制到粘贴板!
在配置默认 zone group 和 zone 时,池名称中包含 zone 名称。例如:
-
default.rgw.control
若要更改默认值,可在 Ceph 配置文件中的每个 [client.rgw.{instance-name}] 实例下包含下列设置。
| 名称 | 描述 | 类型 | 默认 |
|---|---|---|---|
|
| 网关实例的区域名称。 | 字符串 | 无 |
|
| 网关实例 zone group 的名称。 | 字符串 | 无 |
|
| zone group 的根池。 | 字符串 |
|
|
| 区域的根池。 | 字符串 |
|
|
| 存储默认 zone group 的 OID。我们不建议更改此设置。 | 字符串 |
|
|
| 用于保持区间组同步进度的分片的最大数量。 | 整数 |
|
5.10. 使用多站点手动 Resharding Bucket 复制链接链接已复制到粘贴板!
{storage-product} DOES 不支持 多站点集群的动态存储桶重新划分。您可以使用以下步骤在多站点集群中手动重新定义存储桶。
- 备注
- 手动重新划分过程非常昂贵,特别是对于保证手动重新划分的大型存储桶。每个 second zone 删除所有对象,然后从 master zone 重新同步它们。
先决条件
- 停止所有对象网关实例。
流程
在 master zone group 的 master zone 区的一个节点中执行以下命令:
# radosgw-admin bucket sync disable --bucket=BUCKET_NAME等待
所有区域的同步状态报告数据 同步为最新版本。-
在 ALL 区域中 停止所有
ceph-radosgw守护进程。 在 master zone group 的 master zone 的一个节点上,重新定义存储桶。例如:
# radosgw-admin bucket reshard --bucket=BUCKET_NAME --num-shards=NEW_SHARDS_NUMBEROn EACH second zone 执行以下操作:
# radosgw-admin bucket rm --purge-objects --bucket=BUCKET_NAME-
在 ALL 区域中 重启所有
ceph-radosgw守护进程。 在 master zone group 的 master zone 区的一个节点中执行以下命令:
# radosgw-admin bucket sync enable --bucket=BUCKET_NAME
元数据同步过程将获取更新的 bucket 入口点和 bucket 实例元数据。数据同步过程将执行完全同步。
5.11. 在不使用复制的情况下配置多个区域 复制链接链接已复制到粘贴板!
您可以配置多个不会相互复制的区域。例如,您可以为公司中的每个团队创建一个专用区。
先决条件
- 安装了 Ceph 对象网关的 Ceph 存储群集。
流程
创建 realm。
radosgw-admin realm create --rgw-realm=realm-name [--default]例如:
[root@master-zone]# radosgw-admin realm create --rgw-realm=movies --default { "id": "0956b174-fe14-4f97-8b50-bb7ec5e1cf62", "name": "movies", "current_period": "1950b710-3e63-4c41-a19e-46a715000980", "epoch": 1 }创建 zone group。
radosgw-admin zonegroup create --rgw-zonegroup=zone-group-name --endpoints=url [--rgw-realm=realm-name|--realm-id=realm-id] --master --default例如:
[root@master-zone]# radosgw-admin zonegroup create --rgw-zonegroup=us --endpoints=http://rgw1:80 --rgw-realm=movies --master --default { "id": "f1a233f5-c354-4107-b36c-df66126475a6", "name": "us", "api_name": "us", "is_master": "true", "endpoints": [ "http:\/\/rgw1:80" ], "hostnames": [], "hostnames_s3webzone": [], "master_zone": "", "zones": [], "placement_targets": [], "default_placement": "", "realm_id": "0956b174-fe14-4f97-8b50-bb7ec5e1cf62" }根据您的用例,创建一个或多个区域。
radosgw-admin zone create --rgw-zonegroup=zone-group-name \ --rgw-zone=zone-name \ --master --default \ --endpoints=http://fqdn:port[,http://fqdn:port]例如:
[root@master-zone]# radosgw-admin zone create --rgw-zonegroup=us \ --rgw-zone=us-east \ --master --default \ --endpoints=http://rgw1:80使用 zone group 的配置获取 JSON 文件。
radosgw-admin zonegroup get --rgw-zonegroup=zone-group-name > zonegroup.json例如:
[root@master-zone]# radosgw-admin zonegroup get --rgw-zonegroup=us > zonegroup.json在 文件中,将
log_meta、log_data和sync_from_all参数设置为false。{ "id": "72f3a886-4c70-420b-bc39-7687f072997d", "name": "default", "api_name": "", "is_master": "true", "endpoints": [], "hostnames": [], "hostnames_s3website": [], "master_zone": "a5e44ecd-7aae-4e39-b743-3a709acb60c5", "zones": [ { "id": "975558e0-44d8-4866-a435-96d3e71041db", "name": "testzone", "endpoints": [], "log_meta": "false", "log_data": "false", "bucket_index_max_shards": 0, "read_only": "false", "tier_type": "", "sync_from_all": "false", "sync_from": [] }, { "id": "a5e44ecd-7aae-4e39-b743-3a709acb60c5", "name": "default", "endpoints": [], "log_meta": "false", "log_data": "false", "bucket_index_max_shards": 0, "read_only": "false", "tier_type": "", "sync_from_all": "false", "sync_from": [] } ], "placement_targets": [ { "name": "default-placement", "tags": [] } ], "default_placement": "default-placement", "realm_id": "2d988e7d-917e-46e7-bb18-79350f6a5155" }使用更新的 JSON 文件。
radosgw-admin zonegroup set --rgw-zonegroup=zone-group-name --infile=zonegroup.json例如:
[root@master-zone]# radosgw-admin zonegroup set --rgw-zonegroup=us --infile=zonegroup.json更新 period。
# radosgw-admin period update --commit
5.12. 在同一存储集群中配置多个域 复制链接链接已复制到粘贴板!
本节讨论如何在同一存储集群中配置多个域。这是多站点更高级的使用案例。在同一个存储集群中配置多个域可让您使用本地域来处理本地 RGW 客户端流量,以及复制到辅助站点的数据的复制域。
红帽建议每个域具有自己的 Ceph 对象网关。
先决条件
- 存储集群中每个数据中心的访问密钥和密钥。
- 在存储集群中运行两个 {storage-product} 数据中心。
- 每个数据中心都有自己的本地域。它们共享两个站点上复制的域。
- 在 Ceph 对象网关节点上,执行《 {storage-product} 安装指南》中找到的安装红帽 Ceph 存储要求 中列出的任务。
- 对于每个 Ceph 对象网关节点,执行《 {storage-product} 安装指南》的"安装 Ceph 对象网关 "一节中的第 1-7 步。
流程
创建同步用户:
语法
radosgw-admin user create --uid="SYNCHRONIZATION_USER" --display-name="Synchronization User" --system在存储集群的第一个数据中心上创建一个本地域:
语法
radosgw-admin realm create --rgw-realm=REALM_NAME --default示例
[user@rgw1]$ radosgw-admin realm create --rgw-realm=ldc1 --default在第一个数据中心上创建一个本地 master zonegroup:
语法
radosgw-admin zonegroup create --rgw-zonegroup=ZONE_GROUP_NAME --endpoints=http://RGW_NODE_NAME:80 --rgw-realm=REALM_NAME --master --default示例
[user@rgw1]$ radosgw-admin zonegroup create --rgw-zonegroup=ldc1zg --endpoints=http://rgw1:80 --rgw-realm=ldc1 --master --default在第一个数据中心创建一个本地区:
语法
radosgw-admin zone create --rgw-zonegroup=ZONE_GROUP_NAME --rgw-zone=ZONE_NAME --master --default --endpoints=HTTP_FQDN[,HTTP_FQDN]示例
[user@rgw1]$ radosgw-admin zone create --rgw-zonegroup=ldc1zg --rgw-zone=ldc1z --master --default --endpoints=http://rgw.example.com提交周期:
示例
[user@rgw1]$ radosgw-admin period update --commit使用
rgw_realm、rgw_zonegroup 和名称更新rgw_zoneceph.conf:语法
rgw_realm = REALM_NAME rgw_zonegroup = ZONE_GROUP_NAME rgw_zone = ZONE_NAME示例
rgw_realm = ldc1 rgw_zonegroup = ldc1zg rgw_zone = ldc1z重启 RGW 守护进程:
语法
systemctl restart ceph-radosgw@rgw.$(hostname -s).rgw0.service在存储集群中的第二个数据中心上创建一个本地域:
语法
radosgw-admin realm create --rgw-realm=REALM_NAME --default示例
[user@rgw2]$ radosgw-admin realm create --rgw-realm=ldc2 --default在第二个数据中心上创建一个本地 master zonegroup:
语法
radosgw-admin zonegroup create --rgw-zonegroup=ZONE_GROUP_NAME --endpoints=http://RGW_NODE_NAME:80 --rgw-realm=REALM_NAME --master --default示例
[user@rgw2]$ radosgw-admin zonegroup create --rgw-zonegroup=ldc2zg --endpoints=http://rgw2:80 --rgw-realm=ldc2 --master --default在第二个数据中心创建一个本地区:
语法
radosgw-admin zone create --rgw-zonegroup=ZONE_GROUP_NAME --rgw-zone=ZONE_NAME --master --default --endpoints=HTTP_FQDN[, HTTP_FQDN]示例
[user@rgw2]$ radosgw-admin zone create --rgw-zonegroup=ldc2zg --rgw-zone=ldc2z --master --default --endpoints=http://rgw.example.com提交周期:
示例
[user@rgw2]$ radosgw-admin period update --commit使用
rgw_realm、rgw_zonegroup 和名称更新rgw_zoneceph.conf:语法
rgw_realm = REALM_NAME rgw_zonegroup = ZONE_GROUP_NAME rgw_zone = ZONE_NAME示例
rgw_realm = ldc2 rgw_zonegroup = ldc2zg rgw_zone = ldc2z重启 RGW 守护进程:
语法
systemctl restart ceph-radosgw@rgw.$(hostname -s).rgw0.service创建复制/同步用户:
语法
radosgw-admin user create --uid="r_REPLICATION_SYNCHRONIZATION_USER_" --display-name="Replication-Synchronization User" --system在存储集群的第一个数据中心上创建一个复制的域:
语法
radosgw-admin realm create --rgw-realm=REPLICATED_REALM_1示例
[user@rgw1] radosgw-admin realm create --rgw-realm=rdc1为第一个数据中心创建一个 master zonegroup:
语法
radosgw-admin zonegroup create --rgw-zonegroup=RGW_ZONE_GROUP --endpoints=http://_RGW_NODE_NAME:80 --rgw-realm=_RGW_REALM_NAME --master --default示例
[user@rgw1] radosgw-admin zonegroup create --rgw-zonegroup=rdc1zg --endpoints=http://rgw1:80 --rgw-realm=rdc1 --master --default在第一个数据中心上创建一个 master zone:
语法
radosgw-admin zone create --rgw-zonegroup=RGW_ZONE_GROUP --rgw-zone=_MASTER_RGW_NODE_NAME --master --default --endpoints=HTTP_FQDN[,HTTP_FQDN]示例
[user@rgw1] radosgw-admin zone create --rgw-zonegroup=rdc1zg --rgw-zone=rdc1z --master --default --endpoints=http://rgw.example.com提交周期:
语法
radosgw-admin period update --commit使用第一个数据中心的
rgw_realm、rgw_zonegroup和rgw_zone名称更新ceph.conf:语法
rgw_realm = REALM_NAME rgw_zonegroup = ZONE_GROUP_NAME rgw_zone = ZONE_NAME示例
rgw_realm = rdc1 rgw_zonegroup = rdc1zg rgw_zone = rdc1z重启 RGW 守护进程:
语法
systemctl restart ceph-radosgw@rgw.$(hostname -s).rgw0.service在第二个数据中心上拉取复制域:
语法
radosgw-admin realm pull --url=https://tower-osd1.cephtips.com --access-key=ACCESS_KEY --secret-key=SECRET_KEY示例
radosgw-admin realm pull --url=https://tower-osd1.cephtips.com --access-key=3QV0D6ZMMCJZMSCXJ2QJ --secret-key=VpvQWcsfI9OPzUCpR4kynDLAbqa1OIKqRB6WEnH8从第一个数据中心拉取 period:
语法
radosgw-admin period pull --url=https://tower-osd1.cephtips.com --access-key=ACCESS_KEY --secret-key=SECRET_KEY示例
radosgw-admin period pull --url=https://tower-osd1.cephtips.com --access-key=3QV0D6ZMMCJZMSCXJ2QJ --secret-key=VpvQWcsfI9OPzUCpR4kynDLAbqa1OIKqRB6WEnH8在第二个数据中心中创建 second zone:
语法
radosgw-admin zone create --rgw-zone=RGW_ZONE --rgw-zonegroup=RGW_ZONE_GROUP --endpoints=https://tower-osd4.cephtips.com --access-key=_ACCESS_KEY --secret-key=SECRET_KEY示例
[user@rgw2] radosgw-admin zone create --rgw-zone=rdc2z --rgw-zonegroup=rdc1zg --endpoints=https://tower-osd4.cephtips.com --access-key=3QV0D6ZMMCJZMSCXJ2QJ --secret-key=VpvQWcsfI9OPzUCpR4kynDLAbqa1OIKqRB6WEnH8提交周期:
语法
radosgw-admin period update --commit使用第二个数据中心的
rgw_realm、rgw_zonegroup和rgw_zone名称更新ceph.conf:语法
rgw_realm = REALM_NAME rgw_zonegroup = ZONE_GROUP_NAME rgw_zone = ZONE_NAME示例
rgw realm = rdc1 rgw zonegroup = rdc1zg rgw zone = rdc2z重启 RGW 守护进程:
语法
systemctl restart ceph-radosgw@rgw.$(hostname -s).rgw0.service-
以
root用户身份登录第二个数据中心的端点。 验证 master 域上的同步状态:
语法
radosgw-admin sync status示例
[root@tower-osd4 ceph-ansible]# radosgw-admin sync status realm 59762f08-470c-46de-b2b1-d92c50986e67 (ldc2) zonegroup 7cf8daf8-d279-4d5c-b73e-c7fd2af65197 (ldc2zg) zone 034ae8d3-ae0c-4e35-8760-134782cb4196 (ldc2z) metadata sync no sync (zone is master)-
以
root用户身份登录第一个数据中心的端点。 验证 replication-synchronization 域的同步状态:
语法
radosgw-admin sync status --rgw-realm RGW_REALM_NAME例如:
[root@tower-osd4 ceph-ansible]# [root@tower-osd4 ceph-ansible]# radosgw-admin sync status --rgw-realm rdc1 realm 73c7b801-3736-4a89-aaf8-e23c96e6e29d (rdc1) zonegroup d67cc9c9-690a-4076-89b8-e8127d868398 (rdc1zg) zone 67584789-375b-4d61-8f12-d1cf71998b38 (rdc2z) metadata sync syncing full sync: 0/64 shards incremental sync: 64/64 shards metadata is caught up with master data sync source: 705ff9b0-68d5-4475-9017-452107cec9a0 (rdc1z) syncing full sync: 0/128 shards incremental sync: 128/128 shards data is caught up with source realm 73c7b801-3736-4a89-aaf8-e23c96e6e29d (rdc1) zonegroup d67cc9c9-690a-4076-89b8-e8127d868398 (rdc1zg) zone 67584789-375b-4d61-8f12-d1cf71998b38 (rdc2z) metadata sync syncing full sync: 0/64 shards incremental sync: 64/64 shards metadata is caught up with master data sync source: 705ff9b0-68d5-4475-9017-452107cec9a0 (rdc1z) syncing full sync: 0/128 shards incremental sync: 128/128 shards data is caught up with source要在本地站点中存储和访问数据,请为本地域创建用户:
语法
radosgw-admin user create --uid="LOCAL_USER" --display-name="Local user" --rgw-realm=_REALM_NAME --rgw-zonegroup=ZONE_GROUP_NAME --rgw-zone=ZONE_NAME示例
[user@rgw2] #radosgw-admin user create --uid="local-user" --display-name="Local user" --rgw-realm=ldc1 --rgw-zonegroup=ldc1zg --rgw-zone=ldc1z
默认情况下,用户被添加到多站点配置中。对于访问本地区域中数据的用户,radosgw-admin 命令需要 --rgw-realm arument。