Как обеспечить синхронизацию данных, записанных из приложения, на диск с ext4 в OpenEBS? - PullRequest
0 голосов
/ 17 сентября 2018

Данные не видны после перезапуска.Я предполагаю, что данные передаются для записи реплики, которая, в свою очередь, помещает в ext4.Но прежде чем ext4 сможет синхронизировать данные на диске, узел перезагружается, и данные не передаются на диски EBS.

Есть ли выход из этого?Я использую openebs с jiva.У меня есть MySQL -> ext4 (iscsi volume) -> Replica -> ext4 (block disks - say Amazon EBS).

Иногда я наблюдаю, что если узел, на котором работает реплика, перезапускается ...

1 Ответ

0 голосов
/ 19 сентября 2018

Вот статья на lwn.net, в которой обсуждается потенциальная потеря данных, когда программе не удается выполнить адекватную синхронизацию (также известную как отказоустойчивость) на ext4 в длину (обсуждение комментариев также полезно).

ext3, по-видимому, обеспечивает лучшую согласованность при сбое при использовании data=ordered, потому что данные передаются на диск до того, как изменения метаданных фиксируются в журнале.Кроме того, период фиксации по умолчанию составляет 5 секунд.В случае ext4 достигается компромисс между производительностью и использованием модели с отложенным распределением физических блоков, что приводит к тому, что незафиксированные данные еще некоторое время остаются в кеше.Цитата из статьи:

Ядро не хочет, чтобы данные файла оставались незаписанными слишком долго, но это может занять около минуты (с настройками по умолчанию), чтобы эти данныесбрасывать - намного дольше, чем пять секунд, обычно наблюдаемых с ext3

Таким образом, неписанные данные теоретически могут существовать только в энергозависимом кеше, пока не будут принудительно записаны на диск общесистемной sync ИЛИ явным образом для приложенияfsync своих собственных данных (как указал Джеффри). Если приложение / клиент этого не делает, мы более склонны к потере данных .

Один из способов решить эту проблему - подключить необходимую файловую систему с опцией sync (см.это ветка обсуждения «ext4 и потеря данных» ), и для этого нам нужно назначить ее в двух местах:

  1. Монтирование в модуль
  2. Пул хранения OpenEBS ИЛИ хранилище бэкэнда

(В случае 1 мы могли бы иметь цель конвертировать все записи в синхронизацию, как объяснено Джеффри)

В то время как документация mount(8)в частности, говорится, что использование -o sync поддерживается только до ext3 (среди файловых систем ext семейства), ручное монтирование файловой системы с этой опцией принимается.В попытке проверить, разрешено ли это протоколом монтирования, но игнорируется ли ext4, я провел небольшой тест производительности произвольной записи на основе fio для выборки данных размером 256M с диском, смонтированным с опцией синхронизации, и тем же содин без него.Чтобы убедиться, что сами записи не были записью SYNC, был выбран libaio ioengine с direct=1 и iodepth=4 (асинхронный многопоточный небуферизованный ввод-вывод).Результаты показали разницу примерно в 300+ операций ввода-вывода в секунду (разумеется, при улучшенном креплении, отличном от sync).Этот результат говорит о том, что флаг монтирования sync, похоже, играет определенную роль, но я все еще ищу дополнительные доказательства этого.

...