Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Оплата
Новости
Доставка
Загрузки
Форум
Настройка
    info@proxmox.su
    +7 (495) 320-70-49
    Заказать звонок
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Телефоны
    +7 (495) 320-70-49
    Заказать звонок
    0
    0
    0
    Аспро: ЛайтШоп
    • +7 (495) 320-70-49
      • Назад
      • Телефоны
      • +7 (495) 320-70-49
      • Заказать звонок
    • info@proxmox.su
    • Москва, Бакунинская улица, 69с1
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Proxmox Виртуальная Среда
    Настройка Erasure Coded в CEPH: проверка/подтверждение

    Форумы: Proxmox Виртуальная Среда, Proxmox Backup Server, Proxmox Mail Gateway, Proxmox Datacenter Manager
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Настройка Erasure Coded в CEPH: проверка/подтверждение, Proxmox Виртуальная Среда
     
    pdesouza
    Guest
    #1
    0
    16.09.2025 17:47:00
    Сначала позволю себе объяснить нашу конфигурацию: у нас есть кластер из 3 узлов, в котором мы будем использовать CEPH для гиперконвергентного хранилища. Мы только начинаем разбираться в CEPH и очень хотели бы услышать опытных специалистов.

    Весь наш накопительный комплект — это SSD (24x 2TB NVMe, по 8 на сервер). Мы хотим, чтобы при выходе из строя одного сервера у нас не было простоев виртуальных машин.

    Вопрос, над которым я сейчас работаю: какая конфигурация хранилища будет самой эффективной с точки зрения использования пространства, чтобы максимизировать доступное место?

    После изучения документации CEPH, вот что я понял касательно Erasure Coded Pools:

    K — это количество OSD, доступное под хранение, при этом мы можем потерять M OSD, а общее количество OSD равно (K+M). Параметр min_size должен быть установлен в K+1, и если количество доступных OSD упадет ниже min_size, запись в CEPH RBD станет невозможной.

    Если взять пул с Erasure Code 4+2 (16+8, эффективность 66%), мы сможем потерять треть накопителей и без потери данных восстановиться. Но при этом у нас будут простои из-за параметра min_size (K+1 будет равняться 17).

    Исходя из этой логики, я предполагаю, что самая эффективная настройка CEPH для 3-узлового кластера с 24 OSD — это K=15 и M=9, с эффективностью 62,5%, что позволит работать нормально при выходе из строя одного сервера благодаря min_size=16 (K+1).

    Правильны ли мои предположения? Не ошибся ли я с трактовкой документации CEPH? Есть ли у кого-то еще работающий 3-узловой кластер на CEPH? Было бы очень интересно услышать другие мнения по моей конфигурации.

    Заранее спасибо!
     
     
     
    davidsg
    Guest
    #2
    0
    21.12.2025 22:16:00
    Абсолютно возможно разместить несколько чанков на каждом сервере, при этом гарантируя устойчивость к сбоям узлов. Просто нужно создавать пулы вручную, а не через интерфейс Proxmox. Я так делаю уже много лет на домашнем кластере из трёх узлов. У меня есть пул EC с параметрами k=7, m=5. Конечно, я бы не рекомендовал использовать такой широкий EC в продакшене, но мне нужно было максимально эффективно использовать пространство, при этом иметь возможность отключать узел и сохранять избыточность.  

    С правилом размещения, которое кладёт по 4 чанка на каждый узел, я могу выводить узел в техобслуживание и при этом пережить отказ диска. Раньше я делал это через кастомное CRUSH-правило[*1]:

    Код:
    rule 3host4osd {
       id 3
       type erasure
       step set_chooseleaf_tries 1000
       step set_choose_tries 1000
       step take default class hdd
       step choose indep 3 type host
       step chooseleaf indep 4 type osd
       step emit
    }

    Это работало хорошо, но, естественно, нужно понимать, что ты делаешь, чтобы всё не сломать. Но в Squid стало гораздо проще. Там можно использовать новые CRUSH правила Multi-Step Retry[*2]. Не нужно писать свои CRUSH-правила и вручную внедрять их в mons. Просто создаёшь профиль EC примерно так и используешь его для создания пула:

    Код:
    ceph osd erasure-code-profile set 3host4osd \
       k=7 \
       m=5 \
       crush-failure-domain=host \
       crush-osds-per-failure-domain=4 \
       crush-num-failure-domains=3

    Важно помнить, что MSR-правила требуют поддержки на стороне клиента, а встроенный в ядро CephFS-клиент их не поддерживает. Так что убедитесь, что используете FUSE-клиент.

    [*1] https://docs.ceph.com/en/latest/rados/operations/crush-map/#custom-crush-rules  
    [*2] https://docs.ceph.com/en/latest/dev/crush-msr/#msr
     
     
     
    VictorSTS
    Guest
    #3
    0
    22.12.2025 08:26:00
    Одного этого недостаточно, чтобы понять ситуацию: сколько OSD у вас на каждом хосте? Это целые диски или вы использовали разделы на каждом диске?
     
     
     
    UdoB
    Guest
    #4
    0
    22.12.2025 11:21:00
    Как я уже говорил, я не специалист по Ceph. Я не понимаю, чего вы хотите добиться с этой конструкцией. Но поскольку мне любопытно, я пишу этот ответ ;-) Насколько я понимаю, доступное пространство — это до 7/12 = 58,3 процента. Верно? Параметр "m=5" означает, что пять вычисленных полос распределяются по пяти OSD — дважды по две на одном узле и пятая на третьем узле. Параметр "k=7" разместит две полосы на одном узле и три полосы на третьем. Если один узел выйдет из строя, вы можете потерять одновременно три полосы данных и две полосы чётности. По моему ограниченному пониманию, при параметрах "k=7, m=5" потеря пяти элементов должна переключить систему в режим только для чтения, при этом все (по крайней мере несколько) запущенных виртуальных машин зависнут. В чём именно моя (как я сказал, ограниченная) понимание ошибается?
     
     
     
    davidsg
    Guest
    #5
    0
    22.12.2025 12:29:00
    Расчёт доступного пространства у вас правильный, но размещение неверное. Ceph не размещает k и m чанки отдельно, для CRUSH-алгоритма это просто обычные чанки. Для каждой PG он выбирает три хоста, а затем для каждого из этих хостов — по четыре OSD. При четырёх чанках на каждом хосте, если один хост выйдет из строя, у нас останется 8 чанков онлайн. Даже в таком состоянии я могу вытерпеть ещё один сбой диска.
     
     
     
    davidsg
    Guest
    #6
    0
    22.12.2025 12:37:00
    Не понимаю, почему это важно? Я просто хотел сказать, что можно настроить более сложные правила размещения, чем «столько-то копий, такой-то домен отказа», вопреки тому, что тут некоторые пишут. Но раз уж спросили, я использую отдельный весь диск для каждого OSD. У меня 24 диска, распределённых по трём узлам. Очевидно, что с точки зрения производительности это не лучший вариант, ведь каждый чтение и запись задействуют половину дисков в кластере. Это также означает, что я не могу использовать снимки на больших пулах, потому что процесс snaptrim просто убьёт производительность. Но для моих задач такой подход работает.
     
     
     
    UdoB
    Guest
    #7
    0
    22.12.2025 12:45:00
    Я пытался это протестировать — и всё работает так, как ты описал. Спойлер: тестировал на трёх узлах с 4 OSD.

    Код: у меня есть виртуальный тестовый кластер из шести узлов, названных pna, pnb... pnf. Три из них получили по 4 OSD для следующего теста.

    root@pna:~# ceph osd erasure-code-profile set 3host4osd \
       k=7 \
       m=5 \
       crush-failure-domain=host \
       crush-osds-per-failure-domain=4 \
       crush-num-failure-domains=3

    Несвязанное, но необходимое в моём тесте:  
    root@pna:~# ceph osd set-require-min-compat-client squid

    root@pna:~# pveceph pool create ec75b --erasure-coding k=7,m=5,profile=3host4osd  
    pool ec75b-data: применяю allow_ec_overwrites = true  
    pool ec75b-data: применяю application = rbd  
    pool ec75b-data: применяю pg_autoscale_mode = warn  
    пропускаю 'pg_num', изменений нет  
    пропускаю 'size', изменений нет  
    pool ec75b-metadata: применяю application = rbd  
    пропускаю 'min_size', изменений нет  
    pool ec75b-metadata: применяю pg_autoscale_mode = warn  
    пропускаю 'pg_num', изменений нет

    В итоге получился пул "ec75b-data" с параметром "Size/min" = "12/8". Режим автоскалирования показывает "warn" — это, наверное, ожидаемо. Масштабирование с 128 до 32 произошло меньше чем за полчаса и сработало автоматически.

    root@pna:~# ceph osd tree  
    ID   CLASS  WEIGHT   TYPE NAME       STATUS  REWEIGHT  PRI-AFF  
    -1         0.37427  root default                            
    -3               0      host pna                            
    -5         0.12476      host pnb                            
     0    hdd  0.03119          osd.0       up   1.00000  1.00000  
     1    hdd  0.03119          osd.1       up   1.00000  1.00000  
     2    hdd  0.03119          osd.2       up   1.00000  1.00000  
     4    hdd  0.03119          osd.4       up   1.00000  1.00000  
    -7               0      host pnc                            
    -9         0.12476      host pnd                            
     3    hdd  0.03119          osd.3       up   1.00000  1.00000  
     6    hdd  0.03119          osd.6       up   1.00000  1.00000  
     7    hdd  0.03119          osd.7       up   1.00000  1.00000  
     9    hdd  0.03119          osd.9       up   1.00000  1.00000  
    -11               0      host pne                            
    -13         0.12476      host pnf                            
     5    hdd  0.03119          osd.5       up   1.00000  1.00000  
     8    hdd  0.03119          osd.8       up   1.00000  1.00000  
    10    hdd  0.03119          osd.10      up   1.00000  1.00000  
    11    hdd  0.03119          osd.11      up   1.00000  1.00000  

    Запущена всего одна маленькая тест-ВМ — Trixiepup64:Wayland. Без установки.

    Внутри ВМ могу писать на sda, который, естественно, находится на пуле ec75b.  
    Для простоты запускаю примерно такую команду: "while true; do date; dd if=/dev/urandom of=/dev/sda count=1 bs=1M; sleep 5; done".

    Наблюдая за этим в реальном времени, я выключил один из узлов, на котором находятся те четыре OSD. Было 10 секундный «завис», но потом запись данных продолжилась! Сейчас показывает "Degraded data redundancy: 5791/17373 объектов деградировали (33.333%), 40 pgs деградировали, 97 pgs уменьшены"...

    Работает лучше, чем ожидал :-)
     
     
     
    davidsg
    Guest
    #8
    0
    22.12.2025 13:01:00
    Круто! Думаю, эта тема малоизвестна, потому что раньше инструменты для Ceph позволяли указывать только домен отказа, и все CRUSH-правила создавались с одним chooseleaf. А создание кастомных CRUSH-правил совсем не было хорошо документировано. С появлением Squid всё стало намного проще, ведь теперь инструменты могут создавать такие правила. Но всё, что можно найти в сети, по-прежнему говорит только о размещении на одном уровне, основанном на домене отказа. Я тоже с нетерпением жду релиза Tentacle — новые улучшения FastEC должны значительно повысить производительность таких широких EC-стрипов.
     
     
     
    alexskysilk
    Guest
    #9
    0
    22.12.2025 18:16:00
    Интересное решение. Почти такая же эффективность хранения, как при 2:1, но с достаточной избыточностью, чтобы выдержать выход из строя одного узла. Вы используете это для виртуализационных нагрузок? Не могли бы вы поделиться какими-нибудь показателями производительности?
     
     
     
    davidsg
    Guest
    #10
    0
    22.12.2025 19:15:00
    Я использую это только для хранения больших объёмов файлов через CephFS на HDD. Для образов виртуальных машин я применяю 3-кратную репликацию на NVMe. Показатели производительности сейчас не совсем показательны, так как пул сильно загружен разделением PG, но, честно говоря, впечатлить они не смогут. У EC (Error Correction) явно есть свои минусы — задержка и пропускная способность ниже, чем у репликации, и эти потери растут с увеличением ширины EC-стрипинга. Однако для данного сценария это работает очень хорошо. В свежем релизе Tentacle (20.2) появились серьёзные оптимизации EC, которые должны сделать его приемлемым вариантом для виртуализации, по крайней мере для ВМ с низкими требованиями к вводу-выводу. В общем, прорывные улучшения во всех аспектах, особенно для широкого EC (где раньше увеличение K приводило к сильному замедлению, теперь — к повышению производительности, по крайней мере до k=6). В следующем крупном релизе (Umbrella) обещают ещё больше оптимизаций EC. Поддержка прямого чтения должна уравнять скорость чтения для EC и репликации. https://ceph.io/en/news/blog/2025/tentacle-fastec-performance-updates/
     
     
     
    Страницы: 1
    Читают тему
    +7 (495) 320-70-49
    info@proxmox.su

    Конфиденциальность Оферта
    © 2026 Proxmox.su
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры