附录 A. 故障排除

A.1. Ansible 停止安装,因为它检测到的设备比预期少

Ansible 自动化应用程序停止安装过程并返回以下错误:

- name: fix partitions gpt header or labels of the osd disks (autodiscover disks)
  shell: "sgdisk --zap-all --clear --mbrtogpt -- '/dev/{{ item.0.item.key }}' || sgdisk --zap-all --clear --mbrtogpt -- '/dev/{{ item.0.item.key }}'"
  with_together:
    - "{{ osd_partition_status_results.results }}"
    - "{{ ansible_devices }}"
  changed_when: false
  when:
    - ansible_devices is defined
    - item.0.item.value.removable == "0"
    - item.0.item.value.partitions|count == 0
    - item.0.rc != 0

这意味着:

/usr/share/ceph-ansible/group_vars/osds.yml 文件中的 osd_auto_discovery 参数设置为 true 时,Ansible 会自动检测并配置所有可用的设备。在这一过程中,Ansible 期望所有 OSD 都使用相同的设备。设备按照 Ansible 检测到的名称的顺序获得它们的名称。如果其中一个设备在其中一个 OSD 上失败,Ansible 无法检测到失败的设备并停止整个安装过程。

示例情况:

  1. 三个 OSD 节点(host1host2host3)使用 /dev/sdb/dev/sdcdev/sdd 磁盘。
  2. host2 上,/dev/sdc 磁盘失败并被删除。
  3. 下一次重启后,Ansible 无法检测已移除的 /dev/sdc 磁盘,并且希望只有两个磁盘将用于 host2,即/dev/sdb/dev/sdc (以前为 /dev/sdd)。
  4. Ansible 将停止安装过程并返回上述错误消息。

解决此问题:

/etc/ansible/hosts 文件中,指定带有故障磁盘的 OSD 节点使用的设备(上面的示例中为host2 ):

[osds]
host1
host2 devices="[ '/dev/sdb', '/dev/sdc' ]"
host3

详情请查看 第 5 章 使用 Ansible 安装 Red Hat Ceph Storage