Ceph2: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
| (не показано 50 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
| + | [[Категория: Ceph]] |
||
| + | [[Категория: OpenStack]] |
||
[[Категория: ceph]] |
[[Категория: ceph]] |
||
=Ceph2= |
=Ceph2= |
||
| Строка 18: | Строка 20: | ||
</PRE> |
</PRE> |
||
| − | == |
+ | ==Удалить ключи (<code>authentication keys</code>) для <code>OSD</code>== |
<PRE> |
<PRE> |
||
ceph auth del osd.123 |
ceph auth del osd.123 |
||
</PRE> |
</PRE> |
||
| − | == |
+ | ==Удалить <code>OSD</code> из кластера Ceph== |
<PRE> |
<PRE> |
||
ceph osd rm osd.123 |
ceph osd rm osd.123 |
||
</PRE> |
</PRE> |
||
| − | Please keep in mind that whenever an OSD is unavailable your cluster health will not be OK, |
+ | Please keep in mind that whenever an OSD is unavailable your cluster health will not be OK, |
| + | and it will continue to perform the recovery which is a normal Ceph operation in this situation. |
||
| − | 5. So as long as the server is hot swappable which it should be, then just put the new drive in and perform the following tasks. If its node-2 then, keep in mind you will need to use the name of your node. |
||
| + | ==Заменить диск== |
||
| + | Список дисков (после замены) посмотреть так: |
||
<PRE> |
<PRE> |
||
ceph-deploy disk list node-2 |
ceph-deploy disk list node-2 |
||
</PRE> |
</PRE> |
||
| + | ==Перед добавлением диска в кластер Ceph выполните очистку диска== |
||
| − | ==Before adding the disk to the Ceph cluster, perform a disk zap== |
||
| + | Перед добавлением проверить как определился диск (sdd или другая буква) |
||
| − | (Watch the output of the disk list for the location that gets assigned, that will be the location that you will run the osd create command on. For example if disk list output is [node-2][DEBUG ] /dev/sdd other, btrfs then disk zap will be the following: |
||
<PRE> |
<PRE> |
||
ceph-deploy disk zap node-2:sdd |
ceph-deploy disk zap node-2:sdd |
||
</PRE> |
</PRE> |
||
| + | |||
| − | ==Create an OSD on the disk, and Ceph will add it as osd.123== |
||
| + | ==Создать <code>OSD</code> на дискеи добавить в кластер <code>Ceph</code> как <code>osd.123</code>== |
||
| + | <PRE> |
||
ceph-deploy --overwrite-conf osd create node-2:sdd |
ceph-deploy --overwrite-conf osd create node-2:sdd |
||
</PRE> |
</PRE> |
||
| − | ==Additional Information== |
||
| − | Once an OSD is created Ceph will run a recovery operation and start moving placement groups from secondary OSDs to the new OSD. Again the recovery operation will take a while depending on the size of your cluster, once it is completed your Ceph cluster will be HEALTH_OK. |
||
| + | |||
| − | When a new host or disk is added to a Ceph cluster, CRUSH starts a rebalancing operation, under which it moves the data from existing hosts/disks to a new host/ disk. Rebalancing is performed to keep all disks equally utilized, which improves the cluster performance and keeps it healthy. |
||
| + | =показать список винтов= |
||
| − | Internal Notes |
||
| + | <PRE> |
||
| + | ceph device ls | grep "kaas-node-74fd42ba-ec8f-4ce8-8d29-5ba4777d19a6:sdj |
||
| + | </PRE> |
||
| + | |||
| + | ==инфа о девайсе== |
||
| + | ceph device info <devid> |
||
| + | |||
| + | =показать здоровье кластера= |
||
| + | <PRE> |
||
| + | ceph -s |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | ceph health detail |
||
| + | </PRE> |
||
| + | |||
| + | ==Поиск проблемы== |
||
| + | <PRE> |
||
| + | ceph health detail |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | ceph crash ls-new |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | ceph crash ls |
||
| + | </PRE> |
||
| + | |||
| + | <PRE> |
||
| + | crash_id=$(ceph crash ls-new | head -n1) |
||
| + | </PRE> |
||
| + | Например |
||
| + | <PRE> |
||
| + | ceph crash ls-new |
||
| + | ID ENTITY NEW |
||
| + | 2025-10-09T02:33:59.353672Z_43e260ca-1fdd-497e-9a42-dadb8f33d8a8 osd.432 * |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | ceph crash info "$crash_id" -f json-pretty | jq -r '.entity_name, .daemon, .utsname.nodename, .timestamp' |
||
| + | </PRE> |
||
| + | Пример |
||
| + | <PRE> |
||
| + | ceph crash info 2025-10-09T02:33:59.353672Z_43e260ca-1fdd-497e-9a42-dadb8f33d8a8 |
||
| + | { |
||
| + | "assert_condition": "p->first > start+len", |
||
| + | "assert_file": "/builddir/build/BUILD/ceph-18.2.7/src/include/interval_set.h", |
||
| + | "assert_func": "void interval_set<T, C>::insert(T, T, T*, T*) [with T = long unsigned int; C = std::map]", |
||
| + | "assert_line": 536, |
||
| + | "assert_msg": "/builddir/build/BUILD/ceph-18.2.7/src/include/interval_set.h: In function 'void interval_set<T, C>::insert(T, T, T*, T*) [with T = long unsigned int; C = std::map]' thread 7fe8313de640 time 2025-10-09T02:33:59.350176+0000\n/builddir/build/BUILD/ceph-18.2.7/src/include/interval_set.h: 536: FAILED ceph_assert(p->first > start+len)\n", |
||
| + | "assert_thread_name": "bstore_discard", |
||
| + | "backtrace": [ |
||
| + | "/lib64/libc.so.6(+0x3ebf0) [0x7fe83eaacbf0]", |
||
| + | "/lib64/libc.so.6(+0x8c21c) [0x7fe83eafa21c]", |
||
| + | "raise()", |
||
| + | "abort()", |
||
| + | "(ceph::__ceph_assert_fail(char const*, char const*, int, char const*)+0x169) [0x55ad196f0f9f]", |
||
| + | "ceph-osd(+0x3cd100) [0x55ad196f1100]", |
||
| + | "ceph-osd(+0x46831c) [0x55ad1978c31c]", |
||
| + | "(KernelDevice::_discard_thread(unsigned long)+0x1ce) [0x55ad1a062a7e]", |
||
| + | "ceph-osd(+0xd3f355) [0x55ad1a063355]", |
||
| + | "/lib64/libc.so.6(+0x8a4da) [0x7fe83eaf84da]", |
||
| + | "/lib64/libc.so.6(+0x10f550) [0x7fe83eb7d550]" |
||
| + | ], |
||
| + | "ceph_version": "18.2.7", |
||
| + | "crash_id": "2025-10-09T02:33:59.353672Z_43e260ca-1fdd-497e-9a42-dadb8f33d8a8", |
||
| + | "entity_name": "osd.432", |
||
| + | "os_id": "centos", |
||
| + | "os_name": "CentOS Stream", |
||
| + | "os_version": "9", |
||
| + | "os_version_id": "9", |
||
| + | "process_name": "ceph-osd", |
||
| + | "stack_sig": "8d98f4fe4f2c07db24137ab90a0513cf1cd5663cb5eaa155a406da0063eb33a6", |
||
| + | "timestamp": "2025-10-09T02:33:59.353672Z", |
||
| + | "utsname_hostname": "kaas-node-b546f17a-885c-4439-8e40-57532fef9c91", |
||
| + | "utsname_machine": "x86_64", |
||
| + | "utsname_release": "5.15.0-143-generic", |
||
| + | "utsname_sysname": "Linux", |
||
| + | "utsname_version": "#153-Ubuntu SMP Fri Jun 13 19:10:45 UTC 2025" |
||
| + | } |
||
| + | </PRE> |
||
| + | |||
| + | ==Заархивировать запись== |
||
| + | <PRE> |
||
| + | ceph crash archive "$crash_id" |
||
| + | </PRE> |
||
| + | или все сразу |
||
| + | <PRE> |
||
| + | ceph crash archive-all |
||
| + | </PRE> |
||
| + | |||
| + | =показать дерево osd= |
||
| + | <PRE> |
||
| + | ceph osd tree |
||
| + | </PRE> |
||
| + | |||
| + | =посмотреть пулы= |
||
| + | <PRE> |
||
| + | ceph osd lspools |
||
| + | </PRE> |
||
| + | |||
| + | =проверить использование стореджа пулами= |
||
| + | <PRE> |
||
| + | ceph df |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | ceph df detail |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | --- RAW STORAGE --- |
||
| + | CLASS SIZE AVAIL USED RAW USED %RAW USED |
||
| + | hdd 17 TiB 16 TiB 14 GiB 14 GiB 0.08 |
||
| + | TOTAL 17 TiB 16 TiB 14 GiB 14 GiB 0.08 |
||
| + | |||
| + | --- POOLS --- |
||
| + | POOL ID PGS STORED (DATA) (OMAP) OBJECTS USED (DATA) (OMAP) %USED MAX AVAIL QUOTA OBJECTS QUOTA BYTES DIRTY USED COMPR UNDER COMPR |
||
| + | kubernetes-hdd 1 32 181 MiB 181 MiB 0 B 60 542 MiB 542 MiB 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B |
||
| + | .rgw.root 2 8 6.5 KiB 6.5 KiB 0 B 19 216 KiB 216 KiB 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B |
||
| + | openstack-store.rgw.log 3 8 89 KiB 23 KiB 66 KiB 339 2.1 MiB 1.9 MiB 199 KiB 0 5.2 TiB N/A N/A N/A 0 B 0 B |
||
| + | openstack-store.rgw.buckets.index 4 8 0 B 0 B 0 B 0 0 B 0 B 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B |
||
| + | openstack-store.rgw.otp 5 8 0 B 0 B 0 B 0 0 B 0 B 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B |
||
| + | openstack-store.rgw.control 6 8 0 B 0 B 0 B 8 0 B 0 B 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B |
||
| + | openstack-store.rgw.meta 7 8 1.7 KiB 1.3 KiB 402 B 9 73 KiB 72 KiB 1.2 KiB 0 5.2 TiB N/A N/A N/A 0 B 0 B |
||
| + | openstack-store.rgw.buckets.non-ec 8 8 0 B 0 B 0 B 0 0 B 0 B 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B |
||
| + | volumes-hdd 9 128 89 MiB 89 MiB 233 KiB 73 268 MiB 267 MiB 699 KiB 0 5.2 TiB N/A N/A N/A 0 B 0 B |
||
| + | openstack-store.rgw.buckets.data 10 32 0 B 0 B 0 B 0 0 B 0 B 0 B 0 10 TiB N/A N/A N/A 0 B 0 B |
||
| + | .mgr 11 1 25 MiB 25 MiB 0 B 8 75 MiB 75 MiB 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B |
||
| + | vms-hdd 12 256 151 MiB 151 MiB 12 KiB 349 454 MiB 454 MiB 35 KiB 0 5.2 TiB N/A N/A N/A 0 B 0 B |
||
| + | backup-hdd 13 32 19 B 19 B 0 B 1 12 KiB 12 KiB 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B |
||
| + | images-hdd 14 32 1.0 GiB 1.0 GiB 11 KiB 167 3.1 GiB 3.1 GiB 32 KiB 0.02 5.2 TiB N/A N/A N/A 0 B 0 B |
||
| + | other-hdd 15 32 19 B 19 B 0 B 1 12 KiB 12 KiB 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B |
||
| + | </PRE> |
||
| + | |||
| + | =проверить занятость osd= |
||
| + | <PRE> |
||
| + | ceph osd df |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | ceph osd df |
||
| + | Defaulted container "rook-ceph-tools" out of: rook-ceph-tools, cabundle-update (init) |
||
| + | ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS |
||
| + | 1 hdd 0.29109 1.00000 298 GiB 510 MiB 37 MiB 16 KiB 473 MiB 298 GiB 0.17 1.99 38 up |
||
| + | 3 hdd 3.63869 1.00000 3.6 TiB 2.0 GiB 1.3 GiB 125 KiB 769 MiB 3.6 TiB 0.05 0.64 449 up |
||
| + | 6 hdd 0.90970 1.00000 932 GiB 1.0 GiB 224 MiB 67 KiB 842 MiB 930 GiB 0.11 1.33 114 up |
||
| + | 0 hdd 3.63869 1.00000 3.6 TiB 2.5 GiB 759 MiB 92 KiB 1.7 GiB 3.6 TiB 0.07 0.79 278 up |
||
| + | 5 hdd 0.45479 1.00000 466 GiB 1.8 GiB 118 MiB 16 KiB 1.7 GiB 464 GiB 0.38 4.53 33 up |
||
| + | 7 hdd 3.63869 1.00000 3.6 TiB 2.4 GiB 669 MiB 287 KiB 1.8 GiB 3.6 TiB 0.06 0.77 290 up |
||
| + | 2 hdd 0.29109 1.00000 298 GiB 945 MiB 151 MiB 9 KiB 794 MiB 297 GiB 0.31 3.69 40 up |
||
| + | 4 hdd 3.63869 1.00000 3.6 TiB 3.1 GiB 1.4 GiB 375 KiB 1.7 GiB 3.6 TiB 0.08 0.98 561 up |
||
| + | TOTAL 17 TiB 14 GiB 4.5 GiB 991 KiB 9.7 GiB 16 TiB 0.08 |
||
| + | </PRE> |
||
| + | |||
| + | =получмить метадату по osd= |
||
| + | <PRE> |
||
| + | ceph osd metadata 75 |
||
| + | </PRE> |
||
| + | |||
| + | =посмотреть данные авторизации для osd= |
||
| + | <PRE> |
||
| + | ceph auth get osd.75 |
||
| + | </PRE> |
||
| + | |||
| + | =примонтировать диск цефа снаружи виртуалки (на хосте)= |
||
| + | Запускать нужно с правами рута, например в контейнере с libvirt, предварительно скопировав туда файл с ключем /etc/ceph/ceph.client.nova.keyring который можно найти в nova-compute контейнере |
||
| + | <PRE> |
||
| + | rbd -c /etc/ceph/ceph.conf --keyring /etc/ceph/ceph.client.nova.keyring device map --pool vms-ssd 6b566a66-ad46-495f-9e21-e8694f18ae74_disk --id nova |
||
| + | </PRE> |
||
| + | |||
| + | =проверить фактически занятое место внутри цефа на вольюме= |
||
| + | Запускать нужно с правами рута, например в контейнере с libvirt, предварительно скопировав туда файл с ключем |
||
| + | <code>/etc/ceph/ceph.client.nova.keyring </code> который можно найти в <code>nova-compute</code> контейнере |
||
| + | <PRE> |
||
| + | rbd -c /etc/ceph/ceph.conf --keyring /etc/ceph/ceph.client.nova.keyring disk-usage --pool vms-ssd --id nova |
||
| + | </PRE> |
||
| + | (имя пула можно взять из <code>ceph osd lspools</code>) |
||
| + | <PRE> |
||
| + | NAME PROVISIONED USED |
||
| + | 6b566a66-ad46-495f-9e21-e8694f18ae74_disk 5 GiB 2.8 GiB |
||
| + | b354b7d0-e26d-4f60-9391-a490f7581634_disk 5 GiB 3.1 GiB |
||
| + | df339dd1-f119-4af1-a79e-bed00911f9dc_disk 5 GiB 3.2 GiB |
||
| + | <TOTAL> 15 GiB 9.2 GiB |
||
| + | </PRE> |
||
| + | |||
| + | =получить список нод, где есть osd down и сами osd= |
||
| + | <PRE> |
||
| + | ceph osd tree | awk '/host/ {host=$4} /down/ {print host, $0}' |
||
| + | |||
| + | kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 210 nvme 1.74629 osd.210 down 0 1.00000 |
||
| + | kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 218 nvme 1.74629 osd.218 down 0 1.00000 |
||
| + | kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 228 nvme 1.74629 osd.228 down 0 1.00000 |
||
| + | kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 236 nvme 1.74629 osd.236 down 0 1.00000 |
||
| + | kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 244 nvme 1.74629 osd.244 down 0 1.00000 |
||
| + | kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 253 nvme 1.74629 osd.253 down 0 1.00000 |
||
| + | kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 262 nvme 1.74629 osd.262 down 0 1.00000 |
||
| + | kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 271 nvme 1.74629 osd.271 down 0 1.00000 |
||
| + | kaas-node-f419673f-726c-4804-9c71-5eece76403c8 72 nvme 1.74629 osd.72 down 0 1.00000 |
||
| + | kaas-node-f419673f-726c-4804-9c71-5eece76403c8 81 nvme 1.74629 osd.81 down 0 1.00000 |
||
| + | kaas-node-f419673f-726c-4804-9c71-5eece76403c8 90 nvme 1.74629 osd.90 down 0 1.00000 |
||
| + | kaas-node-f419673f-726c-4804-9c71-5eece76403c8 99 nvme 1.74629 osd.99 down 0 1.00000 |
||
| + | kaas-node-f419673f-726c-4804-9c71-5eece76403c8 108 nvme 1.74629 osd.108 down 0 1.00000 |
||
| + | kaas-node-f419673f-726c-4804-9c71-5eece76403c8 117 nvme 1.74629 osd.117 down 0 1.00000 |
||
| + | kaas-node-f419673f-726c-4804-9c71-5eece76403c8 126 nvme 1.74629 osd.126 down 0 1.00000 |
||
| + | kaas-node-f419673f-726c-4804-9c71-5eece76403c8 135 nvme 1.74629 osd.135 down 0 1.00000 |
||
| + | </PRE> |
||
| + | |||
| + | =поставить/снять для всех осд на ноде флаг noout= |
||
| + | <PRE> |
||
| + | ceph osd set-group noout kaas-node-820ad8bd-45bd-4c4b-8271-2b697987aa21 |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | ceph osd unset-group noout kaas-node-820ad8bd-45bd-4c4b-8271-2b697987aa21 |
||
| + | </PRE> |
||
| + | |||
| + | =посмотреть метадату по номеру OSD= |
||
| + | <PRE> |
||
| + | ceph osd metadata | jq '.[] | select(.id==22)' |
||
| + | </PRE> |
||
| + | или просто |
||
| + | <PRE> |
||
| + | ceph osd metadata <ID> |
||
| + | </PRE> |
||
| + | |||
| + | =<code>kaascephcluster</code>= |
||
| + | ==найти диск /dev/sdX по его айди в kaascephcluster объекте зная его имя из вывода dmesg== |
||
| + | |||
| + | быввет так что диск в kaascephcluster добавлен не по букве <code>/dev/sdc</code> |
||
| + | а by-id и тогда сложно сопоставить вывалившийся диск по dmesg с kaascephcluster записями. |
||
| + | <BR> |
||
| + | вот так можно сопоставить зная девайс и ноду: |
||
| + | |||
| + | <PRE> |
||
| + | kubectl -n ceph-lcm-mirantis get miracephlog -o yaml |
||
| + | </PRE> |
||
| + | тут будет нечто: |
||
| + | <PRE> |
||
| + | kaas-node-12c448d3-ca7e-4817-9d25-fe21aa441d4c: |
||
| + | |||
| + | osd.17: |
||
| + | blockPartition: /dev/dm-3 |
||
| + | deviceByID: WDC_WD4003FZEX-0_WD-WMC5D0D9DMEY |
||
| + | deviceByPath: /dev/disk/by-path/pci-0000:00:11.4-ata-3 |
||
| + | deviceClass: hdd |
||
| + | deviceName: sdc |
||
| + | in: true |
||
| + | metaPartition: /dev/sdg3 |
||
| + | metadataDeviceByID: Samsung_SSD_850_S2RFNX0H512086E |
||
| + | metadataDeviceByPath: /dev/disk/by-path/pci-0000:00:1f.2-ata-3 |
||
| + | metadataDeviceClass: ssd |
||
| + | metadataDeviceName: sdg |
||
| + | osdUUID: 6d26c9e4-35c1-43e1-822e-d5aef566b764 |
||
| + | up: true |
||
| + | </PRE> |
||
| + | |||
| + | =замьютить варнинги в ceph чтоьбы он показал health-ok и можно было с ним работать(добавлять новые осд и другое)= |
||
| + | <PRE> |
||
| + | ceph health mute OSD_NEARFULL 1h |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | ceph health mute POOL_NEARFULL 1h |
||
| + | </PRE> |
||
| + | |||
| + | поархивировать варнинги о крашнутых osd - раньше они были, |
||
| + | сеф их зафиксировал, но сейчас они работают нормлаьно, однако ceph -s показывает ворнинг, решение ниже: |
||
| + | <PRE> |
||
| + | ceph crash archive-all |
||
| + | </PRE> |
||
| + | |||
| + | ==Identify existing images on Ceph== |
||
| + | from glance pod: |
||
| + | <PRE> |
||
| + | rbd -n client.glance ls -p <pool-name> |
||
| + | </PRE> |
||
| + | Смотреть |
||
| + | * from keystone-client pod: |
||
| + | * openstack image list --all-projects |
||
| + | |||
| + | Compare the two lists, and either delete the VMs using the missing images to permanently <BR> |
||
| + | remove the image from Openstack, or copy the image to a new UUID for use later on. |
||
| + | |||
| + | ==to find osd id by device name== |
||
| + | <PRE> |
||
| + | ceph-volume lvm list |
||
| + | |||
| + | ===== osd.167 ====== |
||
| + | |||
| + | [block] /dev/ceph-f6c4bf7d-ef19-4754-a785-48b499d3b37e/osd-block-941cefab-88b1-4b9e-bfa3-c66296b849dd |
||
| + | |||
| + | block device /dev/ceph-f6c4bf7d-ef19-4754-a785-48b499d3b37e/osd-block-941cefab-88b1-4b9e-bfa3-c66296b849dd |
||
| + | block uuid 6fwQaP-21CC-UryE-hsU6-6da1-wnZF-nj1RHJ |
||
| + | cephx lockbox secret |
||
| + | cluster fsid 7c4a3669-c5a7-0990-f711-ac1664aeba94 |
||
| + | cluster name ceph |
||
| + | crush device class None |
||
| + | db device /dev/sdj4 |
||
| + | db uuid c1790fbd-d5ae-44af-9cf6-bfe0d1f9bf5f |
||
| + | encrypted 0 |
||
| + | osd fsid 941cefab-88b1-4b9e-bfa3-c66296b849dd |
||
| + | osd id 167 |
||
| + | type block |
||
| + | vdo 0 |
||
| + | devices /dev/sdh |
||
| + | |||
| + | </PRE> |
||
| + | ==как найти на каком девайсе ранится osd== |
||
| + | <PRE> |
||
| + | ceph device ls-by-daemon osd.525 |
||
| + | DEVICE HOST:DEV EXPECTED FAILURE |
||
| + | MZXLR15THALA-000H3_S6C3NA0T200611 kaas-node-8c7a4ad5-f966-43d1-9d3e-32bf79f46a69:nvme3n1 |
||
| + | </PRE> |
||
| + | |||
| + | =Replication Factor= |
||
| + | Если нет места то можно уменьшить число реплик, вплоть до 1 (что может быть не безопасно) |
||
| + | * min_size - минимальное число реплик (если меньше то пул не работает) |
||
| + | * size - нормальное число реплик |
||
| + | <PRE> |
||
| + | ceph osd pool set vms-ssd min_size 1 |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | ceph osd pool set vms-ssd size 1 --yes-i-really-mean-it |
||
| + | </PRE> |
||
| + | Что бы заткнуть алерт |
||
| + | <PRE> |
||
| + | ceph health mute POOL_NO_REDUNDANCY |
||
| + | </PRE> |
||
| + | =RBD= |
||
| + | ==Проверить что содержится в пуле== |
||
| + | * Получить списки пулов: <code>ceph osd lspools</code> |
||
| + | <PRE> |
||
| + | rbd ls -p vms-ssd |
||
| + | </PRE> |
||
| + | vms-ssd имя пула |
||
| + | Пример вывода: |
||
| + | <PRE> |
||
| + | rbd ls -p vms-ssd |
||
| + | 091a31a7-678b-42ae-82b8-9d65efda489a_disk |
||
| + | 09804666-7a79-415f-b932-a4de86c65449_disk |
||
| + | 0b7ee907-b129-43d6-996a-6bd70cf106ec_disk |
||
| + | 0dd34603-ae5e-4de6-9acb-dca4003bc72d_disk |
||
| + | 0edb5d35-9bc2-485d-871a-17467cc96aa0_disk |
||
| + | 13ed106d-1c67-44dd-8f3a-900f1af24b17_disk |
||
| + | 1ed56b4b-7b33-4336-9e78-2d12d7290d18_disk |
||
| + | 20051a53-5a8a-4092-be10-fcee67a0011f_disk |
||
| + | </PRE> |
||
| + | |||
| + | ==Информация о диске== |
||
| + | Этот диск - загрузочный диск ВМ, не вольюм (в пуле vms-ssd) |
||
| + | <PRE> |
||
| + | rbd info feec3eae-2108-4cb5-a1a5-52c50e66db22_disk -p vms-ssd |
||
| + | |||
| + | rbd image 'feec3eae-2108-4cb5-a1a5-52c50e66db22_disk': |
||
| + | size 5 GiB in 1280 objects |
||
| + | order 22 (4 MiB objects) |
||
| + | snapshot_count: 0 |
||
| + | id: 3f423a6496dbfd |
||
| + | block_name_prefix: rbd_data.3f423a6496dbfd |
||
| + | format: 2 |
||
| + | features: layering, exclusive-lock, object-map, fast-diff, deep-flatten |
||
| + | op_features: |
||
| + | flags: |
||
| + | create_timestamp: Tue Jun 20 15:01:57 2023 |
||
| + | access_timestamp: Mon Jun 26 00:00:21 2023 |
||
| + | modify_timestamp: Tue Jun 27 12:55:36 2023 |
||
| + | </PRE> |
||
| + | feec3eae-2108-4cb5-a1a5-52c50e66db22_disk - это ID инстанса (+ слово disk) , можно посмотреть информацию о сервере openstack server show feec3eae-2108-4cb5-a1a5-52c50e66db22 |
||
| + | ==Использование дисков== |
||
| + | Или из контейнера libvirt - с ключами и паролями, или без ключей с ноды ceph |
||
| + | <PRE> |
||
| + | rbd -c /etc/ceph/ceph.conf --keyring /etc/ceph/ceph.client.nova.keyring disk-usage --pool vms-ssd --id nova |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | NAME PROVISIONED USED |
||
| + | 6b566a66-ad46-495f-9e21-e8694f18ae74_disk 5 GiB 2.8 GiB |
||
| + | b354b7d0-e26d-4f60-9391-a490f7581634_disk 5 GiB 3.1 GiB |
||
| + | df339dd1-f119-4af1-a79e-bed00911f9dc_disk 5 GiB 3.2 GiB |
||
| + | <TOTAL> 15 GiB 9.2 GiB |
||
| + | </PRE> |
||
| + | ==Удалить диск== |
||
| + | <PRE> |
||
| + | rbd remove feec3eae-2108-4cb5-a1a5-52c50e66db22_disk -p vms-ssd |
||
| + | </PRE> |
||
| + | ==Подмонтировать диск виртуальной машины (из контейнера libvirt) (например что бы сделать fsck или вытащить данные)== |
||
| + | |||
| + | Команда выполняется на хосте, внутри libvirt контейнера |
||
| + | Внутри контейнера - по-тому что там есть пароли и конфиги, их в целом можно вытащить оттуда и запустить команду где удобнее. |
||
| + | <PRE> |
||
| + | rbd -c /etc/ceph/ceph.conf --keyring /etc/ceph/ceph.client.nova.keyring device map --pool vms-ssd 6b566a66-ad46-495f-9e21-e8694f18ae74_disk --id nova |
||
| + | /dev/rbd0 |
||
| + | </PRE> |
||
| + | * --keyring /etc/ceph/ceph.client.nova.keyring - файл с паролем |
||
| + | * -c /etc/ceph/ceph.conf - файл с адреcами мониторов |
||
| + | * --pool vms-ssd - имя пула (смотреть virsh dumpxml) |
||
| + | * 6b566a66-ad46-495f-9e21-e8694f18ae74_disk - имя диска (смотреть virsh dumpxml) |
||
| + | * --id nova - “идентификатор клиента” (я не знаю что это означает но без этого параметра не работает) |
||
| + | |||
| + | ==Просмотреть подмонтированные== |
||
| + | <PRE> |
||
| + | root@r710:/# rbd showmapped |
||
| + | id pool namespace image snap device |
||
| + | 0 vms-ssd f2dfe088-0516-45a3-a6ab-305868be9f79_disk - /dev/rbd0 |
||
| + | </PRE> |
||
| + | ==Отключить подключенный диск== |
||
| + | <PRE> |
||
| + | rbd device unmap /dev/rbd0 |
||
| + | </PRE> |
||
| + | |||
| + | ==найти все диски для всех ВМок и подмонтировать их (запускать из либвирт контейнера)== |
||
| + | <PRE> |
||
| + | for VM_NAME in $(virsh list --all --name); |
||
| + | do |
||
| + | echo $VM_NAME |
||
| + | POOL_NAME=$(virsh dumpxml ${VM_NAME} | grep "protocol='rbd'" | awk '{print $3}' | awk -F "'" '{print $2}' | awk -F "/" '{ print $1 }') |
||
| + | DISK_NAME=$(virsh dumpxml ${VM_NAME} | grep "protocol='rbd'" | awk '{print $3}' | awk -F "'" '{print $2}' | awk -F "/" '{ print $2 }') |
||
| + | rbd -c /etc/ceph/ceph.conf --keyring /etc/ceph/ceph.client.nova.keyring device map --pool ${POOL_NAME} ${DISK_NAME} --id nova |
||
| + | done |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | #!/bin/bash |
||
| + | |||
| + | set -eu |
||
| + | set -o pipefail |
||
| + | set -x |
||
| + | |||
| + | virsh="docker exec -ti $(docker ps | grep libvirt | grep '/tmp/libvirt.sh' | awk '{print $1}') virsh" |
||
| + | rbd="docker exec -ti $(docker ps | grep libvirt | grep '/tmp/libvirt.sh' | awk '{print $1}') rbd" |
||
| + | for VM in $( $virsh list --all --name | grep "^instance" | dos2unix); |
||
| + | do |
||
| + | echo "Instance=${VM}" |
||
| + | DISK_AND_POOL=$( $virsh dumpxml ${VM} | grep "protocol='rbd'" | awk -F "'" '{print $4}') |
||
| + | echo "Pool/Disk=${DISK_AND_POOL}" |
||
| + | POOL=$(echo ${DISK_AND_POOL}| awk -F '/' '{ print $1}') |
||
| + | echo "POOL=${POOL}" |
||
| + | DISK=$(echo ${DISK_AND_POOL}| awk -F '/' '{ print $2}') |
||
| + | echo "DISK=${DISK}" |
||
| + | # |
||
| + | DEV_NAME=$( $rbd -c /etc/ceph/ceph.conf --keyring /etc/ceph/ceph.client.nova.keyring device map --pool ${POOL} ${DISK} --id nova 2>&1 | dos2unix) |
||
| + | echo "DEV_NAME=${DEV_NAME}" |
||
| + | fsck.ext4 -f -y ${DEV_NAME}p1 |
||
| + | $rbd -c /etc/ceph/ceph.conf --keyring /etc/ceph/ceph.client.nova.keyring device unmap ${DEV_NAME} |
||
| + | done |
||
| + | </PRE> |
||
| + | |||
| + | =Mirantis-специфичное= |
||
| + | Это куски документации переведенне и с комментариями (иногда) |
||
| + | ==Задать число реплик контроллеров== |
||
| + | если нужно сэкономить ресурсы и пох на все |
||
| + | <PRE> |
||
| + | EDITOR=mcedit mgtctl -n mosk edit cluster child-cluster |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | helmReleases: |
||
| + | - name: ceph-controller |
||
| + | values: |
||
| + | rookOperatorPlacement: |
||
| + | nodeSelector: |
||
| + | node-type: storage-node-my-own-label |
||
| + | controllers: |
||
| + | cephController: |
||
| + | replicas: 1 |
||
| + | cephMaintenance: |
||
| + | replicas: 1 |
||
| + | cephRequest: |
||
| + | replicas: 1 |
||
| + | cephStatus: |
||
| + | replicas: 1 |
||
| + | </PRE> |
||
| + | Часть rookOperatorPlacement не относится к репликам |
||
| + | |||
| + | |||
| + | ==Задать фактор репликации по-умолчанию== |
||
| + | Что бы после обновления он не откатился к дофолту, если был сменен руками установить size: 1 |
||
| + | <PRE> |
||
| + | EDITOR=mcedit mgtctl -n mosk edit kaascephclusters ceph-child-cluster |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | apiVersion: kaas.mirantis.com/v1alpha1 |
||
| + | kind: KaaSCephCluster |
||
| + | spec: |
||
| + | cephClusterSpec: |
||
| + | pools: |
||
| + | - default: true |
||
| + | deviceClass: ssd |
||
| + | name: kubernetes |
||
| + | replicated: |
||
| + | size: 1 |
||
| + | role: kubernetes |
||
| + | - default: false |
||
| + | </PRE> |
||
| + | |||
| + | =Замена сломанного диска (OSD)= |
||
| + | Посмотреть метаданные (откуда достать ноду и имя устройства) можно так: |
||
| + | <PRE> |
||
| + | ceph osd metadata | jq '.' |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | [ |
||
| + | { |
||
| + | "id": 0, |
||
| + | "arch": "x86_64", |
||
| + | "back_addr": "[v2:10.80.4.32:6804/3947867361,v1:10.80.4.32:6805/3947867361]", |
||
| + | "back_iface": "", |
||
| + | "bluefs": "1", |
||
| + | "bluefs_dedicated_db": "0", |
||
| + | "bluefs_dedicated_wal": "0", |
||
| + | "bluefs_single_shared_device": "1", |
||
| + | "bluestore_bdev_access_mode": "blk", |
||
| + | "bluestore_bdev_block_size": "4096", |
||
| + | "bluestore_bdev_dev_node": "/dev/dm-0", |
||
| + | "bluestore_bdev_devices": "vdb", |
||
| + | "bluestore_bdev_driver": "KernelDevice", |
||
| + | "bluestore_bdev_optimal_io_size": "0", |
||
| + | "bluestore_bdev_partition_path": "/dev/dm-0", |
||
| + | "bluestore_bdev_rotational": "1", |
||
| + | "bluestore_bdev_size": "375805444096", |
||
| + | "bluestore_bdev_support_discard": "1", |
||
| + | "bluestore_bdev_type": "hdd", |
||
| + | "ceph_release": "quincy", |
||
| + | "ceph_version": "ceph version 17.2.6 (d7ff0d10654d2280e08f1ab989c7cdf3064446a5) quincy (stable)", |
||
| + | "ceph_version_short": "17.2.6", |
||
| + | "ceph_version_when_created": "ceph version 16.2.11 (3cf40e2dca667f68c6ce3ff5cd94f01e711af894) pacific (stable)", |
||
| + | "container_hostname": "storage-2", |
||
| + | "container_image": "127.0.0.1:44301/mirantis/ceph:v17.2.6-cve-1", |
||
| + | "cpu": "Intel(R) Xeon(R) CPU X5670 @ 2.93GHz", |
||
| + | "created_at": "2023-05-31T11:47:32.773612Z", |
||
| + | "default_device_class": "hdd", |
||
| + | "device_ids": "", |
||
| + | "device_paths": "vdb=/dev/disk/by-path/pci-0000:00:0c.1", |
||
| + | "devices": "vdb", |
||
| + | "distro": "centos", |
||
| + | "distro_description": "CentOS Stream 9", |
||
| + | "distro_version": "9", |
||
| + | "front_addr": "[v2:10.80.5.32:6802/3946867361,v1:10.80.5.32:6803/3946867361]", |
||
| + | "front_iface": "", |
||
| + | "hb_back_addr": "[v2:10.80.4.32:6802/3946867361,v1:10.80.4.32:6803/3946867361]", |
||
| + | "hb_front_addr": "[v2:10.80.5.32:6804/3946867361,v1:10.80.5.32:6805/3946867361]", |
||
| + | "hostname": "storage-2", |
||
| + | "journal_rotational": "1", |
||
| + | "kernel_description": "#167-Ubuntu SMP Mon May 15 17:35:05 UTC 2023", |
||
| + | "kernel_version": "5.4.0-150-generic", |
||
| + | "mem_swap_kb": "0", |
||
| + | "mem_total_kb": "16393460", |
||
| + | "network_numa_unknown_ifaces": "back_iface,front_iface", |
||
| + | "objectstore_numa_unknown_devices": "vdb", |
||
| + | "os": "Linux", |
||
| + | "osd_data": "/var/lib/ceph/osd/ceph-0", |
||
| + | "osd_objectstore": "bluestore", |
||
| + | "osdspec_affinity": "", |
||
| + | "pod_name": "rook-ceph-osd-0-645c84b-4fb4b", |
||
| + | "pod_namespace": "rook-ceph", |
||
| + | "rotational": "1" |
||
| + | }, |
||
| + | </PRE> |
||
| + | Найти сломанные OSD |
||
| + | <PRE> |
||
| + | ceph osd tree down |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF |
||
| + | -1 111.66374 root default |
||
| + | -23 18.52654 host kaas-node-650411e5-eb92-4438-bb95-22aeb2bb79f4 |
||
| + | 20 hdd 3.80629 osd.20 down 0 1.00000 |
||
| + | 21 hdd 3.63799 osd.21 down 0 1.00000 |
||
| + | 22 hdd 3.80629 osd.22 down 0 1.00000 |
||
| + | 30 hdd 3.63799 osd.30 down 0 1.00000 |
||
| + | 31 hdd 3.63799 osd.31 down 0 1.00000 |
||
| + | </PRE> |
||
| + | Для того что бы найти ноды (хостнейм известен - kaas-node-650411e5-eb92-4438-bb95-22aeb2bb79f4 ) <BR> |
||
| + | но это нужно как-то сопоставить с именем ноды в объекте kaascephcluster |
||
| + | Это можно сделать через объект machine |
||
| + | <PRE> |
||
| + | kubectl get ma -A -o wide | grep mos-ceph-osd004 |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | eu-production-mos mos-ceph-osd004 true Ready kaas-node-650411e5-eb92-4438-bb95-22aeb2bb79f4 83 false |
||
| + | </PRE> |
||
| + | Тут сопоставление ноды kaas-node-650411e5-eb92-4438-bb95-22aeb2bb79f4 и записи в объекте - mos-ceph-osd004 |
||
| + | <BR> |
||
| + | Например вывод для OSD 22 - тут видно ноду "hostname": "kaas-node-650411e5-eb92-4438-bb95-22aeb2bb79f4" <BR> |
||
| + | но для того что бы удалить из кластера эту OSD нужно найти сопоставление с mos-ceph-osd004 |
||
| + | <PRE> |
||
| + | ceph osd metadata 22 |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | { |
||
| + | "id": 22, |
||
| + | "arch": "x86_64", |
||
| + | "back_addr": "[v2:192.168.12.20:6805/322056793,v1:192.168.12.20:6808/322056793]", |
||
| + | "back_iface": "", |
||
| + | "bluefs": "1", |
||
| + | "bluefs_db_access_mode": "blk", |
||
| + | "bluefs_db_block_size": "4096", |
||
| + | "bluefs_db_dev_node": "/dev/dm-2", |
||
| + | "bluefs_db_devices": "sdg", |
||
| + | "bluefs_db_driver": "KernelDevice", |
||
| + | "bluefs_db_optimal_io_size": "0", |
||
| + | "bluefs_db_partition_path": "/dev/dm-2", |
||
| + | "bluefs_db_rotational": "0", |
||
| + | "bluefs_db_size": "184318689280", |
||
| + | "bluefs_db_support_discard": "1", |
||
| + | "bluefs_db_type": "ssd", |
||
| + | "bluefs_dedicated_db": "1", |
||
| + | "bluefs_dedicated_wal": "0", |
||
| + | "bluefs_single_shared_device": "0", |
||
| + | "bluestore_bdev_access_mode": "blk", |
||
| + | "bluestore_bdev_block_size": "4096", |
||
| + | "bluestore_bdev_dev_node": "/dev/dm-1", |
||
| + | "bluestore_bdev_devices": "sdh", |
||
| + | "bluestore_bdev_driver": "KernelDevice", |
||
| + | "bluestore_bdev_optimal_io_size": "0", |
||
| + | "bluestore_bdev_partition_path": "/dev/dm-1", |
||
| + | "bluestore_bdev_rotational": "1", |
||
| + | "bluestore_bdev_size": "4000783007744", |
||
| + | "bluestore_bdev_support_discard": "0", |
||
| + | "bluestore_bdev_type": "hdd", |
||
| + | "ceph_release": "quincy", |
||
| + | "ceph_version": "ceph version 17.2.6 (d7ff0d10654d2280e08f1ab989c7cdf3064446a5) quincy (stable)", |
||
| + | "ceph_version_short": "17.2.6", |
||
| + | "ceph_version_when_created": "", |
||
| + | "container_hostname": "kaas-node-650411e5-eb92-4438-bb95-22aeb2bb79f4", |
||
| + | "container_image": "127.0.0.1:44301/mirantis/ceph:v17.2.6-rel-5", |
||
| + | "cpu": "Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz", |
||
| + | "created_at": "", |
||
| + | "default_device_class": "hdd", |
||
| + | "device_ids": "sdg=WDC_WDS100T2B0A_200231440911,sdh=WDC_WD4001FAEX-0_WD-WCC131110366", |
||
| + | "device_paths": "sdg=/dev/disk/by-path/pci-0000:00:1f.2-ata-3,sdh=/dev/disk/by-path/pci-0000:00:1f.2-ata-4", |
||
| + | "devices": "sdg,sdh", |
||
| + | "distro": "centos", |
||
| + | "distro_description": "CentOS Stream 9", |
||
| + | "distro_version": "9", |
||
| + | "front_addr": "[v2:192.168.10.109:6808/322056793,v1:192.168.10.109:6809/322056793]", |
||
| + | "front_iface": "", |
||
| + | "hb_back_addr": "[v2:192.168.12.20:6809/322056793,v1:192.168.12.20:6810/322056793]", |
||
| + | "hb_front_addr": "[v2:192.168.10.109:6810/322056793,v1:192.168.10.109:6811/322056793]", |
||
| + | "hostname": "kaas-node-650411e5-eb92-4438-bb95-22aeb2bb79f4", |
||
| + | "journal_rotational": "0", |
||
| + | "kernel_description": "#167~18.04.1-Ubuntu SMP Wed May 24 00:51:42 UTC 2023", |
||
| + | "kernel_version": "5.4.0-150-generic", |
||
| + | "mem_swap_kb": "0", |
||
| + | "mem_total_kb": "65746728", |
||
| + | "network_numa_unknown_ifaces": "back_iface,front_iface", |
||
| + | "objectstore_numa_unknown_devices": "sdg,sdh", |
||
| + | "os": "Linux", |
||
| + | "osd_data": "/var/lib/ceph/osd/ceph-22", |
||
| + | "osd_objectstore": "bluestore", |
||
| + | "osdspec_affinity": "", |
||
| + | "pod_name": "rook-ceph-osd-22-68f7c8cd88-gm6cv", |
||
| + | "pod_namespace": "rook-ceph", |
||
| + | "rotational": "1" |
||
| + | } |
||
| + | </PRE> |
||
| + | Что из этого можно понять |
||
| + | * bluefs_db_devices": "sdg" - это устройство с метадатой |
||
| + | * bluefs_db_dev_node": "/dev/dm-2 - это блочное устройство, тут нельзя указать партицию по-тому используется LVM |
||
| + | * bluestore_bdev_devices": "sdh", - устройство с данными |
||
| + | |||
| + | https://docs.mirantis.com/container-cloud/latest/operations-guide/operate-managed/operate-managed-bm/manage-ceph/ceph-lcm/replace-failed-node.html |
||
| + | <BR> |
||
| + | dropFromClusterOnly - если не очищается поломанный диск |
||
| + | фулл мапинг можно посмотреть на чайлде вот так: kubectl -n ceph-lcm-mirantis get miracephlog -o yaml |
||
| + | При удалении OSD при удалении всех (если упали все OSD на ноде) нужно удалять ВМЕСТЕ С НОДОЙ |
||
| + | |||
| + | ==By-ID или /dev/sdX ? (miracephlog)== |
||
| + | Бывыет так что диск в kaascephcluster добавлен не по букве /dev/sdX а например /dev/disk/by-id/WDC_WD4003FZEX-0_WD-WMC5D0D9DMEY и тогда сложно сопоставить вывалившийся диск по dmesg с kaascephcluster . |
||
| + | вот так моджно сопоставить зная девайс и ноду: |
||
| + | <PRE> |
||
| + | kubectl -n ceph-lcm-mirantis get miracephlog -o yaml |
||
| + | </PRE> |
||
| + | тут будет нечто: |
||
| + | <PRE> |
||
| + | kaas-node-12c448d3-ca7e-4817-9d25-fe21aa441d4c: |
||
| + | ... |
||
| + | osd.17: |
||
| + | blockPartition: /dev/dm-3 |
||
| + | deviceByID: WDC_WD4003FZEX-0_WD-WMC5D0D9DMEY |
||
| + | deviceByPath: /dev/disk/by-path/pci-0000:00:11.4-ata-3 |
||
| + | deviceClass: hdd |
||
| + | deviceName: sdc |
||
| + | in: true |
||
| + | metaPartition: /dev/sdg3 |
||
| + | metadataDeviceByID: Samsung_SSD_850_S2RFNX0H512086E |
||
| + | metadataDeviceByPath: /dev/disk/by-path/pci-0000:00:1f.2-ata-3 |
||
| + | metadataDeviceClass: ssd |
||
| + | metadataDeviceName: sdg |
||
| + | osdUUID: 6d26c9e4-35c1-43e1-822e-d5aef566b764 |
||
| + | up: true |
||
| + | ... |
||
| + | </PRE> |
||
| + | ==Очистка алерта от недавно скрашевшихся OSDs== |
||
| + | |||
| + | поархивировать варнинги о крашнутых osd - раньше они были, сеф их зафиксировал, но сейчас они работают нормально,<BR> |
||
| + | однако ceph -s показывает ворнинг, решение ниже: |
||
| + | <PRE> |
||
| + | ceph crash archive-all |
||
| + | </PRE> |
||
| + | |||
| + | =Блокировки в CEPH= |
||
| + | |||
| + | В rbd есть понятие блокировки - и список блокировок можно посмотреть командой: |
||
| + | <PRE> |
||
| + | rbd -p volumes-ssd lock list 66b35cdf-845e-47a4-badd-c03e1902fb44 |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | There is 1 exclusive lock on this image. |
||
| + | Locker ID Address |
||
| + | client.53989246 auto 140537302618384 10.80.3.54:0/2974634118 |
||
| + | </PRE> |
||
| + | * volumes-ssd - это имя пула |
||
| + | * 66b35cdf-845e-47a4-badd-c03e1902fb44 - это ID который можно посмотреть в openstack server show |
||
| + | * 10.80.3.54 - это адрес compute |
||
| + | |||
| + | При этом иногда при краше компьюты локи остаются и новая компьюта после миграции ВМ не может подключить диск |
||
| + | Пример ошибки (хотя это не единственный вариант ошибки): |
||
| + | <PRE> |
||
| + | {'code': 500, 'created': '2024-02-15T17:32:25Z', 'message': 'ReadOnlyImage', 'details': 'Traceback (most recent call last):\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/nova/compute/manager.py", line 207, in decorated_function\n |
||
| + | return function(self, context, *args, **kwargs)\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/nova/compute/manager.py", line 5981, in finish_resize\n |
||
| + | self._delete_allocation_after_move(\n File "/var/lib/openstack/lib/python3.8/site-packages/oslo_utils/excutils.py", line 220, in __exit__\n |
||
| + | self.force_reraise()\n File "/var/lib/openstack/lib/python3.8/site-packages/oslo_utils/excutils.py", line 196, in force_reraise\n |
||
| + | six.reraise(self.type_, self.value, self.tb)\n File "/var/lib/openstack/lib/python3.8/site-packages/six.py", line 703, in reraise\n |
||
| + | raise value\n File "/var/lib/openstack/lib/python3.8/site-packages/nova/compute/manager.py", line 5963, in finish_resize\n |
||
| + | self._finish_resize_helper(context, disk_info, image, instance,\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/nova/compute/manager.py", line 5996, in _finish_resize_helper\n |
||
| + | network_info = self._finish_resize(context, instance, migration,\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/nova/compute/manager.py", line 5884, in _finish_resize\n |
||
| + | self._set_instance_info(instance, old_flavor)\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/oslo_utils/excutils.py", line 220, in __exit__\n |
||
| + | self.force_reraise()\n File "/var/lib/openstack/lib/python3.8/site-packages/oslo_utils/excutils.py", line 196, in force_reraise\n |
||
| + | six.reraise(self.type_, self.value, self.tb)\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/six.py", line 703, in reraise\n |
||
| + | raise value\n File "/var/lib/openstack/lib/python3.8/site-packages/nova/compute/manager.py", line 5867, in _finish_resize\n |
||
| + | self.driver.finish_migration(context, migration, instance,\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/nova/virt/libvirt/driver.py",line 10629, in finish_migration\n |
||
| + | self._create_image(context, instance, block_disk_info[\'mapping\'],\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/nova/virt/libvirt/driver.py", line 4200, in _create_image\n |
||
| + | created_disks = self._create_and_inject_local_root(\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/nova/virt/libvirt/driver.py", line 4298, in _create_and_inject_local_root\n |
||
| + | backend.create_snap(libvirt_utils.RESIZE_SNAPSHOT_NAME)\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/nova/virt/libvirt/imagebackend.py", line 1122, in create_snap\n |
||
| + | return self.driver.create_snap(self.rbd_name, name)\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/nova/storage/rbd_utils.py", line 443, in create_snap\n |
||
| + | vol.create_snap(name)\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/eventlet/tpool.py", line 190, in doit\n |
||
| + | result = proxy_call(self._autowrap, f, *args, **kwargs)\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/eventlet/tpool.py", line 148, in proxy_call\n |
||
| + | rv = execute(f, *args, **kwargs)\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/eventlet/tpool.py", line 129, in execute\n |
||
| + | six.reraise(c, e, tb)\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/six.py", line 703, in reraise\n |
||
| + | raise value\n |
||
| + | File "/var/lib/openstack/lib/python3.8/site-packages/eventlet/tpool.py", line 83, in tworker\n |
||
| + | rv = meth(*args, **kwargs)\n File "rbd.pyx", line 2770, in rbd.requires_not_closed.wrapper\n |
||
| + | File "rbd.pyx", line 3514, in rbd.Image.create_snap\n |
||
| + | rbd.ReadOnlyImage: [errno 30] RBD read-only image (error creating snapshot b\'nova-resize\' from b\'2786c568-5fda-496d-a267-551e2ce3acc5_disk\')\n'} |
||
| + | </PRE> |
||
| + | Например (с лабы): |
||
| + | |||
| + | <PRE> |
||
| + | rbd -p volumes-nvme lock list e0fa47b1-6831-40fa-b626-f4eea84940c2 |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | There is 1 exclusive lock on this image. |
||
| + | Locker ID Address |
||
| + | client.46717700 auto 139629252590528 10.187.84.142:0/3063592878 |
||
| + | </PRE> |
||
| + | Посмотреть кто использует диск можно так: |
||
| + | Пример кастомера: |
||
| + | <PRE> |
||
| + | rbd status volumes-nvme/e0fa47b1-6831-40fa-b626-f4eea84940c2 |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | Watchers: |
||
| + | watcher=10.187.84.142:0/3063592878 client.46717700 cookie=139629252590528 |
||
| + | watcher=10.187.84.171:0/2753880368 client.402631226 cookie=140045730189824 |
||
| + | </PRE> |
||
| + | пример с лабы |
||
| + | <PRE> |
||
| + | rbd status volumes-ssd/66b35cdf-845e-47a4-badd-c03e1902fb44 |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | Watchers: |
||
| + | watcher=10.80.3.54:0/2974634118 client.53989246 cookie=140537302618384 |
||
| + | </PRE> |
||
| + | Тут у кастомера 2 ноды - старая (мертвая), с которой ВМ перенесли на новую |
||
| + | <BR> |
||
| + | В случае лабы только одна актуальная компьют-нода |
||
| + | </BR> |
||
| + | У кастомера - проверяем что нода (10.187.84.142) не работает : |
||
| + | <PRE> |
||
| + | kubectl -n openstack get nodes -o wide |grep kaas-node-a0d08ca9-14eb-42dd-9908-9ecde7cb9d7c |
||
| + | kaas-node-a0d08ca9-14eb-42dd-9908-9ecde7cb9d7c NotReady <none> 566d v1.24.6-mirantis-1 10.187.84.142 <none> Ubuntu 20.04.6 LTS 5.4.0-109-generic |
||
| + | </PRE> |
||
| + | И можно удалить (заблокировать) watcher 10.187.84.142:0/3063592878 |
||
| + | <PRE> |
||
| + | ceph osd blacklist add 10.187.84.142:0/3063592878 │ |
||
| + | blocklisting 10.187.84.142:0/3063592878 until 2024-02-01T11:12:42.942069+0000 (3600 sec) |
||
| + | </PRE> |
||
| + | * 10.187.84.142:0/3063592878 - адрес и идентификатор который нужно заблокировать |
||
| + | * блокировка временная |
||
| + | * После чего диск может использовать новая компьюта |
||
| + | |||
| + | <PRE> |
||
| + | rbd -p volumes-nvme lock list e0fa47b1-6831-40fa-b626-f4eea84940c2 |
||
| + | There is 1 exclusive lock on this image. |
||
| + | Locker ID Address |
||
| + | client.402631226 auto 140045730189824 10.187.84.171:0/2753880368 |
||
| + | </PRE> |
||
| + | Или можно удалить сразу lock (пример не с лабы, по-том такие странные пулы) |
||
| + | <PRE> |
||
| + | rbd lock remove --pool c7000-pxmx1-am7 vm-201-disk-0 "auto 140450841490944" client.70464 |
||
| + | </PRE> |
||
| + | ="Неудаляемый" image в glance= |
||
| + | Столкнулся с проблемой - невозможно удалить образ: |
||
| + | <PRE> |
||
| + | openstack image delete Ubuntu-22.04-root-password-set |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | Failed to delete image with name or ID 'Ubuntu-22.04-root-password-set': HttpException: 500: Server Error for url: https://glance.it.just.works/v2/images/f9b77787-49f0-45cc-9758-11319ae47de8, The server has either erred or is incapable of performing the requested operation.: 500 Internal Server Error |
||
| + | Failed to delete 1 of 1 images. |
||
| + | </PRE> |
||
| + | Коротко - проблема в том, что образ был создан из запущенной ВМи - и под капотом там используются снапшоты, когда из этого образа были созданы еще ВМки |
||
| + | |||
| + | Тем не менее сообщения в логах не информативны: |
||
| + | <PRE> |
||
| + | 2024-02-05 08:40:28.847 12 WARNING glance.api.v2.images [req-4c9facef-a616-4040-b584-02bd43f0878c 71add96277134f4a97127acc2431cddc fd65e819389849d0b8b50ff5b157b429 - default default] After upload to backend, deletion of staged image data has failed because it cannot be found at /tmp/staging//f9b77787-49f0-45cc-9758-11319ae47de8 |
||
| + | 2024-02-05 08:40:29.101 12 ERROR glance.common.wsgi [req-4c9facef-a616-4040-b584-02bd43f0878c 71add96277134f4a97127acc2431cddc fd65e819389849d0b8b50ff5b157b429 - default default] Caught error: [errno 1] RBD permission error (error listing children.): rbd.PermissionError: [errno 1] RBD permission error (error listing children.) |
||
| + | </PRE> |
||
| + | Для того что бы (для начала) получить более информативное сообщение нужно дать для glance дополнительные права - в терминах МОСК это делается через kaascephcluster: |
||
| + | <PRE> |
||
| + | kubectl -n mosk get kaascephcluster ceph-child-cluster -o yaml | yq .spec.cephClusterSpec.clients |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | - caps: |
||
| + | mon: allow r |
||
| + | osd: allow class-read object_prefix rbd_children, allow rwx pool=images-ssd, allow rx pool=volumes-ssd, allow rwx pool=vms-ssd |
||
| + | name: glance |
||
| + | - caps: |
||
| + | mds: allow rw |
||
| + | mgr: allow rw |
||
| + | mon: allow r |
||
| + | name: cephfs-client |
||
| + | </PRE> |
||
| + | тут была добавлена секция для glance |
||
| + | <BR> |
||
| + | После этого удалить образ все так же нельзя, но есть более-менее информативное сообщение для поиска проблемы: |
||
| + | <PRE> |
||
| + | 2024-02-05 10:05:30.400 11 WARNING glance_store._drivers.rbd [req-585db1f1-76a7-478b-adce-adb2dfaa78a3 71add96277134f4a97127acc2431cddc fd65e819389849d0b8b50ff5b157b429 - default default] Snap Operating Exception RBD image is busy (Image snapshot has external references.) Snapshot is in use.: rbd.ImageBusy: RBD image is busy (Image snapshot has external references.) |
||
| + | </PRE> |
||
| + | Далее можно посмотреть зависимые образы: |
||
| + | <PRE> |
||
| + | rbd children images-ssd/f9b77787-49f0-45cc-9758-11319ae47de8 |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | vms-ssd/35ed30a8-5e64-4b69-a146-3264496ad6e6_disk |
||
| + | vms-ssd/bb679dfb-44b6-4e10-b4c5-afb0715176b3_disk |
||
| + | vms-ssd/dc369981-978d-4fa5-801b-e202ba101d19_disk |
||
| + | </PRE> |
||
| + | Тут видно что это диски виртуалок, это видно из имени пула vms-ssd , и ID виртуалок тоже известны - можно удалять ВМки и освобождать блокировку |
||
| + | После удаления виртуалок, можно убедиться что зависимостей не осталось |
||
| + | <PRE> |
||
| + | rbd children images-ssd/f9b77787-49f0-45cc-9758-11319ae47de8 |
||
| + | </PRE> |
||
| + | Финальный шаг - удаление “проблемного” образа |
||
| + | <PRE> |
||
| + | openstack image delete f9b77787-49f0-45cc-9758-11319ae47de8 |
||
| + | </PRE> |
||
| + | ==Additional Information== |
||
| + | После создания OSD Ceph запустит операцию восстановления и начнет перемещать группы размещения из вторичных OSD в новый OSD. <BR> |
||
| + | Опять же, операция восстановления займет некоторое время в зависимости от размера вашего кластера, после ее завершения ваш кластер Ceph будет <code>HEALTH_OK</code>. |
||
| + | <BR> |
||
| + | Когда новый хост или диск добавляется в кластер Ceph, CRUSH запускает операцию перебалансировки, в рамках которой он перемещает данные с существующих хостов/дисков на новый хост/диск. <BR> |
||
| + | Перебалансировка выполняется для того, чтобы все диски использовались одинаково, что повышает производительность кластера и поддерживает его работоспособность. |
||
Текущая версия на 12:00, 13 октября 2025
Ceph2
Сборник рецептов по ceph
Удаление OSD из кластера
123- номер OSD на удалениеnode-2- хостнейм ноды на котрой этот OSDsdd- блочное устройство
Пометить OSD out из кластера Ceph
ceph osd out osd.123
Удалить сбойную OSD из CRUSH map
ceph osd crush rm osd.123
Удалить ключи (authentication keys) для OSD
ceph auth del osd.123
Удалить OSD из кластера Ceph
ceph osd rm osd.123
Please keep in mind that whenever an OSD is unavailable your cluster health will not be OK, and it will continue to perform the recovery which is a normal Ceph operation in this situation.
Заменить диск
Список дисков (после замены) посмотреть так:
ceph-deploy disk list node-2
Перед добавлением диска в кластер Ceph выполните очистку диска
Перед добавлением проверить как определился диск (sdd или другая буква)
ceph-deploy disk zap node-2:sdd
Создать OSD на дискеи добавить в кластер Ceph как osd.123
ceph-deploy --overwrite-conf osd create node-2:sdd
показать список винтов
ceph device ls | grep "kaas-node-74fd42ba-ec8f-4ce8-8d29-5ba4777d19a6:sdj
инфа о девайсе
ceph device info <devid>
показать здоровье кластера
ceph -s
ceph health detail
Поиск проблемы
ceph health detail
ceph crash ls-new
ceph crash ls
crash_id=$(ceph crash ls-new | head -n1)
Например
ceph crash ls-new ID ENTITY NEW 2025-10-09T02:33:59.353672Z_43e260ca-1fdd-497e-9a42-dadb8f33d8a8 osd.432 *
ceph crash info "$crash_id" -f json-pretty | jq -r '.entity_name, .daemon, .utsname.nodename, .timestamp'
Пример
ceph crash info 2025-10-09T02:33:59.353672Z_43e260ca-1fdd-497e-9a42-dadb8f33d8a8
{
"assert_condition": "p->first > start+len",
"assert_file": "/builddir/build/BUILD/ceph-18.2.7/src/include/interval_set.h",
"assert_func": "void interval_set<T, C>::insert(T, T, T*, T*) [with T = long unsigned int; C = std::map]",
"assert_line": 536,
"assert_msg": "/builddir/build/BUILD/ceph-18.2.7/src/include/interval_set.h: In function 'void interval_set<T, C>::insert(T, T, T*, T*) [with T = long unsigned int; C = std::map]' thread 7fe8313de640 time 2025-10-09T02:33:59.350176+0000\n/builddir/build/BUILD/ceph-18.2.7/src/include/interval_set.h: 536: FAILED ceph_assert(p->first > start+len)\n",
"assert_thread_name": "bstore_discard",
"backtrace": [
"/lib64/libc.so.6(+0x3ebf0) [0x7fe83eaacbf0]",
"/lib64/libc.so.6(+0x8c21c) [0x7fe83eafa21c]",
"raise()",
"abort()",
"(ceph::__ceph_assert_fail(char const*, char const*, int, char const*)+0x169) [0x55ad196f0f9f]",
"ceph-osd(+0x3cd100) [0x55ad196f1100]",
"ceph-osd(+0x46831c) [0x55ad1978c31c]",
"(KernelDevice::_discard_thread(unsigned long)+0x1ce) [0x55ad1a062a7e]",
"ceph-osd(+0xd3f355) [0x55ad1a063355]",
"/lib64/libc.so.6(+0x8a4da) [0x7fe83eaf84da]",
"/lib64/libc.so.6(+0x10f550) [0x7fe83eb7d550]"
],
"ceph_version": "18.2.7",
"crash_id": "2025-10-09T02:33:59.353672Z_43e260ca-1fdd-497e-9a42-dadb8f33d8a8",
"entity_name": "osd.432",
"os_id": "centos",
"os_name": "CentOS Stream",
"os_version": "9",
"os_version_id": "9",
"process_name": "ceph-osd",
"stack_sig": "8d98f4fe4f2c07db24137ab90a0513cf1cd5663cb5eaa155a406da0063eb33a6",
"timestamp": "2025-10-09T02:33:59.353672Z",
"utsname_hostname": "kaas-node-b546f17a-885c-4439-8e40-57532fef9c91",
"utsname_machine": "x86_64",
"utsname_release": "5.15.0-143-generic",
"utsname_sysname": "Linux",
"utsname_version": "#153-Ubuntu SMP Fri Jun 13 19:10:45 UTC 2025"
}
Заархивировать запись
ceph crash archive "$crash_id"
или все сразу
ceph crash archive-all
показать дерево osd
ceph osd tree
посмотреть пулы
ceph osd lspools
проверить использование стореджа пулами
ceph df
ceph df detail
--- RAW STORAGE --- CLASS SIZE AVAIL USED RAW USED %RAW USED hdd 17 TiB 16 TiB 14 GiB 14 GiB 0.08 TOTAL 17 TiB 16 TiB 14 GiB 14 GiB 0.08 --- POOLS --- POOL ID PGS STORED (DATA) (OMAP) OBJECTS USED (DATA) (OMAP) %USED MAX AVAIL QUOTA OBJECTS QUOTA BYTES DIRTY USED COMPR UNDER COMPR kubernetes-hdd 1 32 181 MiB 181 MiB 0 B 60 542 MiB 542 MiB 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B .rgw.root 2 8 6.5 KiB 6.5 KiB 0 B 19 216 KiB 216 KiB 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B openstack-store.rgw.log 3 8 89 KiB 23 KiB 66 KiB 339 2.1 MiB 1.9 MiB 199 KiB 0 5.2 TiB N/A N/A N/A 0 B 0 B openstack-store.rgw.buckets.index 4 8 0 B 0 B 0 B 0 0 B 0 B 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B openstack-store.rgw.otp 5 8 0 B 0 B 0 B 0 0 B 0 B 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B openstack-store.rgw.control 6 8 0 B 0 B 0 B 8 0 B 0 B 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B openstack-store.rgw.meta 7 8 1.7 KiB 1.3 KiB 402 B 9 73 KiB 72 KiB 1.2 KiB 0 5.2 TiB N/A N/A N/A 0 B 0 B openstack-store.rgw.buckets.non-ec 8 8 0 B 0 B 0 B 0 0 B 0 B 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B volumes-hdd 9 128 89 MiB 89 MiB 233 KiB 73 268 MiB 267 MiB 699 KiB 0 5.2 TiB N/A N/A N/A 0 B 0 B openstack-store.rgw.buckets.data 10 32 0 B 0 B 0 B 0 0 B 0 B 0 B 0 10 TiB N/A N/A N/A 0 B 0 B .mgr 11 1 25 MiB 25 MiB 0 B 8 75 MiB 75 MiB 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B vms-hdd 12 256 151 MiB 151 MiB 12 KiB 349 454 MiB 454 MiB 35 KiB 0 5.2 TiB N/A N/A N/A 0 B 0 B backup-hdd 13 32 19 B 19 B 0 B 1 12 KiB 12 KiB 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B images-hdd 14 32 1.0 GiB 1.0 GiB 11 KiB 167 3.1 GiB 3.1 GiB 32 KiB 0.02 5.2 TiB N/A N/A N/A 0 B 0 B other-hdd 15 32 19 B 19 B 0 B 1 12 KiB 12 KiB 0 B 0 5.2 TiB N/A N/A N/A 0 B 0 B
проверить занятость osd
ceph osd df
ceph osd df
Defaulted container "rook-ceph-tools" out of: rook-ceph-tools, cabundle-update (init)
ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS
1 hdd 0.29109 1.00000 298 GiB 510 MiB 37 MiB 16 KiB 473 MiB 298 GiB 0.17 1.99 38 up
3 hdd 3.63869 1.00000 3.6 TiB 2.0 GiB 1.3 GiB 125 KiB 769 MiB 3.6 TiB 0.05 0.64 449 up
6 hdd 0.90970 1.00000 932 GiB 1.0 GiB 224 MiB 67 KiB 842 MiB 930 GiB 0.11 1.33 114 up
0 hdd 3.63869 1.00000 3.6 TiB 2.5 GiB 759 MiB 92 KiB 1.7 GiB 3.6 TiB 0.07 0.79 278 up
5 hdd 0.45479 1.00000 466 GiB 1.8 GiB 118 MiB 16 KiB 1.7 GiB 464 GiB 0.38 4.53 33 up
7 hdd 3.63869 1.00000 3.6 TiB 2.4 GiB 669 MiB 287 KiB 1.8 GiB 3.6 TiB 0.06 0.77 290 up
2 hdd 0.29109 1.00000 298 GiB 945 MiB 151 MiB 9 KiB 794 MiB 297 GiB 0.31 3.69 40 up
4 hdd 3.63869 1.00000 3.6 TiB 3.1 GiB 1.4 GiB 375 KiB 1.7 GiB 3.6 TiB 0.08 0.98 561 up
TOTAL 17 TiB 14 GiB 4.5 GiB 991 KiB 9.7 GiB 16 TiB 0.08
получмить метадату по osd
ceph osd metadata 75
посмотреть данные авторизации для osd
ceph auth get osd.75
примонтировать диск цефа снаружи виртуалки (на хосте)
Запускать нужно с правами рута, например в контейнере с libvirt, предварительно скопировав туда файл с ключем /etc/ceph/ceph.client.nova.keyring который можно найти в nova-compute контейнере
rbd -c /etc/ceph/ceph.conf --keyring /etc/ceph/ceph.client.nova.keyring device map --pool vms-ssd 6b566a66-ad46-495f-9e21-e8694f18ae74_disk --id nova
проверить фактически занятое место внутри цефа на вольюме
Запускать нужно с правами рута, например в контейнере с libvirt, предварительно скопировав туда файл с ключем
/etc/ceph/ceph.client.nova.keyring который можно найти в nova-compute контейнере
rbd -c /etc/ceph/ceph.conf --keyring /etc/ceph/ceph.client.nova.keyring disk-usage --pool vms-ssd --id nova
(имя пула можно взять из ceph osd lspools)
NAME PROVISIONED USED 6b566a66-ad46-495f-9e21-e8694f18ae74_disk 5 GiB 2.8 GiB b354b7d0-e26d-4f60-9391-a490f7581634_disk 5 GiB 3.1 GiB df339dd1-f119-4af1-a79e-bed00911f9dc_disk 5 GiB 3.2 GiB <TOTAL> 15 GiB 9.2 GiB
получить список нод, где есть osd down и сами osd
ceph osd tree | awk '/host/ {host=$4} /down/ {print host, $0}'
kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 210 nvme 1.74629 osd.210 down 0 1.00000
kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 218 nvme 1.74629 osd.218 down 0 1.00000
kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 228 nvme 1.74629 osd.228 down 0 1.00000
kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 236 nvme 1.74629 osd.236 down 0 1.00000
kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 244 nvme 1.74629 osd.244 down 0 1.00000
kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 253 nvme 1.74629 osd.253 down 0 1.00000
kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 262 nvme 1.74629 osd.262 down 0 1.00000
kaas-node-46c8f4ab-39ec-44d8-ba43-d7b3eecccdec 271 nvme 1.74629 osd.271 down 0 1.00000
kaas-node-f419673f-726c-4804-9c71-5eece76403c8 72 nvme 1.74629 osd.72 down 0 1.00000
kaas-node-f419673f-726c-4804-9c71-5eece76403c8 81 nvme 1.74629 osd.81 down 0 1.00000
kaas-node-f419673f-726c-4804-9c71-5eece76403c8 90 nvme 1.74629 osd.90 down 0 1.00000
kaas-node-f419673f-726c-4804-9c71-5eece76403c8 99 nvme 1.74629 osd.99 down 0 1.00000
kaas-node-f419673f-726c-4804-9c71-5eece76403c8 108 nvme 1.74629 osd.108 down 0 1.00000
kaas-node-f419673f-726c-4804-9c71-5eece76403c8 117 nvme 1.74629 osd.117 down 0 1.00000
kaas-node-f419673f-726c-4804-9c71-5eece76403c8 126 nvme 1.74629 osd.126 down 0 1.00000
kaas-node-f419673f-726c-4804-9c71-5eece76403c8 135 nvme 1.74629 osd.135 down 0 1.00000
поставить/снять для всех осд на ноде флаг noout
ceph osd set-group noout kaas-node-820ad8bd-45bd-4c4b-8271-2b697987aa21
ceph osd unset-group noout kaas-node-820ad8bd-45bd-4c4b-8271-2b697987aa21
посмотреть метадату по номеру OSD
ceph osd metadata | jq '.[] | select(.id==22)'
или просто
ceph osd metadata <ID>
kaascephcluster
найти диск /dev/sdX по его айди в kaascephcluster объекте зная его имя из вывода dmesg
быввет так что диск в kaascephcluster добавлен не по букве /dev/sdc
а by-id и тогда сложно сопоставить вывалившийся диск по dmesg с kaascephcluster записями.
вот так можно сопоставить зная девайс и ноду:
kubectl -n ceph-lcm-mirantis get miracephlog -o yaml
тут будет нечто:
kaas-node-12c448d3-ca7e-4817-9d25-fe21aa441d4c:
osd.17:
blockPartition: /dev/dm-3
deviceByID: WDC_WD4003FZEX-0_WD-WMC5D0D9DMEY
deviceByPath: /dev/disk/by-path/pci-0000:00:11.4-ata-3
deviceClass: hdd
deviceName: sdc
in: true
metaPartition: /dev/sdg3
metadataDeviceByID: Samsung_SSD_850_S2RFNX0H512086E
metadataDeviceByPath: /dev/disk/by-path/pci-0000:00:1f.2-ata-3
metadataDeviceClass: ssd
metadataDeviceName: sdg
osdUUID: 6d26c9e4-35c1-43e1-822e-d5aef566b764
up: true
замьютить варнинги в ceph чтоьбы он показал health-ok и можно было с ним работать(добавлять новые осд и другое)
ceph health mute OSD_NEARFULL 1h
ceph health mute POOL_NEARFULL 1h
поархивировать варнинги о крашнутых osd - раньше они были, сеф их зафиксировал, но сейчас они работают нормлаьно, однако ceph -s показывает ворнинг, решение ниже:
ceph crash archive-all
Identify existing images on Ceph
from glance pod:
rbd -n client.glance ls -p <pool-name>
Смотреть
- from keystone-client pod:
- openstack image list --all-projects
Compare the two lists, and either delete the VMs using the missing images to permanently
remove the image from Openstack, or copy the image to a new UUID for use later on.
to find osd id by device name
ceph-volume lvm list
===== osd.167 ======
[block] /dev/ceph-f6c4bf7d-ef19-4754-a785-48b499d3b37e/osd-block-941cefab-88b1-4b9e-bfa3-c66296b849dd
block device /dev/ceph-f6c4bf7d-ef19-4754-a785-48b499d3b37e/osd-block-941cefab-88b1-4b9e-bfa3-c66296b849dd
block uuid 6fwQaP-21CC-UryE-hsU6-6da1-wnZF-nj1RHJ
cephx lockbox secret
cluster fsid 7c4a3669-c5a7-0990-f711-ac1664aeba94
cluster name ceph
crush device class None
db device /dev/sdj4
db uuid c1790fbd-d5ae-44af-9cf6-bfe0d1f9bf5f
encrypted 0
osd fsid 941cefab-88b1-4b9e-bfa3-c66296b849dd
osd id 167
type block
vdo 0
devices /dev/sdh
как найти на каком девайсе ранится osd
ceph device ls-by-daemon osd.525 DEVICE HOST:DEV EXPECTED FAILURE MZXLR15THALA-000H3_S6C3NA0T200611 kaas-node-8c7a4ad5-f966-43d1-9d3e-32bf79f46a69:nvme3n1
Replication Factor
Если нет места то можно уменьшить число реплик, вплоть до 1 (что может быть не безопасно)
- min_size - минимальное число реплик (если меньше то пул не работает)
- size - нормальное число реплик
ceph osd pool set vms-ssd min_size 1
ceph osd pool set vms-ssd size 1 --yes-i-really-mean-it
Что бы заткнуть алерт
ceph health mute POOL_NO_REDUNDANCY
RBD
Проверить что содержится в пуле
- Получить списки пулов:
ceph osd lspools
rbd ls -p vms-ssd
vms-ssd имя пула Пример вывода:
rbd ls -p vms-ssd 091a31a7-678b-42ae-82b8-9d65efda489a_disk 09804666-7a79-415f-b932-a4de86c65449_disk 0b7ee907-b129-43d6-996a-6bd70cf106ec_disk 0dd34603-ae5e-4de6-9acb-dca4003bc72d_disk 0edb5d35-9bc2-485d-871a-17467cc96aa0_disk 13ed106d-1c67-44dd-8f3a-900f1af24b17_disk 1ed56b4b-7b33-4336-9e78-2d12d7290d18_disk 20051a53-5a8a-4092-be10-fcee67a0011f_disk
Информация о диске
Этот диск - загрузочный диск ВМ, не вольюм (в пуле vms-ssd)
rbd info feec3eae-2108-4cb5-a1a5-52c50e66db22_disk -p vms-ssd rbd image 'feec3eae-2108-4cb5-a1a5-52c50e66db22_disk': size 5 GiB in 1280 objects order 22 (4 MiB objects) snapshot_count: 0 id: 3f423a6496dbfd block_name_prefix: rbd_data.3f423a6496dbfd format: 2 features: layering, exclusive-lock, object-map, fast-diff, deep-flatten op_features: flags: create_timestamp: Tue Jun 20 15:01:57 2023 access_timestamp: Mon Jun 26 00:00:21 2023 modify_timestamp: Tue Jun 27 12:55:36 2023
feec3eae-2108-4cb5-a1a5-52c50e66db22_disk - это ID инстанса (+ слово disk) , можно посмотреть информацию о сервере openstack server show feec3eae-2108-4cb5-a1a5-52c50e66db22
Использование дисков
Или из контейнера libvirt - с ключами и паролями, или без ключей с ноды ceph
rbd -c /etc/ceph/ceph.conf --keyring /etc/ceph/ceph.client.nova.keyring disk-usage --pool vms-ssd --id nova
NAME PROVISIONED USED 6b566a66-ad46-495f-9e21-e8694f18ae74_disk 5 GiB 2.8 GiB b354b7d0-e26d-4f60-9391-a490f7581634_disk 5 GiB 3.1 GiB df339dd1-f119-4af1-a79e-bed00911f9dc_disk 5 GiB 3.2 GiB <TOTAL> 15 GiB 9.2 GiB
Удалить диск
rbd remove feec3eae-2108-4cb5-a1a5-52c50e66db22_disk -p vms-ssd
Подмонтировать диск виртуальной машины (из контейнера libvirt) (например что бы сделать fsck или вытащить данные)
Команда выполняется на хосте, внутри libvirt контейнера Внутри контейнера - по-тому что там есть пароли и конфиги, их в целом можно вытащить оттуда и запустить команду где удобнее.
rbd -c /etc/ceph/ceph.conf --keyring /etc/ceph/ceph.client.nova.keyring device map --pool vms-ssd 6b566a66-ad46-495f-9e21-e8694f18ae74_disk --id nova /dev/rbd0
- --keyring /etc/ceph/ceph.client.nova.keyring - файл с паролем
- -c /etc/ceph/ceph.conf - файл с адреcами мониторов
- --pool vms-ssd - имя пула (смотреть virsh dumpxml)
- 6b566a66-ad46-495f-9e21-e8694f18ae74_disk - имя диска (смотреть virsh dumpxml)
- --id nova - “идентификатор клиента” (я не знаю что это означает но без этого параметра не работает)
Просмотреть подмонтированные
root@r710:/# rbd showmapped id pool namespace image snap device 0 vms-ssd f2dfe088-0516-45a3-a6ab-305868be9f79_disk - /dev/rbd0
Отключить подключенный диск
rbd device unmap /dev/rbd0
найти все диски для всех ВМок и подмонтировать их (запускать из либвирт контейнера)
for VM_NAME in $(virsh list --all --name);
do
echo $VM_NAME
POOL_NAME=$(virsh dumpxml ${VM_NAME} | grep "protocol='rbd'" | awk '{print $3}' | awk -F "'" '{print $2}' | awk -F "/" '{ print $1 }')
DISK_NAME=$(virsh dumpxml ${VM_NAME} | grep "protocol='rbd'" | awk '{print $3}' | awk -F "'" '{print $2}' | awk -F "/" '{ print $2 }')
rbd -c /etc/ceph/ceph.conf --keyring /etc/ceph/ceph.client.nova.keyring device map --pool ${POOL_NAME} ${DISK_NAME} --id nova
done
#!/bin/bash
set -eu
set -o pipefail
set -x
virsh="docker exec -ti $(docker ps | grep libvirt | grep '/tmp/libvirt.sh' | awk '{print $1}') virsh"
rbd="docker exec -ti $(docker ps | grep libvirt | grep '/tmp/libvirt.sh' | awk '{print $1}') rbd"
for VM in $( $virsh list --all --name | grep "^instance" | dos2unix);
do
echo "Instance=${VM}"
DISK_AND_POOL=$( $virsh dumpxml ${VM} | grep "protocol='rbd'" | awk -F "'" '{print $4}')
echo "Pool/Disk=${DISK_AND_POOL}"
POOL=$(echo ${DISK_AND_POOL}| awk -F '/' '{ print $1}')
echo "POOL=${POOL}"
DISK=$(echo ${DISK_AND_POOL}| awk -F '/' '{ print $2}')
echo "DISK=${DISK}"
#
DEV_NAME=$( $rbd -c /etc/ceph/ceph.conf --keyring /etc/ceph/ceph.client.nova.keyring device map --pool ${POOL} ${DISK} --id nova 2>&1 | dos2unix)
echo "DEV_NAME=${DEV_NAME}"
fsck.ext4 -f -y ${DEV_NAME}p1
$rbd -c /etc/ceph/ceph.conf --keyring /etc/ceph/ceph.client.nova.keyring device unmap ${DEV_NAME}
done
Mirantis-специфичное
Это куски документации переведенне и с комментариями (иногда)
Задать число реплик контроллеров
если нужно сэкономить ресурсы и пох на все
EDITOR=mcedit mgtctl -n mosk edit cluster child-cluster
helmReleases:
- name: ceph-controller
values:
rookOperatorPlacement:
nodeSelector:
node-type: storage-node-my-own-label
controllers:
cephController:
replicas: 1
cephMaintenance:
replicas: 1
cephRequest:
replicas: 1
cephStatus:
replicas: 1
Часть rookOperatorPlacement не относится к репликам
Задать фактор репликации по-умолчанию
Что бы после обновления он не откатился к дофолту, если был сменен руками установить size: 1
EDITOR=mcedit mgtctl -n mosk edit kaascephclusters ceph-child-cluster
apiVersion: kaas.mirantis.com/v1alpha1
kind: KaaSCephCluster
spec:
cephClusterSpec:
pools:
- default: true
deviceClass: ssd
name: kubernetes
replicated:
size: 1
role: kubernetes
- default: false
Замена сломанного диска (OSD)
Посмотреть метаданные (откуда достать ноду и имя устройства) можно так:
ceph osd metadata | jq '.'
[
{
"id": 0,
"arch": "x86_64",
"back_addr": "[v2:10.80.4.32:6804/3947867361,v1:10.80.4.32:6805/3947867361]",
"back_iface": "",
"bluefs": "1",
"bluefs_dedicated_db": "0",
"bluefs_dedicated_wal": "0",
"bluefs_single_shared_device": "1",
"bluestore_bdev_access_mode": "blk",
"bluestore_bdev_block_size": "4096",
"bluestore_bdev_dev_node": "/dev/dm-0",
"bluestore_bdev_devices": "vdb",
"bluestore_bdev_driver": "KernelDevice",
"bluestore_bdev_optimal_io_size": "0",
"bluestore_bdev_partition_path": "/dev/dm-0",
"bluestore_bdev_rotational": "1",
"bluestore_bdev_size": "375805444096",
"bluestore_bdev_support_discard": "1",
"bluestore_bdev_type": "hdd",
"ceph_release": "quincy",
"ceph_version": "ceph version 17.2.6 (d7ff0d10654d2280e08f1ab989c7cdf3064446a5) quincy (stable)",
"ceph_version_short": "17.2.6",
"ceph_version_when_created": "ceph version 16.2.11 (3cf40e2dca667f68c6ce3ff5cd94f01e711af894) pacific (stable)",
"container_hostname": "storage-2",
"container_image": "127.0.0.1:44301/mirantis/ceph:v17.2.6-cve-1",
"cpu": "Intel(R) Xeon(R) CPU X5670 @ 2.93GHz",
"created_at": "2023-05-31T11:47:32.773612Z",
"default_device_class": "hdd",
"device_ids": "",
"device_paths": "vdb=/dev/disk/by-path/pci-0000:00:0c.1",
"devices": "vdb",
"distro": "centos",
"distro_description": "CentOS Stream 9",
"distro_version": "9",
"front_addr": "[v2:10.80.5.32:6802/3946867361,v1:10.80.5.32:6803/3946867361]",
"front_iface": "",
"hb_back_addr": "[v2:10.80.4.32:6802/3946867361,v1:10.80.4.32:6803/3946867361]",
"hb_front_addr": "[v2:10.80.5.32:6804/3946867361,v1:10.80.5.32:6805/3946867361]",
"hostname": "storage-2",
"journal_rotational": "1",
"kernel_description": "#167-Ubuntu SMP Mon May 15 17:35:05 UTC 2023",
"kernel_version": "5.4.0-150-generic",
"mem_swap_kb": "0",
"mem_total_kb": "16393460",
"network_numa_unknown_ifaces": "back_iface,front_iface",
"objectstore_numa_unknown_devices": "vdb",
"os": "Linux",
"osd_data": "/var/lib/ceph/osd/ceph-0",
"osd_objectstore": "bluestore",
"osdspec_affinity": "",
"pod_name": "rook-ceph-osd-0-645c84b-4fb4b",
"pod_namespace": "rook-ceph",
"rotational": "1"
},
Найти сломанные OSD
ceph osd tree down
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 111.66374 root default -23 18.52654 host kaas-node-650411e5-eb92-4438-bb95-22aeb2bb79f4 20 hdd 3.80629 osd.20 down 0 1.00000 21 hdd 3.63799 osd.21 down 0 1.00000 22 hdd 3.80629 osd.22 down 0 1.00000 30 hdd 3.63799 osd.30 down 0 1.00000 31 hdd 3.63799 osd.31 down 0 1.00000
Для того что бы найти ноды (хостнейм известен - kaas-node-650411e5-eb92-4438-bb95-22aeb2bb79f4 )
но это нужно как-то сопоставить с именем ноды в объекте kaascephcluster
Это можно сделать через объект machine
kubectl get ma -A -o wide | grep mos-ceph-osd004
eu-production-mos mos-ceph-osd004 true Ready kaas-node-650411e5-eb92-4438-bb95-22aeb2bb79f4 83 false
Тут сопоставление ноды kaas-node-650411e5-eb92-4438-bb95-22aeb2bb79f4 и записи в объекте - mos-ceph-osd004
Например вывод для OSD 22 - тут видно ноду "hostname": "kaas-node-650411e5-eb92-4438-bb95-22aeb2bb79f4"
но для того что бы удалить из кластера эту OSD нужно найти сопоставление с mos-ceph-osd004
ceph osd metadata 22
{
"id": 22,
"arch": "x86_64",
"back_addr": "[v2:192.168.12.20:6805/322056793,v1:192.168.12.20:6808/322056793]",
"back_iface": "",
"bluefs": "1",
"bluefs_db_access_mode": "blk",
"bluefs_db_block_size": "4096",
"bluefs_db_dev_node": "/dev/dm-2",
"bluefs_db_devices": "sdg",
"bluefs_db_driver": "KernelDevice",
"bluefs_db_optimal_io_size": "0",
"bluefs_db_partition_path": "/dev/dm-2",
"bluefs_db_rotational": "0",
"bluefs_db_size": "184318689280",
"bluefs_db_support_discard": "1",
"bluefs_db_type": "ssd",
"bluefs_dedicated_db": "1",
"bluefs_dedicated_wal": "0",
"bluefs_single_shared_device": "0",
"bluestore_bdev_access_mode": "blk",
"bluestore_bdev_block_size": "4096",
"bluestore_bdev_dev_node": "/dev/dm-1",
"bluestore_bdev_devices": "sdh",
"bluestore_bdev_driver": "KernelDevice",
"bluestore_bdev_optimal_io_size": "0",
"bluestore_bdev_partition_path": "/dev/dm-1",
"bluestore_bdev_rotational": "1",
"bluestore_bdev_size": "4000783007744",
"bluestore_bdev_support_discard": "0",
"bluestore_bdev_type": "hdd",
"ceph_release": "quincy",
"ceph_version": "ceph version 17.2.6 (d7ff0d10654d2280e08f1ab989c7cdf3064446a5) quincy (stable)",
"ceph_version_short": "17.2.6",
"ceph_version_when_created": "",
"container_hostname": "kaas-node-650411e5-eb92-4438-bb95-22aeb2bb79f4",
"container_image": "127.0.0.1:44301/mirantis/ceph:v17.2.6-rel-5",
"cpu": "Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz",
"created_at": "",
"default_device_class": "hdd",
"device_ids": "sdg=WDC_WDS100T2B0A_200231440911,sdh=WDC_WD4001FAEX-0_WD-WCC131110366",
"device_paths": "sdg=/dev/disk/by-path/pci-0000:00:1f.2-ata-3,sdh=/dev/disk/by-path/pci-0000:00:1f.2-ata-4",
"devices": "sdg,sdh",
"distro": "centos",
"distro_description": "CentOS Stream 9",
"distro_version": "9",
"front_addr": "[v2:192.168.10.109:6808/322056793,v1:192.168.10.109:6809/322056793]",
"front_iface": "",
"hb_back_addr": "[v2:192.168.12.20:6809/322056793,v1:192.168.12.20:6810/322056793]",
"hb_front_addr": "[v2:192.168.10.109:6810/322056793,v1:192.168.10.109:6811/322056793]",
"hostname": "kaas-node-650411e5-eb92-4438-bb95-22aeb2bb79f4",
"journal_rotational": "0",
"kernel_description": "#167~18.04.1-Ubuntu SMP Wed May 24 00:51:42 UTC 2023",
"kernel_version": "5.4.0-150-generic",
"mem_swap_kb": "0",
"mem_total_kb": "65746728",
"network_numa_unknown_ifaces": "back_iface,front_iface",
"objectstore_numa_unknown_devices": "sdg,sdh",
"os": "Linux",
"osd_data": "/var/lib/ceph/osd/ceph-22",
"osd_objectstore": "bluestore",
"osdspec_affinity": "",
"pod_name": "rook-ceph-osd-22-68f7c8cd88-gm6cv",
"pod_namespace": "rook-ceph",
"rotational": "1"
}
Что из этого можно понять
- bluefs_db_devices": "sdg" - это устройство с метадатой
- bluefs_db_dev_node": "/dev/dm-2 - это блочное устройство, тут нельзя указать партицию по-тому используется LVM
- bluestore_bdev_devices": "sdh", - устройство с данными
https://docs.mirantis.com/container-cloud/latest/operations-guide/operate-managed/operate-managed-bm/manage-ceph/ceph-lcm/replace-failed-node.html
dropFromClusterOnly - если не очищается поломанный диск
фулл мапинг можно посмотреть на чайлде вот так: kubectl -n ceph-lcm-mirantis get miracephlog -o yaml
При удалении OSD при удалении всех (если упали все OSD на ноде) нужно удалять ВМЕСТЕ С НОДОЙ
By-ID или /dev/sdX ? (miracephlog)
Бывыет так что диск в kaascephcluster добавлен не по букве /dev/sdX а например /dev/disk/by-id/WDC_WD4003FZEX-0_WD-WMC5D0D9DMEY и тогда сложно сопоставить вывалившийся диск по dmesg с kaascephcluster . вот так моджно сопоставить зная девайс и ноду:
kubectl -n ceph-lcm-mirantis get miracephlog -o yaml
тут будет нечто:
kaas-node-12c448d3-ca7e-4817-9d25-fe21aa441d4c:
...
osd.17:
blockPartition: /dev/dm-3
deviceByID: WDC_WD4003FZEX-0_WD-WMC5D0D9DMEY
deviceByPath: /dev/disk/by-path/pci-0000:00:11.4-ata-3
deviceClass: hdd
deviceName: sdc
in: true
metaPartition: /dev/sdg3
metadataDeviceByID: Samsung_SSD_850_S2RFNX0H512086E
metadataDeviceByPath: /dev/disk/by-path/pci-0000:00:1f.2-ata-3
metadataDeviceClass: ssd
metadataDeviceName: sdg
osdUUID: 6d26c9e4-35c1-43e1-822e-d5aef566b764
up: true
...
Очистка алерта от недавно скрашевшихся OSDs
поархивировать варнинги о крашнутых osd - раньше они были, сеф их зафиксировал, но сейчас они работают нормально,
однако ceph -s показывает ворнинг, решение ниже:
ceph crash archive-all
Блокировки в CEPH
В rbd есть понятие блокировки - и список блокировок можно посмотреть командой:
rbd -p volumes-ssd lock list 66b35cdf-845e-47a4-badd-c03e1902fb44
There is 1 exclusive lock on this image. Locker ID Address client.53989246 auto 140537302618384 10.80.3.54:0/2974634118
- volumes-ssd - это имя пула
- 66b35cdf-845e-47a4-badd-c03e1902fb44 - это ID который можно посмотреть в openstack server show
- 10.80.3.54 - это адрес compute
При этом иногда при краше компьюты локи остаются и новая компьюта после миграции ВМ не может подключить диск Пример ошибки (хотя это не единственный вариант ошибки):
{'code': 500, 'created': '2024-02-15T17:32:25Z', 'message': 'ReadOnlyImage', 'details': 'Traceback (most recent call last):\n
File "/var/lib/openstack/lib/python3.8/site-packages/nova/compute/manager.py", line 207, in decorated_function\n
return function(self, context, *args, **kwargs)\n
File "/var/lib/openstack/lib/python3.8/site-packages/nova/compute/manager.py", line 5981, in finish_resize\n
self._delete_allocation_after_move(\n File "/var/lib/openstack/lib/python3.8/site-packages/oslo_utils/excutils.py", line 220, in __exit__\n
self.force_reraise()\n File "/var/lib/openstack/lib/python3.8/site-packages/oslo_utils/excutils.py", line 196, in force_reraise\n
six.reraise(self.type_, self.value, self.tb)\n File "/var/lib/openstack/lib/python3.8/site-packages/six.py", line 703, in reraise\n
raise value\n File "/var/lib/openstack/lib/python3.8/site-packages/nova/compute/manager.py", line 5963, in finish_resize\n
self._finish_resize_helper(context, disk_info, image, instance,\n
File "/var/lib/openstack/lib/python3.8/site-packages/nova/compute/manager.py", line 5996, in _finish_resize_helper\n
network_info = self._finish_resize(context, instance, migration,\n
File "/var/lib/openstack/lib/python3.8/site-packages/nova/compute/manager.py", line 5884, in _finish_resize\n
self._set_instance_info(instance, old_flavor)\n
File "/var/lib/openstack/lib/python3.8/site-packages/oslo_utils/excutils.py", line 220, in __exit__\n
self.force_reraise()\n File "/var/lib/openstack/lib/python3.8/site-packages/oslo_utils/excutils.py", line 196, in force_reraise\n
six.reraise(self.type_, self.value, self.tb)\n
File "/var/lib/openstack/lib/python3.8/site-packages/six.py", line 703, in reraise\n
raise value\n File "/var/lib/openstack/lib/python3.8/site-packages/nova/compute/manager.py", line 5867, in _finish_resize\n
self.driver.finish_migration(context, migration, instance,\n
File "/var/lib/openstack/lib/python3.8/site-packages/nova/virt/libvirt/driver.py",line 10629, in finish_migration\n
self._create_image(context, instance, block_disk_info[\'mapping\'],\n
File "/var/lib/openstack/lib/python3.8/site-packages/nova/virt/libvirt/driver.py", line 4200, in _create_image\n
created_disks = self._create_and_inject_local_root(\n
File "/var/lib/openstack/lib/python3.8/site-packages/nova/virt/libvirt/driver.py", line 4298, in _create_and_inject_local_root\n
backend.create_snap(libvirt_utils.RESIZE_SNAPSHOT_NAME)\n
File "/var/lib/openstack/lib/python3.8/site-packages/nova/virt/libvirt/imagebackend.py", line 1122, in create_snap\n
return self.driver.create_snap(self.rbd_name, name)\n
File "/var/lib/openstack/lib/python3.8/site-packages/nova/storage/rbd_utils.py", line 443, in create_snap\n
vol.create_snap(name)\n
File "/var/lib/openstack/lib/python3.8/site-packages/eventlet/tpool.py", line 190, in doit\n
result = proxy_call(self._autowrap, f, *args, **kwargs)\n
File "/var/lib/openstack/lib/python3.8/site-packages/eventlet/tpool.py", line 148, in proxy_call\n
rv = execute(f, *args, **kwargs)\n
File "/var/lib/openstack/lib/python3.8/site-packages/eventlet/tpool.py", line 129, in execute\n
six.reraise(c, e, tb)\n
File "/var/lib/openstack/lib/python3.8/site-packages/six.py", line 703, in reraise\n
raise value\n
File "/var/lib/openstack/lib/python3.8/site-packages/eventlet/tpool.py", line 83, in tworker\n
rv = meth(*args, **kwargs)\n File "rbd.pyx", line 2770, in rbd.requires_not_closed.wrapper\n
File "rbd.pyx", line 3514, in rbd.Image.create_snap\n
rbd.ReadOnlyImage: [errno 30] RBD read-only image (error creating snapshot b\'nova-resize\' from b\'2786c568-5fda-496d-a267-551e2ce3acc5_disk\')\n'}
Например (с лабы):
rbd -p volumes-nvme lock list e0fa47b1-6831-40fa-b626-f4eea84940c2
There is 1 exclusive lock on this image. Locker ID Address client.46717700 auto 139629252590528 10.187.84.142:0/3063592878
Посмотреть кто использует диск можно так: Пример кастомера:
rbd status volumes-nvme/e0fa47b1-6831-40fa-b626-f4eea84940c2
Watchers:
watcher=10.187.84.142:0/3063592878 client.46717700 cookie=139629252590528
watcher=10.187.84.171:0/2753880368 client.402631226 cookie=140045730189824
пример с лабы
rbd status volumes-ssd/66b35cdf-845e-47a4-badd-c03e1902fb44
Watchers: watcher=10.80.3.54:0/2974634118 client.53989246 cookie=140537302618384
Тут у кастомера 2 ноды - старая (мертвая), с которой ВМ перенесли на новую
В случае лабы только одна актуальная компьют-нода
У кастомера - проверяем что нода (10.187.84.142) не работает :
kubectl -n openstack get nodes -o wide |grep kaas-node-a0d08ca9-14eb-42dd-9908-9ecde7cb9d7c kaas-node-a0d08ca9-14eb-42dd-9908-9ecde7cb9d7c NotReady <none> 566d v1.24.6-mirantis-1 10.187.84.142 <none> Ubuntu 20.04.6 LTS 5.4.0-109-generic
И можно удалить (заблокировать) watcher 10.187.84.142:0/3063592878
ceph osd blacklist add 10.187.84.142:0/3063592878 │ blocklisting 10.187.84.142:0/3063592878 until 2024-02-01T11:12:42.942069+0000 (3600 sec)
- 10.187.84.142:0/3063592878 - адрес и идентификатор который нужно заблокировать
- блокировка временная
- После чего диск может использовать новая компьюта
rbd -p volumes-nvme lock list e0fa47b1-6831-40fa-b626-f4eea84940c2 There is 1 exclusive lock on this image. Locker ID Address client.402631226 auto 140045730189824 10.187.84.171:0/2753880368
Или можно удалить сразу lock (пример не с лабы, по-том такие странные пулы)
rbd lock remove --pool c7000-pxmx1-am7 vm-201-disk-0 "auto 140450841490944" client.70464
"Неудаляемый" image в glance
Столкнулся с проблемой - невозможно удалить образ:
openstack image delete Ubuntu-22.04-root-password-set
Failed to delete image with name or ID 'Ubuntu-22.04-root-password-set': HttpException: 500: Server Error for url: https://glance.it.just.works/v2/images/f9b77787-49f0-45cc-9758-11319ae47de8, The server has either erred or is incapable of performing the requested operation.: 500 Internal Server Error Failed to delete 1 of 1 images.
Коротко - проблема в том, что образ был создан из запущенной ВМи - и под капотом там используются снапшоты, когда из этого образа были созданы еще ВМки
Тем не менее сообщения в логах не информативны:
2024-02-05 08:40:28.847 12 WARNING glance.api.v2.images [req-4c9facef-a616-4040-b584-02bd43f0878c 71add96277134f4a97127acc2431cddc fd65e819389849d0b8b50ff5b157b429 - default default] After upload to backend, deletion of staged image data has failed because it cannot be found at /tmp/staging//f9b77787-49f0-45cc-9758-11319ae47de8 2024-02-05 08:40:29.101 12 ERROR glance.common.wsgi [req-4c9facef-a616-4040-b584-02bd43f0878c 71add96277134f4a97127acc2431cddc fd65e819389849d0b8b50ff5b157b429 - default default] Caught error: [errno 1] RBD permission error (error listing children.): rbd.PermissionError: [errno 1] RBD permission error (error listing children.)
Для того что бы (для начала) получить более информативное сообщение нужно дать для glance дополнительные права - в терминах МОСК это делается через kaascephcluster:
kubectl -n mosk get kaascephcluster ceph-child-cluster -o yaml | yq .spec.cephClusterSpec.clients
- caps:
mon: allow r
osd: allow class-read object_prefix rbd_children, allow rwx pool=images-ssd, allow rx pool=volumes-ssd, allow rwx pool=vms-ssd
name: glance
- caps:
mds: allow rw
mgr: allow rw
mon: allow r
name: cephfs-client
тут была добавлена секция для glance
После этого удалить образ все так же нельзя, но есть более-менее информативное сообщение для поиска проблемы:
2024-02-05 10:05:30.400 11 WARNING glance_store._drivers.rbd [req-585db1f1-76a7-478b-adce-adb2dfaa78a3 71add96277134f4a97127acc2431cddc fd65e819389849d0b8b50ff5b157b429 - default default] Snap Operating Exception RBD image is busy (Image snapshot has external references.) Snapshot is in use.: rbd.ImageBusy: RBD image is busy (Image snapshot has external references.)
Далее можно посмотреть зависимые образы:
rbd children images-ssd/f9b77787-49f0-45cc-9758-11319ae47de8
vms-ssd/35ed30a8-5e64-4b69-a146-3264496ad6e6_disk vms-ssd/bb679dfb-44b6-4e10-b4c5-afb0715176b3_disk vms-ssd/dc369981-978d-4fa5-801b-e202ba101d19_disk
Тут видно что это диски виртуалок, это видно из имени пула vms-ssd , и ID виртуалок тоже известны - можно удалять ВМки и освобождать блокировку После удаления виртуалок, можно убедиться что зависимостей не осталось
rbd children images-ssd/f9b77787-49f0-45cc-9758-11319ae47de8
Финальный шаг - удаление “проблемного” образа
openstack image delete f9b77787-49f0-45cc-9758-11319ae47de8
Additional Information
После создания OSD Ceph запустит операцию восстановления и начнет перемещать группы размещения из вторичных OSD в новый OSD.
Опять же, операция восстановления займет некоторое время в зависимости от размера вашего кластера, после ее завершения ваш кластер Ceph будет HEALTH_OK.
Когда новый хост или диск добавляется в кластер Ceph, CRUSH запускает операцию перебалансировки, в рамках которой он перемещает данные с существующих хостов/дисков на новый хост/диск.
Перебалансировка выполняется для того, чтобы все диски использовались одинаково, что повышает производительность кластера и поддерживает его работоспособность.