附录 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 无法检测到失败的设备并停止整个安装过程。
示例情况:
-
三个 OSD 节点(
host1
、host2
、host3
)使用/dev/sdb
、/dev/sdc
和dev/sdd
磁盘。 -
在
host2
上,/dev/sdc
磁盘失败并被删除。 -
下一次重启后,Ansible 无法检测已移除的
/dev/sdc
磁盘,并且希望只有两个磁盘将用于host2
,即/dev/sdb
和/dev/sdc
(以前为/dev/sdd
)。 - Ansible 将停止安装过程并返回上述错误消息。
解决此问题:
在 /etc/ansible/hosts
文件中,指定带有故障磁盘的 OSD 节点使用的设备(上面的示例中为host2
):
[osds] host1 host2 devices="[ '/dev/sdb', '/dev/sdc' ]" host3