第 6 章 程序错误修复
本节论述了在这个 Red Hat Ceph Storage 发行版本中修复的用户有严重影响的错误。此外,部分还包括之前版本中发现的固定已知问题的描述。
6.1. Ceph Ansible 实用程序
现在,可以在 Ceph 集群部署后修改复制池的大小
在以前的版本中,在使用 director 部署 Ceph 集群后增加复制池的大小会失败。这是因为任务负责自定义池大小的问题会阻止它在 playbook 重新运行时执行。在这个版本中,您可以在集群部署后修改池大小。
(BZ#1743242)
Ceph Ansible 在 Ceph 仪表板部署期间支持多个 grafana
实例
在以前的版本中,在多节点环境中,ceph-ansible
无法配置多个 grafana
实例,因为只支持一个节点,保留剩余的节点未配置。在这个版本中,ceph-ansible
支持多个实例,并在 Ceph 控制面板部署期间将 Ceph 特定布局注入到所有 Ceph 监控节点上。
当禁用仪表板功能时,运行 Ansible purge-cluster.yml
playbook 不再会失败
在以前的版本中,当仪表板功能被禁用时,使用 purge-cluster-yml
playbook 清除集群会失败,并显示以下错误消息:
registry.redhat.io/openshift4/ose-prometheus-node-exporter:v4.1 msg: '[Errno 2] No such file or directory'
这是因为 dashboard_enabled
变量被忽略。在这个版本中,dashboard_enabled
变量会被正确处理,purge-cluster.yml
会成功运行。
在 Red Hat OpenStack Platform 上安装 Red Hat Ceph Storage 不再失败
在以前的版本中,当尝试使用 Red Hat OpenStack Platform 16 安装 Red Hat Ceph Storage 时,ceph-ansible
工具会变得无响应,它会返回类似如下的错误:
'Error: unable to exec into ceph-mon-dcn1-computehci1-2: no container with name or ID ceph-mon-dcn1-computehci1-2 found: no such container'
这是因为 ceph-ansible
从 handler_osds.yml 中错误的节点读取事实 container_exec_cmd
的值
在这个版本中,ceph-ansible
从正确的节点读取 container_exec_cmd
的值,安装可以成功。
Ansible 在完成后取消设置 norebalance
标志
在以前的版本中,Ansible 没有取消设置 norebalance
标志,它必须手动取消设置。在这个版本中,rolling-update.yml
Ansible playbook 会在完成后自动取消设置 norebalance
标志,且不需要手动取消设置。
启用控制面板时,Ansible 会升级多站点 Ceph 对象网关
在以前的版本中,当启用 Red Hat Ceph Storage Dashboard 且尝试使用 Ansible 升级到更新的 Red Hat Ceph Storage 版本时,在多站点设置中升级到辅助 Ceph 对象网关站点会失败。在这个版本中,在 Red Hat Ceph Storage 中升级次要站点可以正常工作。
Ceph Ansible 使用 Ansible 2.9
在以前的版本中,ceph-ansible
版本 4.0 和更高版本不适用于 Ansible 2.9 版本。这是因为 ceph-validate
角色不允许针对 Ansible 2.9 运行 ceph-ansible
。在这个版本中,ceph-ansible
可以与 Ansible 2.9 一起工作。
使用自定义软件存储库的 Ceph 安装不再失败
在以前的版本中,不允许使用自定义软件仓库安装 Ceph。这是因为 redhat_custom_repository.yml
文件已被删除。在这个版本中,包含 redhat_custom_repository.yml
文件,自定义存储库可用于安装 Red Hat Ceph Storage。
只有红帽签名的软件包可以使用自定义软件存储库来安装 Ceph。不支持自定义第三方软件存储库。
(BZ#1808362)
如果没有安装仪表板,ceph-ansible
purge playbook 不会失败
在以前的版本中,当没有部署仪表板时,清除 playbook 会在清除集群时失败,因为它会尝试删除不存在的仪表板相关资源。因此,清除 playbook 表示部署了仪表板,清除失败。在这个版本中,如果不是部署的一部分,ceph-ansible
不会清除仪表板相关资源,清除可以成功完成。
(BZ#1808988)
将独立的 nfs-ganesha
守护进程与外部 Ceph 存储集群搭配使用,在部署期间不再无法复制密钥环
在以前的版本中,在由独立 nfs-ganesha
守护进程和外部 Ceph 存储集群组成的配置中,Ceph 密钥环不会在 Ceph Ansible 部署期间复制到 /etc/ceph。
在这个版本中,Ceph 密钥环被复制到 /etc/ceph/ 目录中。
Ceph Ansible 在初始安装后更新仪表板 admin 用户的特权
在以前的版本中,ceph-ansible
只能在首次创建时设置仪表板用户的特权。在安装过程中更改 dashboard_admin_user_ro: false
后运行 playbook 不会更新用户的特权。在 Red Hat Ceph Storage 4.1z1 中,ceph-ansible
已更新,以支持在 playbook 成功运行时更改仪表板用户特权。
docker-to-podman.yml
playbook 现在迁移仪表板容器
在以前的版本中,运行 docker-to-podman.yml
playbook 将所有守护进程从 docker
迁移到 podman
,但 grafana-server
和仪表板容器除外。在这个版本中,运行 docker-to-podman.yml
会成功迁移所有守护进程。
删除旧容器中的存储目录
在以前的版本中,旧容器的存储目录不会被删除。这可能导致大量磁盘用量。如果安装了 Red Hat Ceph Storage、清除它并重新安装它,可能会看到它。在 Red Hat Ceph Storage 4.1z1 中,不再使用的容器的存储目录会被删除,且不会发生过量磁盘用量。
在 Red Hat Enterprise Linux 8.1 上将容器化集群从 4.0 升级到 4.1 不再失败
在以前的版本中,当将 Red Hat Ceph Storage 集群从 4.0 升级到 4.1 时,升级可能会失败,并显示 set_fact ceph_osd_image_repodigest_before_pulling
的错误。由于容器镜像标签更新方式存在问题,ceph-ansible
可能会失败。在 Red Hat Ceph Storage 4.1z1 ceph-ansible
中,它不再会失败,升级可以正常工作。
在现有 OpenStack 环境中启用 Ceph 仪表板失败
在现有的 OpenStack 环境中,在启用 Ceph Manager 仪表板模块后配置 Ceph 控制面板的 IP 地址和端口时,这会导致与 HAProxy 配置冲突。为避免这种冲突,请在启用 Ceph Manager 仪表板模块前配置 Ceph 控制面板的 IP 地址和端口。
在部署 Ceph 对象网关次要站点时,Red Hat Ceph Storage Dashboard 会失败
在以前的版本中,Red Hat Ceph Storage Dashboard 无法在 Ceph 对象网关多站点部署中部署二级站点,因为当 Ceph Ansible 运行 radosgw-admin user create
命令时,命令会返回错误。在这个版本中,部署过程中的 Ceph Ansible 任务被分成两个不同的任务。这样做可让 Red Hat Ceph Storage 控制面板成功部署 Ceph 对象网关次要站点。
当使用 --limit
选项运行 playbook 时,Ceph 文件系统元数据服务器安装会失败
一些事实没有在第一个 Ceph 监控器上设置,但这些事实已在所有对应的 Ceph 监控节点上设置。使用 --limit
选项运行 playbook 时,如果 Ceph 监控器不是批处理的一部分,则在 Ceph monitor 上不会设置这些事实。当这些事实用于 Ceph Monitor 的任务中使用时,这会导致 playbook 失败。在这个版本中,Ceph Monitor 上设置了这些事实,该 playbook 是否使用 --limit
选项。
升级时添加新的 Ceph Ojbect Gateway 实例
radosgw_frontend_port
选项没有考虑多个 Ceph 对象网关实例,并且为所有实例配置了端口 8080
。在这个版本中,每个 Ceph 对象网关实例增加了 radosgw_frontend_port
选项,允许您使用多个 Ceph 对象网关实例。
当在容器化环境中使用 FileStore 时,Ceph Ansible 的 shrink-osd.yml
playbook 会失败
Ceph Ansible 的 shrink-osd.yml
playbook 缺少默认值,这会导致在容器化环境中缩小由 FileStore 支持的 Ceph OSD 时失败。以前使用 ceph-disk
和 dmcrypt
准备的 Ceph OSD 将 加密密钥
保留在对应的 Ceph OSD 文件中。在这个版本中,添加了一个默认值,以便 Ceph Ansible shrink-osd.yml
playbook 可以在容器化环境中使用 dmcrypt
准备的 Ceph OSD 上运行。
使用 HTTPS 会破坏对 Prometheus 和警报管理器的访问
将 dashboard_protocol
选项设置为 https
会导致 Red Hat Ceph Storage Dashboard 尝试并访问 Prometheus API,它不支持 TLS。在这个版本中,当将 dashboard_protocol
选项设置为 https
时,Prometheus 和警报管理器需要使用 HTTP 协议。
Ceph Ansible shrink-osd.yml
playbook 无法正确清理 Ceph OSD
ceph_volume
模块执行的 zap
操作不处理 osd_fsid
参数。这会导致 Ceph OSD 通过在底层设备上保留逻辑卷来正确切换。在这个版本中,zap
操作可以正确地处理 osd_fsid
参数,并在缩小后正确清理 Ceph OSD。
当存在多个存储集群时,Red Hat Ceph Storage 滚动更新会失败
当配置了多个存储集群时,运行 Ceph Ansible rolling_update.yml
playbook 会导致滚动更新失败,因为无法指定存储集群名称。在这个版本中,rolling_update.yml
playbook 使用 --cluster
选项来允许特定存储集群名称。
在进行滚动更新时,hosts
字段具有无效的值
Red Hat Ceph Storage 滚动更新失败,因为评估 Ceph Ansible rolling_update.yml
playbook 中的 hosts
值的语法已改变。在这个版本中,当 playbook 中指定 hosts
字段时,对代码的修复会正确更新语法。
运行 rolling_update.yml
playbook 不会检索存储集群 fsid
在运行 rolling_update.yml
playbook 时,Ceph Ansible 清单没有定义 Ceph 监控节点,例如在外部场景中,不会检索存储集群 fsid
。这会导致 rolling_update.yml
playbook 失败。在这个版本中,当清单中没有定义 Ceph monitor 时跳过 fsid
检索,允许 rolling_update.yml
playbook 在不存在 Ceph monitor 时执行。