%3F.png)
Мне интересно, в чем цель BBU. Мое первое понимание было, что он позволяет кэшу записывать данные на диск во время сбоя питания. Но некоторые спецификации говорят, что BBU может хранить свои данные до 72 часов. Я бы ожидал, что данные будут записаны на диск в течение миллисекунд (учитывая, что диск все еще имеет питание).
Так должен ли BBU защищать не только кэш, но и весь диск в течение нескольких секунд? Разве это не будет еще более безопасным, поскольку данные кэша записываются на диск, а не находятся в кэше и снова ждут питания? Примерно через секунду диск можно будет отключить.
решение1
Он не питает диски, а просто хранит данные в кэше (в данном случае) до 72 часов, пока вы не включите машину снова. Когда вы включите машину снова, она запишет содержимое кэша обратно на диски.
Все, что он делает, это защищает от сбоя питания. Если (по какой-то причине) машина теряет питание, не полностью сбросив данные на диск, батарея сохраняет содержимое кэша живым, пока вы не сможете перезапустить машину.
Это не ИБП для дисков, так как диски могут находиться во внешнем дисковом массиве или даже в другой цепи питания. Даже ИБП может выйти из строя.
решение2
Это работает так:
Большинство операционных систем имеют системный вызов, который позволяет выполнять так называемую «синхронную запись». Это означает, что во время операции записи, если запись завершена, то гарантируется, что она была зафиксирована на диске.
Синхронная запись, таким образом, не кэшируется. Она блокирует приложение до тех пор, пока оно не завершится. Этот тип операции, очевидно, медленнее, чем кэшированная запись, которая сохраняет данные в памяти ОС, пока диск не станет достаточно свободным, а затем записывает данные.
Некоторое критически важное программное обеспечение, например, программное обеспечение баз данных, выполняет синхронную запись критически важных данных, поскольку наполовину записанное обновление в случае отключения питания может нарушить целостность базы данных.
Контроллеры RAID печально известны своей медлительностью при записи RAID-5, поэтому это становится проблемой, если ваше прикладное программное обеспечение использует много синхронных записей. По этой причине контроллеры RAID-5 оснащены собственными кэшами.
RAID-контроллер вместо этого записывает данные в свой кэш и ЛЖЕТ ОС, сообщая ей, что он записал данные на диск, хотя на самом деле данные все еще находятся в RAID-кеше.
Но что, если питание было отключено, пока данные все еще находились в буфере RAID-контроллера? У вас были бы наполовину записанные и, вероятно, несогласованные данные на ваших дисках.
Вы можете сказать, что такое поведение сводит на нет смысл синхронной записи... если бы кэшированная запись была приемлемой, то программное обеспечение приложения изначально не запрашивало бы синхронную запись.
Компромисс заключается в следующем: RAID-контроллер по-прежнему лжет ОС о том, что он сохранил данные на диск, но для защиты этих критически важных данных в случае сбоя питания RAID-контроллер имеет батарею, которая поддерживает кэш в рабочем состоянии в течение некоторого времени, пока не восстановится питание.
Таким образом, после того, как питание восстанавливается, диски раскручиваются и инициализируются, контроллер все еще сохраняет эти данные в своем кэше благодаря аккумулятору и может завершить запись вашей транзакции на диск.
Все довольны.
Вот почему RAID-контроллеры обычно не позволяют включить кэширование записи, если у вас нет исправного и заряженного аккумулятора.
решение3
Стоит отметить, что некоторые новые контроллеры дисков теперь поставляются с высокоскоростным флэш-кэшем, который сохраняет данные гораздо дольше, чем типичные 72 часа, и часто он также намного больше (~1 ГБ). Если вам нужны подробности о деталях, дайте мне знать.
решение4
Приобретение аккумулятора за 100 долларов является обязательным условием, особенно для сервера БД, даже несмотря на то, что перебои с электропитанием случаются редко.Даже если у вас включены транзакциии ваш сервер отключится от питания до того, как эти изменения покинут кэш и будут сохранены на диске, вы получите неполный запрос или поврежденные данные.