Глава 10. Ещё о Ceph
В данной главе мы обсудим следующие рецепты:
-
Эталонное тестирование кластера Ceph
-
Базовый уровень производительности дисков
-
Базовый уровень производительности сетевой среды
-
Показатели Ceph RADOS
-
RADOS load-gen
-
Эталонное тестирование блочного устройства Ceph
-
Эталонное тестирование Ceph RBD с применением FIO
-
Сокет администратора Ceph
-
Применение команды ceph tell
-
Ceph REST API
-
Профилирование памяти Ceph
-
Развёртывание Ceph с применением Ansible
-
Инструментарий ceph-objectstore
Содержание
- 10. Ещё о Ceph
- Введение
- Эталонное тестирование кластера Ceph
- Базовый уровень производительности дисков
- Базовый уровень производительности сетевой среды
- Показатели Ceph RADOS
- RADOS load-gen
- Эталонное тестирование блочного устройства Ceph
- Эталонное тестирование Ceph RBD с применением FIO
- Сокет администратора Ceph
- Применение команды ceph tell
- Ceph REST API
- Профилирование памяти Ceph
- Развёртывание Ceph с применением Ansible
- Инструментарий ceph-objectstore
В предыдущих главах мы рассматривали различные способы развёртывания, предоставления и администрирования Ceph. В этой главе мы изучим эталонное тестирование имеющегося кластера Ceph, что является необходимым для выполнения этапом перед перемещением решения в промышленное применение. Мы также обсудим расширенные методы администрирования и обнаружения неисправностей Ceph с применением разъёма администратора, REST API и инструментария ceph-objectstore. Наконец мы изучим профилирование памяти Ceph, а также развёртывание Ceph с применением Ansible, который является очень эффективным способом развёртывания Ceph.
Настоятельно рекомендуется перед размещением под рабочие нагрузки промышленного применения выполнить эталонное тестирование вашего кластера Ceph. Эталонное тестирование даст вам приблизительные результаты того, что ваш кластер будет предоставлять в процессе рабочих нагрузок по чтению, записи, латентности и т.д.
Перед выполнением действительного эталонного тестирования неплохо установить отправные точки для ожидаемой максимальной производительности измерив производительность присоединяемого к кластерному узлу оборудования, например, дисков и элементов сетевой среды.
Тестирование базового уровня производительности дисков выполняется в два этапа. Вначале мы измеряем производительность отдельного диска, а после этого мы измерим производительность всех наших дисков, подключённых к одному узлу OSD при их работе одновременно.
Замечание | |
---|---|
Для получения реалистичных результатов я выполняю эталонное тестирование описанное в данном рецепте не на самом развёрнутом кластере, а на физических аппаратных средствах. Мы также можем выполнить это тесты на вашем кластере Ceph, размещающемся на виртуальной машине, но мы можем не получить привлекательных результатов. |
Для получения производительности дисковых чтения и записи мы воспользуемся командой
dd
с oflag
установленным в значение
direct
для достижения обхода дискового кэша с целью получения реалистичных результатов.
-
Прекратите кэширование.
# echo 3 > /proc/sys/vm/drop_caches
-
Используйте
dd
для записи файла с именемdeleteme
и размером10ГБ
заполненным нулями/dev/zero
в качестве входного файлаif
в каталог, в который смонтирован OSD Ceph, т.е./var/lib/ceph/osd/ceph-0/
.# dd if=/dev/zero of=/var/lib/ceph/osd/ceph-0/deleteme bs=10G count=1 oflag=direct
В идеале вы должны повторить шаги 1 и 2 несколько раз и получить среднее значение. В нашем случае среднее значение для операций записи приближается к 319 МБ/с, как показано на следующем экранном снимке:
[root@ceph-node1 ~]# dd if=/dev/zero of=/var/lib/ceph/osd/ceph-0/deleteme bs=10G count=1 oflag=direct 0+1 records in 0+1 records out 2147479552 bytes (2.1 GB) copied, 6.66535 s, 322 MB/s [root@ceph-node1 ~]# [root@ceph-node1 ~]# dd if=/dev/zero of=/var/lib/ceph/osd/ceph-0/deleteme bs=10G count=1 oflag=direct 0+1 records in 0+1 records out 2147479552 bytes (2.1 GB) copied, 7.09217 s, 303 MB/s [root@ceph-node1 ~]# [root@ceph-node1 ~]# dd if=/dev/zero of4var/lib/ceph/osd/ceph-0/deleteme bs=10G count=1 oflag=direct 0+1 records in 0+1 records out 2147479552 bytes (2.1 GB) copied, 6.45077 s, 333 MB/s [root@ceph-node1 ~]#
В качестве следующего шага мы выполним dd
на всех ваших дисках OSD используемых Ceph на этом узле, ceph-node1
, для получения суммарной
производительности дисковой записи предоставляемой отдельным узлом.
-
Получите общее число дисков, используемых на вашем OSD Ceph, в моём случае это 25 дисков:
# mount | grep -i osd | wc -l
-
Прекратите кэширование.
# echo 3 > /proc/sys/vm/drop_caches
-
Следующая команда выполнит команду
dd
на всех дисках OSD Ceph:# for i in `mount | grep osd | awk '{print $3}'`; do (dd if=/dev/zero of=$i/deleteme bs=10G count=1 oflag=direct &) ; done
Для получения средней суммарной производительности записи возьмите среднее значение от всех скоростей записи. В моём случае среднее значение достигло 60 МБ/с.
Для получения производительности дискового чтения отдельного диска мы снова воспользуемся командой
dd
.
-
Прекратите кэширование.
# echo 3 > /proc/sys/vm/drop_caches
-
Используйте
dd
для записи файла с именемdeleteme
, который мы создале в процессе тестирования записи. Мы будем читать наш файлdeleteme
в/dev/null
сiflag
установленным в значениеdirect
:# dd if=/var/lib/ceph/osd/ceph-0/deleteme of=/dev/null bs=10G count=1 iflag=direct
В идеале вы должны повторить шаги 1 и 2 несколько раз и получить среднее значение. В нашем случае среднее значение для операций записи приближается к 178 МБ/с, как показано на следующем экранном снимке:
[root@ceph-node1 ~]# echo 3 > /proc/sys/vm/drop_caches [root@ceph-node1 ~]# [root@ceph-node1 ~]# dd if=/var/lib/ceph/osd/ceph-0/deleteme of=/dev/null bs=10G count=1 iflag=direct 0+1 records in 0+1 records out 2147479552 bytes (2.1 GB) copied, 12.0557 s, 178 MB/s [root@ceph-node1 ~]# [root@ceph-node1 ~]# dd if=/var/lib/ceph/osd/ceph-O/deleteme of=/dev/null bs=10G count=1 iflag=direct 0+1 records in 0+1 records out 2147479552 bytes (2.1 GB) copied, 12.0452 s, 178 MB/s [root@ceph-node1 ~]# dd if=/var/lib/ceph/osd/ceph-O/deleteme of=/dev/null bs=10G count=1 iflag=direct 0+1 records in 0+1 records out 2147479552 bytes (2.1 GB) copied, 12.0408 s, 178 MB/s [root@ceph-node1 ~]# [root@ceph-node1 ~]#
Аналогично производительности отдельного диска на чтение мы используем dd
для получения суммарной производительности на чтение множества дисков.
-
Получите общее число дисков, используемых на вашем OSD Ceph, в моём случае это 25 дисков:
# mount | grep -i osd | wc -l
-
Прекратите кэширование.
# echo 3 > /proc/sys/vm/drop_caches
-
Следующая команда выполнит команду
dd
на всех ваших дисках Ceph OSD:# for i in `mount | grep osd | awk '{print $3}'`; do (dd if=$i/deleteme of=/dev/null bs=10G count=1 iflag=direct &); done
Для получения суммарной производительности дискового чтения возьмите среднее всех ваших скоростей чтения. В моём случае среднее значение приближается к 123 МБ/с.
На основании выполненных нами тестов результаты выглядят следующим образом. Эти результаты очень сильно изменяются от среды к среде; используемоё вами оборудование и число дисков в вашем узле OSD могут иметь большое значение.
Операция | на диск | агрегированная |
---|---|---|
чтение |
178МБ/с |
123МБ/с |
запсиь |
319МБ/с |
60МБ/с |
В этом разделе мы выполним тесты для исследования базовой производительности сети между узлами OSD Ceph. Для этого мы воспользуемся
утилитой iperf
. Убедитесь что пакет iperf
установлен на
ваших узлах. iperf
является простым средством тестирования полосы пропускания сети точка- точка,
которое работает в модели клиент- сервер.
Для запуска эталонного тестирования сети выполните iperf
с параметром сервера на своём первом
узле, а с параметром клиента на своём втором узле.
-
На
Ceph-node1
выполнитеiperf
с-s
для вашего сервера и-p
для прослушивания определённого порта:# iperf -s -p 6900 [root@ceph-node1 ~]# iperf -s -p 6900 ----------------------------------------------------------- Server listening on TCP port 6900 TCP window size: 85.3 KByte (default) ----------------------------------------------------------- [ 4] local 10.100.1.201 port 6900 connected with 10.100.1.202 port 39630 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.0 sec 11.5 GBytes 9.87 Gbits/sec ^C[root@ceph-node1 ~]# [root@ceph-node1 ~]#
Замечание Вы можете опустить параметр
-p
если порт TCP5201
открыт или вы можете любой другой порт который открыт и не используется. -
На
Ceph-node2
выполнитеiperf
с параметром клиента,-c
:# iperf -c ceph-node1 -p 6900 [root@ceph-node2 ~]# iperf -c ceph-node1 -p 6900 ----------------------------------------------------------- Client connecting to 10.100.1.201, TCP port 6900 TCP window size: 95.8 KByte (default) ----------------------------------------------------------- [ 3] local 10.100.1.202 port 39630 connected with 10.100.1.201 port 6900 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 11.5 GBytes 9.87 Gbits/sec [root@ceph-node2 ~]#
Замечание Вы можете также применить параметр
-p
в своей командеiperf
для определения числа параллельных соединений потоков создаваемых с вашим сервером. Это вернёт реалистичные результаты если у вас имеется техника связывания каналов, например, LACP.
Результаты показывают, что у нас есть привлекательное сетевое соединение с 9.8Gb/s между нашими узлами Ceph. Аналогично мы можем выполнять проверку пропускной способности сети для всех других узлов в вашем кластере Ceph. Полоса пропускания сетевой среды в реальности зависит от применяемой вами между узлами Ceph сетевой инфраструктуры.
-
Глава 8. Планирование промышленного применения и настройка производительности Ceph, в которой вы найдёте дополнительную информацию связанную с сетевой средой.
Ceph поставляется со встроенным инструментом эталонного тестирования, называемым RADOS bench, который может применяться для измерения производительности кластера Ceph на уровне пула. Инструмент RADOS bench поддерживает тестирование записи, последовательного чтения и случайного чтения, а также позволяет очищаться от временных данных эталонного тестирования, что очень аккуратно.
Давайте выполним некоторые тесты при помощи rados
bench:
-
Для выполнения 10 секундного теста записи в ваш пул
rbd
без очистки выполните следующую команду:# rados bench -p rbd 10 write --no-cleanup
После выполнения данной команды мы получим следующий снимок экрана:
[root@ceph-node1 ~]# rados bench -p rbd 10 write --no-cleanup Maintaining 16 concurrent writes of 4194304 bytes for up to 10 seconds or 0 objects Object prefix: benchmarkdata_ceph-node1_3124629 sec Cur ops started finished avg MB/s cur MB/s last lat avg lat 0 0 0 0 0 0 - 0 1 16 118 102 407.85 408 0.0584212 0.127569 2 16 207 191 381.895 356 0.20105 0.150813 3 16 279 263 350.581 288 0.141772 0.168736 4 16 351 335 334.921 288 0.57108 0.181988 5 16 420 404 323.13 276 0.0724497 0.19139 6 16 479 463 308.601 236 0.137025 0.194498 7 16 547 531 303.367 272 0.253194 0.206116 8 16 615 599 299.441 272 0.172813 0.208689 9 16 692 676 300.386 308 0.48298 0.209028 10 16 747 731 292.345 220 0.123282 0.211807 Total time run: 10.721111 Total writes made: 747 Write size: 4194304 Bandwidth (MB/sec): 278.702 Stddev Bandwidth: 102.44 Max bandwidth (MB/sec): 408 Min bandwidth (MB/sec): 0 Average Latency: 0.227756 Stddev Latency: 0.234691 Max latency: 1.5534 Min latency: 0.041106 [root@ceph-node1 ~]#
-
Аналогично, для выполнения 10 секундного теста чтения в вашем пуле
rbd
, выполните следующую команду:# rados bench -p rbd 10 seq [root@ceph-node1 ~]# rados bench -p rbd 10 seq sec Cur ops started finished avg MB/s cur MB/s last lat avg lat 0 0 0 0 0 0 - 0 1 16 247 231 923.573 924 0.181625 0.0620505 2 16 489 473 945.703 968 0.0366547 0.0645318 3 16 648 632 698.411 636 0.306308 0.0814809 Total time run: 4.223407 Total reads made: 747 Read size: 4194304 Bandwidth (MB/sec): 707.486 Average Latency: 0.0901875 Max latency: 1.03252 Min latency: 0.00977891 [root@ceph-node1 ~]#
Замечание В данном случае может оказаться интересным узнать почему тест чтения завершился через несколько секунд или почему он не выполнялся предписанные 10 секунд. Это обусловлено тем, что ваша скорость чтения быстрее скорости записи, и
rados bench
завершил чтение всех имеющихся данных, сгенерированных в процессе вашего теста записи. Однако подобное поведение во многом зависит от вашей инфраструктуры оборудования и программных средств. -
Аналогично выполните тестирование случайного чтения при помощи
rados bench
, исполнив следующую команду:# rados bench -p rbd 10 rand
Синтаксис для rados bench
таков:
# rados bench -p <pool_name> <seconds> <write|seq|rand> -b <block size> -t --no-cleanup
-
-p
или--pool
: определяет имя пула -
<seconds>
: время тестирования в секундах -
<write|seq|rand>
: тип тестирования, {а именно}: запись, последовательное чтение или случайное чтение -
-b
: для определения размера блока; по умолчанию он 4M -
-t
: число параллельных потоков; по умолчанию 16 -
--no-cleanup
: Ваши временные данные, которые записываются в указанный пул при помощиrados bench
не должны быть вычищены. Эти данные будут использованы для операций чтения когда они используются при последовательных чтениях ил случайных чтениях. Значение по умолчанию установлено в очистку.
Замечание | |
---|---|
Как было определено в последнем рецепте, я выполняю эти тесты на физическом кластере Ceph. Вы конечно можете выполнить эти команды на кластере Ceph созданном на виртуальных машинах, однако вы можете не получить удовлетворительных результатов в виртуальной среде. |
rados bench
является достаточно удобным инструментом для быстрого измерения сырой производительности
вашего кластера Ceph и вы можете творчески проектировать свои собственные тесты на основе профилей записи, чтения и случайного чтения.
Слегка похожий на rados bench
, rados load-gen
является другим интересным инструментом, предоставляемым Ceph, который работает сразу после вынимания из коробки. Как подсказывает его
название, инструмент rados load-gen
может применяться для генерации нагрузки и может оказаться
полезным при симуляции сценариев с высокой нагрузкой.
Давайте попытаемся создать некоторую нагрузку на наш кластер Ceph при помощи следующей команды:
# rados -p rbd load-gen \ --num-objects 50 \ --min-object-size 4M \ --max-object-size 4M \ --max-ops 16 \ --min-op-len 4M \ --max-op-len 4M \ --percent 5 \ --target-throughput 2000 \ --run-length 60
Синтаксис rados load-gen
таков:
# rados -p <pool-name> load-gen
-
--num-objects
: общее число объектов -
--min-object-size
: минимальный размер объекта в байтах -
--max-object-size
: максимальный размер объекта в байтах -
--min-ops
: минимальное число операций -
--max-ops
: максимальное число операций -
--min-op-len
: минимальная длина операции -
--max-op-len
: максимальная длина операции -
--max-backlog
: максимум незавершённых заданий (в МБ) -
--percent
: процент операций чтения -
--target-throughput
: пропускная способность получателя (в МБ) -
--run-length
: общее время работы в секундах
Эта команда сгенерирует нагрузку на ваш кластер Ceph посредством записи 50 объектов в пул rbd
.
Длина каждого из этих объектов и операций составит в размере 4M с 5% чтения и временем тестирования 60 секунд.
[root@ceph-node1 ~]# rados -p rbd load-gen \ > --num-objects 50 \ > --min-object-size 4M \ > --max-object-size 4M \ > --max-ops 16 \ > --min-op-len 4M \ > --max-op-len 4M \ > --percent 5 \ > --target-throughput 2000 \ > --run-length 60 run length 60 seconds preparing 50 objects load-gen will run 60 seconds 1: throughput=0MB/sec pending data=0 READ : oid=obj-xtuVtifS5zQ55da off=0 len=4194304 READ : oid=obj-0NvPNB07Lz1rTra off=0 len=4194304 WRITE : oid=obj-UeV2NunBsTSrYUw off=0 len=4194304 op 17 completed, throughput=4MB/sec READ : oid=obj-fL1p0c_7CgEtjlk off=0 len=4194304 op 18 completed, throughput=8MB/sec
Вывод был усечён для краткости мотивации. Когда команда load-gen
завершится, она вычистит за собой
все объекты, которые она создавала для тестирования и выведет рабочую пропускную способность.
op 5519 completed, throughput=373MB/sec waiting for all operations to complete cleaning up objects op 5522 completed, throughput=367MB/sec op 5521 completed, throughput=367MB/sec [root@ceph-node1 ~]#
Также вы можете наблюдать за состоянием вашего кластера на предмет скорости/ операций чтения и записи с помощью команды
watch ceph -s
, в то время, пока будет работать rados
load-gen
, просто чтобы смотреть что происходит.
Описанные в последнем рецепте инструменты rados bench
и rados
load-gen
применяются для эталонного тестирования пула вашего кластера Ceph. В данном рецепте мы сосредоточимся на
эталонном тестировании блочного устройства Ceph пи помощи инструмента rbd bench-write
.
Интерфейс командной строки ceph rbd
предоставляет параметр, называемый
bench-write
, который является инструментом для выполнения операций эталонного тестирования в
ваше блочное устройство RADOS Ceph.
Чтобы выполнить эталонное тестирование блочного устройства Ceph, нам необходимо создать некое блочное устройство и отобразить на ваш узел клиента Ceph:
-
Создайте блочное устройство с именем
block-device1
и размером 1ГБ, а потом отобразите его:# rbd create block-device1 --size 10240 # rbd info --image block-device1 # rbd map block-device1 # rbd showmapped [root@ceph-client1 ~]# rbd create block-device1 --size 10240 [root@ceph-client1 ~]# rbd info --image block-device1 rbd image 'block-device1': size 10240 MB in 2560 objects order 22 (4096 kB objects) block_name_prefix: rb.0.4cbacc.238e1f29 format: 1 [root@ceph-client1 ~]# rbd map block-device1 /dev/rbd0 [root@ceph-client1 ~]# rbd showmapped id pool image snap device 0 rbd block-device1 - /dev/rbd0 [root@ceph-client1 ~]#
-
Создайте файловую систему на вашем блочном устройстве и смонтируйте её.
# mkfs.xfs /dev/rbd0 # mkdir -p /mnt/ceph-block-device1 # mount /dev/rbd0 /mnt/ceph-block-device1 # df -h /mnt/ceph-block-device1 [root@ceph-client1 ~]# mkfs.xfs /dev/rbd0 log stripe unit (4194304 bytes) is too large (maximum is 256KiB) log stripe unit adjusted to 32KiB meta-data=/dev/rbd0 isize=256 agcount=17, agsize=162816 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=2621440, imaxpct.25 = sunit=1024 swidth=1024 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=8 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@ceph-client1 ~]# mkdir -p /mnt/ceph-block-device1 [root@ceph-client1 ~]# mount /dev/rbd0 /mnt/ceph-block-device1 [root@ceph-client1 ~]# df -h /mnt/ceph-block-device1 Filesystem Size Used Avail Use% Mounted on /dev/rbd0 10G 33M 10G 1% /mnt/ceph-block-device1 [root@ceph-client1 ~]#
-
Для выполнения эталонного тестирования
block-device1
на запись общей длиной выполните следующую команду:# rbd bench-write block-device1 --io-total 5368709200 [root@ceph-client1 ~]# rbd bench-write block-device1 --io-total 5368709200 bench-write io_size 4096 io_threads 16 bytes 5368709200 pattern seq SEC OPS OPS/SEC BYTES/SEC 1 67285 67304.27 275678272.46 2 145469 72743.93 297959122.08 3 224701 74906.90 306818647.61 4 301802 75427.40 308950632.76 5 372142 74432.24 304874445.83 6 444010 75344.90 308612698.37 7 517287 74363.64 304593457.23 8 599236 74906.98 306818990.26 9 672587 74178.98 303837121.67 10 732910 72153.50 295540718.90 11 784764 68150.81 279145733.52 12 852044 66951.41 274232980.96 13 918326 63817.89 261398064.96 14 982399 61962.40 253797984.31 15 1047148 62847.78 257424494.92 16 1107514 64550.09 264397152.44 17 1163126 62216.51 254838831.07 18 1226368 61607.43 252344039.05 19 1286892 60898.32 249439520.77 elapsed: 51 ops: 1310721 ops/sec: 25221.56 bytes/sec: 103307522.97 [root@ceph-client1 ~]#
Как вы можете увидеть, вывод результатов
rbd bench-write
хорошо форматирован.
Синтаксис rbd bench-write
выглядит следующим образом:
# rbd bench-write <RBD image name>
-
--io-size
: размер записи в байтах; по умолчанию 4М -
--io-threads
: число потоков; по умолчанию 16 -
--io-total
: общее число байт для записи; по умолчанию 1024M -
--io-pattern <seq|rand>
: шаблон записи, по умолчанию установленseq
Для подстройки ваших размера блока, количества потоков и шаблонов ввода/ вывода вы можете применять с
rbd bench-write
различные параметры.
-
Глава 2. Работа с блочными устройствами Ceph подробно рассматривает создание блочного устройства Ceph.
FIO является аббревиатурой для Flexible I/O; это одно из самых популярных средств для создания рабочей нагрузки ввода/ вывода и эталонного тестирования. FIO имеет только что добавленную встроенную поддержку RBD. FIO является высоко настраиваемым и может применяться для эмуляции и эталонного тестирования практически любых видов нагрузок. В данном рецепте мы изучим то, как FIO может применяться для эталонного тестирования вашего RBD Ceph.
Чтобы выполнить эталонное тестирование блочного устройства Ceph, нам необходимо создать некое блочное устройство и отобразить на ваш узел клиента Ceph:
-
Установите пакет FIO на свой узел, на который вы отобразили свой образ RBD Ceph. В нашем случае это узел
ceph-client1
:# yum install -y fio
-
Так как FIO поддерживает RBD IOengine нам не нужно монтировать образ RBD как файловую систему. Для эталонного тестирования RBD нам нужно просто предоставить имя вашего образа RBD, пул и пользователя Ceph, которые будут использоваться для соединения с кластером Ceph. Создайте профиль FIO со следующим содержанием:
[write-4M] description="write test with block size of 4M" ioengine=rbd clientname=admin pool=rbd rbdname=block-device1 iodepth=32 runtime=120 rw=write bs=4M [root@ceph-client1 ~]# [root@ceph-client1 ~]# cat write.fio [write-4m] description="write test with block size of 4M" ioengine=rbd clientname=admin pool=rbd rbdname=block-device1 iodepth=32 runtime=120 rw=write bs=4M [root@ceph-client1 ~]#
-
Для запуска эталонного тестирования FIO, выполните команду FIO, предоставив ей в качестве аргумента файл профиля FIO:
# fio write.fio [root@ceph-client1 ~]# [root@ceph-client1 ~]# fio write.fio write-4M: (g=0) rw=write, bs=4M-4M/4M-4M/4M-4M, ioengine=rbd, iodepth=32 fio-2.2.8 Starting 1 process rbd engine: RBD version: 0.1.9 Jobs: 1 (f=0): [w(1)] [100.0% done] [0K8/107.7MB/0K8 /s] [0/26/0 iops] [eta 00m:00s] write-4m: (groupid=0, jobs=1): err= 0: pid=2146255: Wed Dec 9 00:54:40 2015 Description : ["write test with block size of 4M"] write: io=010240MB, bw=314736KB/s, ops=76, runt= 33316msec slat (usec) : min=129 , max=15181, avg=473.98, stdev=888.02 clat (msec) : min=102 , max=2949 avg=409.87, stdev=263.06 lat (msec) : min=102, max=2949 , avg=410.35 , stdev=263.06 clat percentiles (msec): | 1.00th=[ 131], 5.00th=[ 155], 10.00th=[ 180], 20.00th=[ 219], | 30.00th=[ 258], 40.00th=[ 310], 50.00th=[ 351], 60.00th=[ 392], | 70.00th=[ 441], 80.00th=[ 545], 90.00th=[ 693], 95.00th=[ 906], | 99.00th=[ 1369], 99.50th=[1762], 99.90th=[2409], 99.95th=[2474], | 99.99th=[ 2966] bw (KB /s): min=74908, max=568888, per=100.00%, avg=327349.43, stdev=99611.29 lat (msec) 250=27.70%, 500=47.19%, 750=17.42%, 1000=4.30%, 2000=3.20% lat (msec) : >=2000=0.20% cpu : usr=3.04%, sys=0.59%, ctx=268, majf=0, minf=52854 IO depth : 1=0.3%, 2=1.2%, 4=4.7%, 8=19.4%, 16=68.5%, 32=5.8%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=95.9%, 8=0.1%, 16=0.8%, 32=3.3%, 64=0.0%, >=64=0.0% issued : total=r=0/w=2560/d=0, short=r=0/w=0/d=0, dror=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=32 Run status group 0 (all jobs): WRITE: io=10240MB, aggrb=314736KB/s, minb=314736KB/s, maxb=314736K8/s, mint=33316msec, maxt=33316msec Disk stats (read/write): dm-0: ios=0/5, merge0/0, ticks=0/10, in_queue=10, util=0.01%, aggrios=56/5, aggrmerge=0/0, aggrticks=0/0, aggrin_gueue=0, aggrutil=0.00% mdl: ios=56/5, merge0/0, ticks=0/0, in_queue=0, util=0.00%, aggrios=3/13, aggrmerge=24/0, aggrticks=1/6, aggrinqueue=7, aggrutil=0.01% sdbi : ios=7/13, merge=49/0, ticks=2/6, in_queue=8, util=0.01% sdbj : ios=0/13, merge=0/0 , ticks=0/6, in_queue=6, util=0.01% ] [root@ceph-client1 ~]#
-
По завершению FIO сгенерирует массу полезной информации которую следует тщательно изучить. Однако, на первый взгляд вас может заинтересовать IOPS и агрегированная пропускная способность, которые выделены на предыдущем экранном снимке.
-
Глава 2. Работа с блочными устройствами Ceph подробно рассматривает создание блочного устройства Ceph.
-
Для получения дополнительной информации по FIO посетите https://github.com/axboe/fio.
Компоненты Ceph являются демонами и Сокетами домена UNIX (Unix domain socket, UDS, или IPC-сокетами сокетами межпроцессного взаимодействия). Ceph делает возможным для нас использовать эти сокеты для построения очередей демонов. Сокет администратора Ceph является мощным инструментом для получения и сборки настроек демона Ceph во время его выполнения. С применением этого инструмента изменение значений настроек демона становится намного проще даже в сравнении с изменением вашего файла настроек Ceph, который требует перезапуска демона.
Чтобы выполнить это, нам необходимо зарегистрироваться на нашем узле, выполняющем демонов Ceph и выполнить команды
ceph daemon
.
Существует два способа доступа к вашему сокету администратора:
-
Воспользовавшись именем вашего демона Ceph:
$ sudo ceph daemon {daemon-name} {option}
-
Используя абсолютный путь к файлу сокета; его местоположение по умолчанию такое:
/var/run/ceph
:$ sudo ceph daemon {absolute path to socket file} {option}
Теперь мы попробуем осуществить доступ к демону Ceph используя наш сокет администратора:
-
Вывести список всех доступных вашему сокету администратора команд для OSD:
# ceph daemon osd.0 help
-
Вывести список всех доступных вашему сокету администратора команд для MON:
# ceph daemon mon.ceph-node1 help
-
Проверить установки настроек OSD для
osd.0
.# ceph daemon osd.0 config show
-
Проверить установки настроек MON для
mon.ceph-node1
.# ceph daemon mon.ceph-node1 config show
Замечание Ваш демон администратора Ceph позволяет вам изменять установки настроек вашего демона во время его выполнения. Однако эти изменения временные. Для изменения настроек вашего демона на постоянно, измените ваш файл настроек Ceph.
-
Для получения текущего значения настроек для
osd
воспользуйтесь параметром_recover_max_chunk
для демонаosd.0
:# ceph daemon osd.0 config get osd_recovery_max_chunk
-
Чтобы изменить ваше значение
osd_recovery_max_chunk
дляosd.0
выполните:# ceph daemon osd.0 config set osd_recovery_max_chunk 1000000
[root@ceph-node1 ~]# ceph daemon osd.0 config get osd_recovery_max_chunk { "osd_recoverymax_chunk": "8388608" } [root@ceph-node1 ~]# [root@ceph-node1 ~]# ceph daemon osd.0 config set osd_recovery_max_chunk 1000000 { "success": "oscLrecoveryjnaxchunk = '1000000' " } [root@ceph-node1 ~]#
Другим эффективным способом изменения выполняющихся настроек для демона Ceph без дополнительных накладных расходов на регистрацию на
этом узле является применение команды ceph tell
:
Команда ceph tell
избавляет вас от затрат на регистрацию на том узле где выполняется ваш
демон. Эта команда проходит через узел монитора, поэтому вы можете выполнять её с любого узла в вашем кластере:
-
Чтобы изменить установки
osd_recovery_threads
наceph tell
выполните:ceph tell osd.0 injectargs '--osd_recovery_threads=2'
-
Чтобы изменить те же установки для всех OSD по всему вашему кластеру, выполните:
ceph tell osd.* injectargs '--osd_recovery_threads=2'
-
Также вы можете изменять множество установок в одной строке:
ceph tell osd.* injectargs '--osd_recovery_max_active=1 --osd_recovery_max_single_start=1 --osd_recovery_op_priority=50'
Синтаксис команды ceph tell
следующий:
ceph tell {daemon-type}.{id or *} injectargs --{config_setting_name} {value}
Ceph поставляется с мощным интерфейсом доступа REST API, который позволяет вам программно адимнистрировать ваш кластер. Он может работать как WSGI приложение или в качестве автономного сервера, по умолчанию прослушивая порт 5000. Он предоставляет функциональность аналогичного вида с предлагаемой инструментарием командной строки через интерфейс доступа HTTP. Команды передаются как HTTP запросы GET и PUT, а результат может возвращаться в форматах JSON, XML и текстовом. В этом рецепте я быстро покажу вам как установить Ceph REST API и как с ним взаимодействовать.
-
Создайте в своём кластере Ceph пользователя
client.restapi
с соответствующим доступом кmon
,osd
иmds
:# ceph auth get-or-create client.restapi mds 'allow' osd 'allow *' mon 'allow *' > /etc/ceph/ceph.client.restapi.keyring
-
Добавьте в свой файл
ceph.conf
следующий раздел:[client.restapi] log file = /var/log/ceph/ceph.restapi.log keyring = /etc/ceph/ceph.client.restapi.keyring
-
Выполните следующую команду для запуска
ceph-rest-api
в качестве отдельного веб-сервера в фоновом режиме:# nohup ceph-rest-api > /var/log/ceph-rest-api &> /var/log/cephrest-api-error.log &
Замечание Вы также можете выполнить
ceph-rest-api
без его продвижения, подавляя его в фоновый режим. -
ceph-rest-api
теперь должен прослушивать по адресу0.0.0.0:5000
; выполнитеcurl
чтобы запроситьceph-rest-api
жизнеспособность вашего кластера:# curl localhost:5000/api/v0.1/health
-
Аналогично проверьте состояние
osd
иmon
черезrest-api
Чтобы изменить установкиosd_recovery_threads
наceph tell
выполните:# curl localhost:5000/api/v0.1/osd/stat # curl localhost:5000/api/v0.1/mon/stat [root@ceph-node1 ~]# nohup ceph-rest-api > /var/log/ceph-rest-api &> /var/log/ceph-rest-api-error.log & [1] 3334321 [root@ceph-node1 ~]# [root@ceph-node1 ~]# curl localhost:5000/api/v0.1/health HEALTH_OK [root@ceph-node1 ~]# [root@ceph-node1 ~]# curl localhost:5000/api/v0.1/osd/stat osdmap e989: 9 olds: 9 up, 9 in [root@ceph-node1 ~]# [root@ceph-node1 ~]# curl localhost:5000/api/v0.1/mon/stat e5: 3 mons at {ceph-node1.192.168.1.101:6789/0,ceph-node2=192.168.1.102:6789/0,ceph-node3=192.168.1.103:6789 /0}, election epoch 3648, quorum 0,1,2 ceph-node1,ceph-node2,ceph-node3 [root@ceph-node1 ~]#
-
ceph-rest-api
поддерживает большинство команд CLI Ceph. Чтобы проверить перечень доступныхceph-rest-api
команд выполните:# curl localhost:5000/api/v0.1
Замечание Эта команда вернёт результаты в формате HTML; вам будет лучше зайти через свой веб- браузер на localhost:5000/api/v0.1 для выстраивания вашего HTML в читаемый вид.
Это базовая реализация ceph-rest-api
. Для применения её в промышленной реализации хорошей мыслью
будет развернуть её болеечем в одном экземпляре в виде приложения WSGI обёрнутого веб- сервером и с балансровкой нагрузки на входе.
ceph-rest-api
является масштабируемой, обладающей малым весом службой, которая делает возможным для
вас администрировать вашим кластером Ceph на уровне профессионала.
Профилирование памяти является процессом динамичного программного анализа с целью определения потребления программами оперативной памяти и выявления способов её оптимизации. В этом рецепте мы обсудим как вы можете применять профилировщики памяти на демонах Ceph для исследования памяти.
-
Запустите профилировщик памяти для определённого демона:
# ceph tell osd.0 heap start_profiler
Замечание Для автоматического запуска профилировщика при старте этого демона OSD ceph установите соответствующее значение переменной окружения
CEPH_HEAP_PROFILER_INIT=true
. -
Неплохо будет оставить профилировщик работающим на несколько часов чтобы он смог по возможности собрать как можно больше информации, относящейся к отпечаткам памяти. В это же время вы можете создать некоторую нагрузку на свой кластер.
-
Далее выведите статистики кучи о собранных профилировщиком отпечатках памяти:
# ceph tell osd.0 heap stats [root@ceph-node1 ~]# ceph tell osd.0 heap start_profiler osd.0 started profiler [root@ceph-node1 ~]# [root@ceph-node1 ~]# ceph tell osd.0 heap stats osd.0 tcmalloc heap stats:------------------------------------------------ MALLOC: 238029520 ( 227.0 MiB) Bytes in use by application MALLOC: + 0 ( 0.0 MiB) Bytes in page heap freelist MALLOC: + 13789912 ( 13.2 MiB) Bytes in central cache freelist MALLOC: + 4454720 ( 4.2 MiB) Bytes in transfer cache freelist MALLOC: + 28537112 ( 27.2 MiB) Bytes in thread cache freelists MALLOC: + 2863264 ( 2.7 MiB) Bytes in malloc metadata MALLOC: ------------ MALLOC: = 287674528 ( 274.3 MiB) Actual memory used (physical + swap) MALLOC: + 2031616 ( 1.9 MiB) Bytes released to OS (aka unmapped) MALLOC: ------------ MALLOC: 289706144 ( 276.3 MiB) Virtual address space used MALLOC: MALLOC: 13148 Spans in use MALLOC: 424 Thread heaps in use MALLOC: 8192 Tcmalloc page size ------------------------------------------------ Call ReleaseFreeMemory() to release freelist memory to the OS (via madvise()). Bytes released to the OS take up virtual address space but no physical memory. [root@ceph-node1 ~]#
-
Вы также можете сделать дамп статистик кучи в файл, который может быть использован позже; по умолчанию он создаётся в файле дампа
/var/log/ceph/osd.0.profile.0001.heap
:# ceph tell osd.0 heap dump [root@ceph-node1 ~]# ceph tell osd.0 heap dump osd.0 dumping heap profile now. ------------------------------------------------ MALLOC: 238031808 ( 227.0 MiB) Bytes in use by application MALLOC: + 0 ( 0.0 MiB) Bytes in page heap freelist MALLOC: + 13589456 ( 13.0 MiB) Bytes in central cache freelist MALLOC: + 4258112 ( 4.1 MiB) Bytes in transfer cache freelist MALLOC: + 28964656 ( 27.6 MiB) Bytes in thread cache freelists MALLOC: + 2863264 ( 2.7 MiB) Bytes in malloc metadata MALLOC: ------------ MALLOC: = 287707296 ( 274.4 MiB) Actual memory used (physical + swap) MALLOC: + 1998848 ( 1.9 MiB) Bytes released to OS (aka unmapped) MALLOC: ------------ MALLOC: = 289706144 ( 276.3 MiB) Virtual address space used MALLOC: MALLOC: 13152 Spans in use MALLOC: 424 Thread heaps in use MALLOC: 8192 Tcmalloc page size ------------------------------------------------ Call ReleaseFreeMemory() to release freelist memory to the OS (via madvise()). Bytes released to the OS take up virtual address space but no physical memory. [root@ceph-node1 ~]#
-
Чтобы прочитать этот файл дампа вам понадобится
google-perftools
:# yum install -y google-perftools
-
Для просмотра журналов профайлера:
# pprof --text {path-to-daemon} {log-path/filename} # pprof --text /usr/bin/ceph-osd /var/log/ceph/osd.0.profile.0001.heap
-
Для гранулированного сравнения сгенерируйте несколько файлов дампов профайлера для одного и того жедемона и примените инструмент профайлера Google для их сравнения:
# pprof --text --base /var/log/ceph/osd.0.profile.0001.heap /usr/bin/ceph-osd /var/log/ceph/osd.0.profile.0002.heap
-
Освободите память, которую выделил TCMALLOC, однако она не используется Ceph:
# ceph tell osd.0 heap release
-
По завершению остановите профайлер:
# ceph tell osd.0 heap stop_profiler
Процессы демонов Ceph достаточно зрелые, и скорее всего вам не понадобятся профайлеры памяти для анализа, если только вы не столкнётесь с ошибкой, которая вызывает утечки памяти. Вы можете применять обсуждавшуюся ранее процедуру для вычисления проблем памяти в демонах Ceph.
В этой книге мы уже обсудили развёртывание Ceph множеством способов, которые включают Ceph-deploy и Virtual Storage Manager (VSM, Менеджер виртуальных хранилищ). Оба этих метода требуют ручной установки и настройки вашего кластера Ceph. Однако существуют и другие инструменты и методы которые могут устанавливать и развёртывать Ceph для вас высоко автоматизированным образом. При помощи таких методов вам большене понадобится набирать докучливые команды для развёртывания Ceph; по вашему желанию инструменты управления настройкой, такие как Ansible, Puppet, Chef и прочие могут настраивать ваш кластер Ceph.
В этом рецепте мы пройдем сквозь Ansible, который является очень простым инструментом автоматизации ИТ и управления настройкой; для
дополнительной информации окиньте взглядом http://www.ansible.com/how-ansible-works. Экосистема Ceph имеет живое сообщество вокруг него, которое разрабатывает
готовые к применению модули Ansible для Ceph. Мы будем применять эти модули ceph-ansible
(отсылаем к https://github.com/ceph/ceph-ansible) для
развёртывания вашего кластера Ceph с помощью Ansible.
Существует два способа которыми вы можете развернуть Ceph с применением модулей ceph-ansible
:
-
Применить модуль
ceph-ansible
для первого запуска нескольких виртуальных машин с применением Vagrent и VirtualBox/VMware, а затем установить и настроить Ceph с помощью Ansible. -
Применить модуль
ceph-ansible
для установки и настройки кластера Ceph с применением сборников сценариев Ansible на машинах голого железа.
В этом рецепте мы применим первый метод, то есть применим модуль ceph-ansible
для запуска
виртуальных машин VirtualBox и Ansible для установки и развёртывания вашего кластера Ceph.
Замечание | |
---|---|
Модули |
-
На своей машине хоста VirtualBox клонируйте Git самый последний модуль
ceph-ansible
:$ git clone https://github.com/ceph/ceph-ansible.git $ cd ceph-ansible
-
ceph-ansible
использует Vagrant. Для этой цели он поставляется вместе сVagrantfile
, который сообщает Vagrant как раскручивать ВМ. Этот файл требует некоторых переменных, которые определены в другом файле:vagrant_variables.yml
. Модульceph-ansible
приходит сvagrant_variables.yml.sample
, который может быть использован напрямую с минимальными изменениями:$ cp vagrant_variables.yml.sample vagrant_variables.yml
-
Настройки по умолчанию для Vagrant определены в
vagrant_variables.yml
и тоже достаточно хороши. Если вы пожелаете, вы можете подстроить конфигурацию отредактировав этот файл. Поскольку это тестовый кластер, мы уменьшим число мониторов с 3 до 1 изменив переменнуюmon_vms
на значение 1. -
Модуль
ceph-ansible
принуждает Vagrant использовать Ansible как своего снабженца; для этой цели скопируйте файлsite.yml.sample
под именемsite.yml
в ту же иерархию:$ cp site.yml.sample site.yml
-
Наконец, мы выполним
vagrant up
, который запустит 4 ВМ (1 монитор Ceph и 3 OSD Ceph), а после этого он запустит установку и развёртывание Ceph при помощи инструмента управления настройкой, Ansible:$ vagrant up
-
Предоставление ВМ и развёртывание Ceph займут несколько минут; после завершения вы должны увидеть примерно вот это:
PLAY RECAP ******************************************************************** mon0 : ok=82 changed=15 unreachable=0 failed=0 osd0 : ok=67 changed=9 unreachable=0 failed=0 osdl : ok=67 changed=9 unreachable=0 failed=0 osd2 : ok=67 changed=9 unreachable=0 failed=0
-
После успешного завершения вы закончите с работающим кластером Ceph, установленным и настроенным при помощи Ansible. Зарегистрируйтесь на своём узле
mon0
и проверьте состояние вашего кластера:$ vagrant ssh mon0 $ sudo ceph -s vagrant@ceph-mon0:-$ sudo ceph -s cluster 4a158d27-f750-41d5-9e7f-26ce4c9d2d45 health HEALTH_OK monmap el: 1 mons at {ceph-mon0=192.168.42.10:6789/0} election epoch 2, quorum 0 ceph-mon0 mdsmap e2: 0/0/1 up osdmap e21: 6 osds: 6 up, 6 in flags sortbitwise pgmap v27: 320 pgs, 3 pools, 0 bytes data, 0 objects 212 MB used, 65121 MB / 65333 MB avail 320 active+clean vagrant@ceph-mon0:-S
Сборка Vagrant может быть удалена при помощи vagrant destroy -f
и повторно создана в любое время
в течение нескольких минут автоматизированным, интеллектуальным образом. Вы можете отметить как просто, быстро и бесшовно было выполнено
это развёртывание Ceph в сравнении с ручным. Для промышленного применения следует на самом деле рассматривать инструменты управления
настройкой, подобные Ansible, для развёртывания Ceph для сохранения всех узлов в том же состоянии с точки зрения настройки. К тому же они
очень удобны для управления большими кластерами с несколькими десятками узлов.
Одной из ключевых особенностей Ceph является её качества самовосстановления и самоизлечения. Ceph делает это благодаря сохранению
множества копий групп размещения по различным OSD и гарантирует очень высокую вероятность что вы никогда не потеряете свои данные.
В очень редких случаях вы можете наблюдать отказы множества OSD, при которых одна или более реплик PG находятся на отказавшем OSD и
состояние PG становится уязвимым, что ведёт к ошибкам в жизнеспособности кластера. Для гранулированного восстановления Ceph
предоставляет инструмент восстановления низкого уровня групп размещения и данных объекта, называемый
ceph-objectstore-tool
ceph-objectstore-tool
может быть рискованной операцией и команда обязаны выполняться либо
пользователем root
, либо с sudo
. Не пытайтесь делать это
на вашем промышленном кластере без привлечения поддержки Red Hat Ceph Storage, если вы не уверены в том, что вы делаете. Это может
вызвать необратимую потерю данных в вашем кластере.
-
Найдите незавершённую группу размещения в вашем кластере Ceph. Примените следующую команду и получите идентификатор вашей PG и её наборы действия:
# ceph health detail | grep incomplete
-
С помощью действующего набора определите местоположение хоста OSD:
# ceph osd find <osd_number>
-
Зарегистрируйтесь на этом узле OSD и остановите OSD с которым вы собираетесь работать:
# service ceph stop <osd_ID>
Следующиеразделы описывают функции с вашими OSD и группами размещения, которые вы можете применять с
ceph-objectstore-tool
:
-
Для идентификации ваших объектов в пределах OSD выполните следующее. Инструмент выдаст все объекты безотносительно от их групп размещения:
# ceph-objectstore-tool --data-path </path/to/osd> --journal-path </path/to/journal> --op list
-
Чтобы идентифицировать ваш объект внутри группы размещения выполните:
# ceph-objectstore-tool --data-path >/path/to/osd> --journal-path >/path/to/journal> --pgid <pgid> --op list
-
Для вывода перчня групп размещения, хранящихся на некоем OSD выполните:
# ceph-objectstore-tool --data-path </path/to/osd> --journal-path </path/to/journal> --op list-pgs
-
Если вы знаете идентификатор объекта который вы ищете, задайте его для определения идентификатора его PG:
# ceph-objectstore-tool --data-path </path/to/osd> --journal-path </path/to/journal> --op list <object-id>
-
Извлеките информацию об определённой группе размещения:
# ceph-objectstore-tool --data-path </path/to/osd> --journal-path </path/to/journal> --pgid <pg-id> --op info
-
Извлеките журнал операций в группе размещения:
# ceph-objectstore-tool --data-path </path/to/osd> --journal-path </path/to/journal> --pgid <pg-id> --op log
Удаление группы размещения является рискованной операцией и может вызвать потерю данных; применяйте эту функциональность с предосторожностью. Если вы разрушите группу размещения в OSD это не допустит одноранговый обмен или запуск службы OSD, перед удалением вашей группы размещения убедитесь что у вас имеется рабочая копия группы размещения на другом OSD. В качестве предосторожности перед удалением вашей PG вы можете также сделать резервную копию этой группы размещения экспортировав её в файл:
-
Для удаления группы размещения выполните следующую команду:
# ceph-objectstore-tool --data-path </path/to/osd> --journal-path </path/to/journal> --pgid <pg-id> --op remove
-
Для экспорта группы размещения в файл выполните следующую команду:
# ceph-objectstore-tool --data-path </path/to/osd> --journal-path </path/to/journal> --pgid <pg-id> --file /path/to/file --op export
-
Для импорта группы размещения из файла выполните следующую команду:
# ceph-objectstore-tool --data-path </path/to/osd> --journal-path </path/to/journal> --file </path/to/file> --op import
-
OSD может иметь объект, помеченный как "lost". Для вывода списка "lost" или "unfound" объектов выполните:
# ceph-objectstore-tool --data-path </path/to/osd> --journal-path </path/to/journal> --op list-lost
-
Чтобы найти объекты помеченный как потерянные для отдельной группы размещения определите
pgid
:# ceph-objectstore-tool --data-path </path/to/osd> --journal-path </path/to/journal> --pgid <pgid> --op list-lost
-
Инструмент
ceph-objectstore-tool
специально используется для фиксации ваших PG утраченных объектов. OSD может иметь объекты, помеченные как "lost". Для удаления этих объектов из группы размещения выполните:# ceph-objectstore-tool --data-path </path/to/osd> --journal-path </path/to/journal> --op fix-lost
-
Для фиксации потерянных объектов в определённой группе размещения определите
pgid
:# ceph-objectstore-tool --data-path </path/to/osd> --journal-path </path/to/journal> --pgid <pg-id> --op fix-lost
-
Если вы уверены в подлинности потерянного объекта, который вы хотите фиксировать, определите идентификатор этого объекта:
# ceph-objectstore-tool --data-path </path/to/osd> --journal-path </path/to/journal> --op fix-lost <object-id>
Синтаксис для ceph-objectstore-tool
следующий:
ceph-objectstore-tool <options>
.
Значения для <options>
могут быть следующими:
-
--data-path
: путь к вашему OSD -
--journal-path
: путь к вашему журналу -
--op
: операция -
--pgid
: идентификатор группы размещения -
--skip-journal-replay
: применяйте в случае разрушения вашего журнала -
--skip-mount-omap
: применяйте когда вашleveldb
хранимых данных разрушен и не может быть смонтирован -
--file
: путь к вашему файлу, применяется с операцией импорта/ экспорта
Для лучшего понимания этого инструмента, давайте рассмотрим пример: пулимеет две копии объекта и PG размещаются в
osd.1
и osd.2
. На данный момент, если случится отказ, произойдёт
следующая последовательность:
-
osd.1
отключается. -
osd.2
обрабатывает все операции записи в деградированном состоянии. -
osd.1
возвращается и выполняет одноранговый обмен сosd.2
для репликации данных. -
Внезапно
osd.2
отключается до выполнения репликации всех необходимых объектов наosd.1
. -
На данный момент у вас есть данные на
osd.1
, но они просрочены.
В результате поиска неисправностей вы определите, что вы можете прочитать свои данные osd.2
из файловой системы, но его служба osd
не запускается. В такой ситуации вам следует применить
ceph-objectstore-tool
для экспорта/ извлечения данных с отказавшего
osd
. ceph-objectstore-tool
предоставит вам достаточные
возможности для изучения, модификации и извлечения данных объекта и метаданных.
Замечание | |
---|---|
Вам следует избегать применения средств Linux подобных |
Наконец, мы достигли конца этойглавы и вообще всей книги. Я надеюсь, что ваше путешествие по Книге рецептов Ceph было информативным. Вы должныбыли изучить некоторые концепции Ceph, которые снабдят вас достаточной уверенностью для работы со своим кластером Ceph в вашем окружении. Наши поздравления! Сейчас вы достигли следующего уровня в Ceph.
Продолжайте Изучение, Продолжайте исследования, Продолжайте совместное применение...
Ура!