Еще 8 лет назад мы писали о кэшировании в решении StarWind Virtual SAN, которое является лучшим на сегодняшний день программным средством создания отказоустойчивых хранилищ для виртуальных машин. С тех пор многое менялось, но пользовали применяли надежное кэширование на запись write-back для нагрузок, требующих высокой производительности подсистемы хранения. Но у такого кэширования есть недостаток - возможность потери данных в случае отключения электропитания.
Что такое Log-structured Write Cache (LWC), и для чего он нужен?
Кэширование Write-back caching - это когда запись данных производится в кэш, размещенный в оперативной памяти. Запись же в основную память производится позже (при вытеснении или по истечению времени), при этом в одной операции группируются несколько операций записи в соседние блоки хранилища в целях повышения производительности.
Очевидно, кэширование Write-back дает преимущества быстродействия RAM-диска, но в случае отключения питания для сервера пользователи могут потерять свои данные, изменившиеся за некоторый промежуток времени. Выходом также не является и синхронизация кэширования для нескольких узлов, так как блэкаут может случиться на уровне всего датацентра, либо на уровне отдельной стойки, куда установлены все узлы StarWind Virtual SAN.
В итоге, в StarWind придумали новую архитектуру механизма кэширования - Log-structured Write Cache (LWC), содержащую 2 основных компонента:
1. Во-первых, LWC представляет собой комбинацию двух кэшей - быстродействующего (L1) в оперативной памяти (ему нужно где-то 3 ГБ на каждый 1 ТБ хранилища виртуальных машин) и энергонезависимой памяти на SSD (L2), куда асинхронно сбрасываются операции записи из RAM-кэша. Эта операция сброса занимает совсем немного времени, поэтому в случае внезапного отключения питания потеряно будет совсем мало данных.
2. Во-вторых, еще одна важная возможность LWC - это группировка операций записи в целях повышения производительности (Log-structured). Мы уже писали о файловой системе LSFS (Log-structured File System), в которой небольшие операции записи от виртуальных машин хост-сервера, которые смешиваются и идут в случайном порядке (small random writes), преобразуются в большие последовательные операции записи, что также существенно увеличивает производительность. Это так называемая ликвидация эффекта I/O Blender.
Аналогично и в Log-structured Write Cache - операции записи, сброшенные из оперативной памяти на SSD-хранилище, группируются в более длинные цепочки данных, которые потом в асинхронном режиме мигрируют уже на постоянное хранилище. В качестве SSD-хранилища для такого кэша потребуется не менее 16 ГБ дискового пространства, а в идеале его объем должен составлять где-то 10-20% от нижележащей дисковой емкости.
Ну и немаловажный эффект от использования LWC: в случае сбоя электропитания, когда узлы снова станут доступными, вам не потребуется ждать долгой полной ресинхронизации узлов - нужно будет только накатить структурированный лог на оба HA-устройства и продолжить их использовать.
Как настроить LWC на HA-устройствах в ОС Windows Server 2012 R2 / Windows Server 2016
Открываем StarWind Management Console, добавлем узел StarWind (Add Sever), после чего нажимаем Add Device (advanced):
Выбираем Hard Disk Device для создания нового HA-устройства:
Выбираем тип Virtual Disk:
Вводим имя, размещение и размер виртуального диска:
И вот тут выбираем тип диска с поддержкой LWC - Thick-provisioned with Write Log:
Кстати, обратите внимание, что для гипервизора Windows Hyper-V нужно выставить размер блока 4096 байт, а для VMware ESXi, XenServer или KVM - 512 байт.
После этого определяем размещение лога на запись (помните, что под него нужно выделить около 20% общей емкости виртуального диска, который вы создаете):
Очень желательно, чтобы он размещался на SSD-устройстве в целях оптимального быстродействия.
В следующем диалоге кэширование Write-Back будет недоступно к выбору, но вы можете выбрать кэширование для операций чтения (Write-Through) уровня L1, что также увеличит производительность. Тут оптимально выделить 1 ГБ такого кэширования на каждый 1 ТБ емкости виртуального диска:
Укажите параметры iSCSI-таргета для устройства:
После этого начнется создание виртуального диска и LWC-устройства:
Лог на запись будет создан как устройство для кэша уровня L2 - такая архитектура увеличивает производительность (подробнее - тут).
Теперь нужно добавить второй узел и второе HA-устройство. Добавьте сервер через Add Server в управляющей консоли:
Запустите Replication manager:
Откроется окно "Replication Manager for lwc1", нажмите там Add Replica:
Выберите тип репликации - синхронная двунаправленная репликация (Synchronous “Two-Way” Replication):
Добавьте узел-партнер, который вы настраивали ранее (дефолтный порт 3261):
Выберите стратегию восстановления Heartbeat:
Выберите создать партнерское устройство (Create new Partner Device):
Выберите его размещение:
Нажмите Change Network Settings для настройки сетевых параметров канала синхронизации и Heartbeat:
Выберите нужные интерфейсы для этих сетей:
Помните, что каналы Heartbeat и Synchronization нужно размещать на разных сетевых адаптерах, а вот Heartbeat и основной канал данных iSCSI - на одном, чтобы не получить ситуацию Split-Brain.
Далее выберите опцию Synchronize from existing Device:
Как и для виртуального диска на первом узле, укажите размещение Write Log:
Начнется процесс создания устройства:
После этого HA-устройство виртуального диска с поддержкой LWC будет готово к использованию. Его статус можно отслеживать в StarWind Management Console:
Больше информации о Log-structured Write Cache (LWC) вы можете получить вот на этой странице. Кроме того, рекомендуем вам почитать пару интересных документов на эту тему: