Находится в процессе активного развития. Функциональность может существенно измениться.

Когда следует использовать LVM, а когда LVMThin?

Если кратко, то:

  • LVM проще и обладает производительностью сравнимой с производительностью накопителя;
  • LVMThin позволяет использовать snapshot’ы и overprovisioning, но медленнее в два раза.

Подробнее — в следующем разделе.

Производительность и надёжность LINSTOR, а также сравнение с Ceph

Мы придерживаемся практического взгляда на вопрос. Разница в несколько десятков процентов на практике никогда не имеет значения. Имеет значение разница в несколько раз и более.

Факторы сравнения:

  • Последовательное чтение и запись: не имеют никакого значения, потому что на любой технологии они всегда упираются в сеть (что 10 Гбит/с, что 1 Гбит/с). С практической точки зрения этот показатель можно полностью игнорировать;
  • Случайное чтение и запись (что на 1Гбит/с, что на 10Гбит/с):
    • drbd+lvm в 5 раз лучше ceph-rbd (latency — в 5 раз меньше, IOPS — в 5 раз больше);
    • drbd+lvm в 2 раза лучше drbd+lvmthin.
  • Если одна из реплик расположена локально, то скорость чтения будет примерно равна скорости устройства хранения;
  • Если нет реплик расположенных локально, то скорость записи будет примерно ограничена половиной пропускной способности сети при двух репликах или ⅓ пропускной способности сети при трех репликах;
  • При большом количестве клиентов (больше 10, при iodepth 64), ceph начинает отставать сильнее (до 10 раз) и потреблять значительно больше CPU.

В сухом остатке получается, что на практике неважно какие параметры менять, и есть всего три значимых фактора:

  • Локальность чтения — если всё чтение производится локально, то оно работает со скоростью (throughput, IOPS, latency) локального диска (разница практически незаметна);
  • 1 сетевой hop при записи — в drbd репликацией занимается клиент, а в ceph — сервер, поэтому у ceph latency на запись всегда минимум в два раза больше чем у drbd;
  • Сложность кода — latency вычислений на datapath (сколько процессорных команд выполняется на каждую операцию ввода/вывода), — drbd+lvm проще чем drbd+lvmthin, и значительно проще чем ceph-rbd.

Что использовать в какой ситуации?

По умолчанию модуль использует две реплики (третья — для кворума, diskless, создается автоматически). Такой подход гарантирует защиту от split-brain и достаточный уровень надежности хранения, но нужно учитывать следующие особенности:

  • В момент недоступности одной из реплик (реплика A) данные записываются только в единственную реплику (реплика B). Это означает, что:
    • Если в этот момент отключится и вторая реплика (реплика B), то запись и чтение будут недоступны;
    • Если при этом вторая реплика (реплика B) утеряна безвозвратно, то данные будут частично потеряны (есть только старая реплика A);
    • Если старая реплика (реплика A) была тоже утеряна безвозвратно, то данные будут потеряны полностью.
  • Чтобы включиться обратно при отключении второй реплики (без вмешательства оператора) требуется доступность обеих реплик. Это необходимо, чтобы корректно отработать ситуацию split-brain;
  • Включение третьей реплики решает обе проблемы (в любой момент времени доступно минимум две копии данных), но увеличивает накладные расходы (сеть, диск).

Настоятельно рекомендуется иметь одну реплику локально. Это в два раза увеличивает возможную скорость запись (при двух репликах) и значительно увеличивает скорость чтения. Но даже если реплики на локальном хранилище нет, то все также будет работать нормально, за исключением того, что чтение будет осуществляться по сети и будет двойная утилизация сети при записи.

В зависимости от задачи нужно выбрать один из следующих вариантов:

  • drbd+lvm — быстрей (в два раза) и надежней (lvm — проще);
  • drbd+lvmthin — поддержка snapshot’ов и возможность overprovisioning.

Как добавить существующий LVM или LVMThin-пул?

Пример добавления LVM-пула:

linstor storage-pool create lvm node01 lvmthin linstor_data

Пример добавления LVMThin-пула:

linstor storage-pool create lvmthin node01 lvmthin linstor_data/data

Можно добавлять и пулы, в которых уже созданы какие-то тома. LINSTOR просто будет создавать в пуле новые тома.

Как настроить Prometheus на использование хранилища LINSTOR?

Чтобы настроить Prometheus на использование хранилища LINSTOR, необходимо: