7.4. 将 Red Hat Ceph Storage RGW 迁移到外部 RHEL 节点
对于超融合基础架构(HCI)或专用存储节点,您必须将 Red Hat OpenStack Platform Controller 节点中包含的 Ceph 对象网关(RGW)守护进程迁移到现有的外部 Red Hat Enterprise Linux (RHEL)节点。外部 RHEL 节点通常包括 HCI 环境或 Red Hat Ceph Storage 节点的 Compute 节点。您的环境必须具有 Red Hat Ceph Storage 7 或更高版本,并由 cephadm
或 Ceph Orchestrator 管理。
先决条件
- 完成 Red Hat OpenStack Platform 17.1 环境中的任务。有关更多信息,请参阅 Red Hat Ceph Storage 先决条件。
7.4.1. 迁移 Red Hat Ceph Storage RGW 后端 复制链接链接已复制到粘贴板!
您必须将 Ceph 对象网关(RGW)后端从 Controller 节点迁移到 Red Hat Ceph Storage 节点。为确保将正确数量的服务分发到可用的节点,您可以使用 cephadm
标签来引用部署了给定守护进程类型的一组节点。有关卡图的更多信息,请参阅 Red Hat Ceph Storage 守护进程卡。以下流程假设您有三个目标节点 cephstorage-0
、cephstorage-1
、cephstorage-2
。
流程
将 RGW 标签添加到您要将 RGW 后端迁移到的 Red Hat Ceph Storage 节点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 spec 目录中找到 RGW spec 和 dump :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 本例假定
172.17.3.0/24
是存储网络
。在
placement
部分中,确保设置了标签和
rgw_frontend_port
值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用编配器 CLI 应用新的 RGW 规格:
SPEC_DIR=${SPEC_DIR:-"$PWD/ceph_specs"} sudo cephadm shell -m ${SPEC_DIR}/rgw -- ceph orch apply -i /mnt/rgw
$ SPEC_DIR=${SPEC_DIR:-"$PWD/ceph_specs"} $ sudo cephadm shell -m ${SPEC_DIR}/rgw -- ceph orch apply -i /mnt/rgw
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令触发重新部署,例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保新的 RGW 后端可以在新端口上访问,以便稍后在端口
8080
上启用入口守护进程。登录到包含 RGW 的每个 Red Hat Ceph Storage 节点,并添加iptables
规则,以允许连接到 Red Hat Ceph Storage 节点上的 8080 和 8090 端口:iptables -I INPUT -p tcp -m tcp --dport 8080 -m conntrack --ctstate NEW -m comment --comment "ceph rgw ingress" -j ACCEPT iptables -I INPUT -p tcp -m tcp --dport 8090 -m conntrack --ctstate NEW -m comment --comment "ceph rgw backends" -j ACCEPT sudo iptables-save sudo systemctl restart iptables
$ iptables -I INPUT -p tcp -m tcp --dport 8080 -m conntrack --ctstate NEW -m comment --comment "ceph rgw ingress" -j ACCEPT $ iptables -I INPUT -p tcp -m tcp --dport 8090 -m conntrack --ctstate NEW -m comment --comment "ceph rgw backends" -j ACCEPT $ sudo iptables-save $ sudo systemctl restart iptables
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果在现有部署中使用了
nftables
,请编辑/etc/nftables/tripleo-rules.nft
并添加以下内容:# 100 ceph_rgw {'dport': ['8080','8090']} add rule inet filter TRIPLEO_INPUT tcp dport { 8080,8090 } ct state new counter accept comment "100 ceph_rgw"
# 100 ceph_rgw {'dport': ['8080','8090']} add rule inet filter TRIPLEO_INPUT tcp dport { 8080,8090 } ct state new counter accept comment "100 ceph_rgw"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
重启
nftables
服务:sudo systemctl restart nftables
$ sudo systemctl restart nftables
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证是否应用了规则:
sudo nft list ruleset | grep ceph_rgw
$ sudo nft list ruleset | grep ceph_rgw
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 Controller 节点(如
controller-0
)尝试访问 RGW 后端:curl http://cephstorage-0.storage:8090;
$ curl http://cephstorage-0.storage:8090;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您应该观察以下输出:
<?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>
<?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>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对部署 RGW 守护进程的每个节点重复验证。
如果您将 RGW 后端迁移到 Red Hat Ceph Storage 节点,则没有
internalAPI
网络,除了 HCI 节点的情况。您必须重新配置 RGW keystone 端点,以指向您传播的外部网络:[ceph: root@controller-0 /]# ceph config dump | grep keystone global basic rgw_keystone_url http://172.16.1.111:5000 [ceph: root@controller-0 /]# ceph config set global rgw_keystone_url http://<keystone_endpoint>:5000
[ceph: root@controller-0 /]# ceph config dump | grep keystone global basic rgw_keystone_url http://172.16.1.111:5000 [ceph: root@controller-0 /]# ceph config set global rgw_keystone_url http://<keystone_endpoint>:5000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在采用 Identity 服务时,将 <
keystone_endpoint
> 替换为在OpenStackControlPlane
CR 中部署的服务的 Identity 服务(keystone)内部端点。如需更多信息,请参阅 使用 Identity 服务。
-
在采用 Identity 服务时,将 <
7.4.2. 部署 Red Hat Ceph Storage ingress 守护进程 复制链接链接已复制到粘贴板!
要部署 Ceph ingress 守护进程,您可以执行以下操作:
-
移除现有的
ceph_rgw
配置。 - 清理 director 创建的配置。
- 重新部署 Object Storage 服务(swift)。
部署 ingress 守护进程时,会创建两个新容器:
- HAProxy,用于访问后端。
- keepalived,用于拥有虚拟 IP 地址。
您可以使用 rgw
标签将入口守护进程分发到托管 Ceph 对象网关(RGW)守护进程的节点数量。有关在节点上分发守护进程的更多信息,请参阅 Red Hat Ceph Storage 守护进程卡。
完成此步骤后,您可以从 ingress 守护进程访问 RGW 后端,并通过对象存储服务 CLI 使用 RGW。
流程
登录到每个 Controller 节点,并从
/var/lib/config-data/puppet-generated/haproxy/etc/haproxy/haproxy.cfg
文件中删除以下配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
haproxy-bundle
并确认它已启动:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认没有进程连接到端口 8080:
ss -antop | grep 8080
[root@controller-0 ~]# ss -antop | grep 8080 [root@controller-0 ~]#
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以预期 Object Storage 服务(swift) CLI 无法建立连接:
swift list
(overcloud) [root@cephstorage-0 ~]# swift list HTTPConnectionPool(host='10.0.0.103', port=8080): Max retries exceeded with url: /swift/v1/AUTH_852f24425bb54fa896476af48cbe35d3?format=json (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fc41beb0430>: Failed to establish a new connection: [Errno 111] Connection refused'))
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 HAProxy 和 Keepalived 设置所需的镜像:
[ceph: root@controller-0 /]# ceph config set mgr mgr/cephadm/container_image_haproxy registry.redhat.io/rhceph/rhceph-haproxy-rhel9:latest [ceph: root@controller-0 /]# ceph config set mgr mgr/cephadm/container_image_keepalived registry.redhat.io/rhceph/keepalived-rhel9:latest
[ceph: root@controller-0 /]# ceph config set mgr mgr/cephadm/container_image_haproxy registry.redhat.io/rhceph/rhceph-haproxy-rhel9:latest [ceph: root@controller-0 /]# ceph config set mgr mgr/cephadm/container_image_keepalived registry.redhat.io/rhceph/keepalived-rhel9:latest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
controller-0
中创建一个名为rgw_ingress
的文件:SPEC_DIR=${SPEC_DIR:-"$PWD/ceph_specs"} vim ${SPEC_DIR}/rgw_ingress
$ SPEC_DIR=${SPEC_DIR:-"$PWD/ceph_specs"} $ vim ${SPEC_DIR}/rgw_ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将以下内容粘贴到
rgw_ingress
文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<external_network>
替换为您的外部网络,如10.0.0.0/24
。如需更多信息,请参阅 迁移 Red Hat Ceph Storage RGW 的先决条件。 - 如果启用了 TLS,请添加 SSL 证书和密钥串联,如 配置持久存储 中的 为外部 Red Hat Ceph Storage 集群配置 RGW 所述。
-
将
使用 Ceph 编配器 CLI 应用
rgw_ingress
spec:SPEC_DIR=${SPEC_DIR:-"$PWD/ceph_specs"} cephadm shell -m ${SPEC_DIR}/rgw_ingress -- ceph orch apply -i /mnt/rgw_ingress
$ SPEC_DIR=${SPEC_DIR:-"$PWD/ceph_specs"} $ cephadm shell -m ${SPEC_DIR}/rgw_ingress -- ceph orch apply -i /mnt/rgw_ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 等待 ingress 部署并查询生成的端点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl 10.0.0.89:8080
$ curl 10.0.0.89:8080 --- <?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>[ceph: root@controller-0 /]# —
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.3. 创建或更新 Object Storage 服务端点 复制链接链接已复制到粘贴板!
您必须创建或更新 Object Storage 服务(swift)端点,来配置您在用于部署 RGW ingress 的同一网络上保留的新虚拟 IP 地址(VIP)。
流程
列出当前的 swift 端点和服务:
oc rsh openstackclient openstack endpoint list | grep 'swift.*object'
$ oc rsh openstackclient openstack endpoint list | grep 'swift.*object' $ oc rsh openstackclient openstack service list | grep 'swift.*object'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果服务和端点不存在,请创建缺少的 swift 资源:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<RGW_VIP&
gt; 替换为 Ceph RGW 入口 VIP。
-
将
如果端点存在,请更新端点以指向正确的 RGW 入口 VIP:
oc rsh openstackclient openstack endpoint set --url http://<RGW_VIP>:8080/swift/v1/AUTH_%\(tenant_id\)s <swift_public_endpoint_uuid> oc rsh openstackclient openstack endpoint set --url http://<RGW_VIP>:8080/swift/v1/AUTH_%\(tenant_id\)s <swift_internal_endpoint_uuid> oc rsh openstackclient openstack endpoint list | grep object
$ oc rsh openstackclient openstack endpoint set --url http://<RGW_VIP>:8080/swift/v1/AUTH_%\(tenant_id\)s <swift_public_endpoint_uuid> $ oc rsh openstackclient openstack endpoint set --url http://<RGW_VIP>:8080/swift/v1/AUTH_%\(tenant_id\)s <swift_internal_endpoint_uuid> $ oc rsh openstackclient openstack endpoint list | grep object | 0d682ad71b564cf386f974f90f80de0d | regionOne | swift | object-store | True | public | http://172.18.0.100:8080/swift/v1/AUTH_%(tenant_id)s | | b311349c305346f39d005feefe464fb1 | regionOne | swift | object-store | True | internal | http://172.18.0.100:8080/swift/v1/AUTH_%(tenant_id)s |
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<swift_public_endpoint_uuid
> 替换为 swift 公共端点的 UUID。 -
将
<swift_internal_endpoint_uuid
> 替换为 swift 内部端点的 UUID。
-
将
测试迁移的服务:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow