Задать вопрос
@pasha_a
Люблю ставить перед собой цели и добиваться их.

Как обеспечить надежность работы Postgres на Linux (в данном случае на Raspberry Pi)?

Добрый день!

Столкнулся с проблемой.
У меня есть ряд устройств, которые работают на базе Raspberry Pi.
На них крутиться софт (на Java), который работает с БД Postgres, которая крутиться на той же плате.

Спустя некоторое время работы в БД появились проблемные места, явные глюки (меняться символы и служебных таблицах и т.п.). Насколько я понимаю, причиной этого есть особенности карт памяти, которые начинают сбоить (сталкивался с подобным и на телефонах, регистраторах) и начинают теряться данные.
Возможно это вызвано тем, что, к сожалению, иногда пропадает питание и платы перегружаются, т.е. нет корректного завершения работы.

Карты памяти использую не самые плохие (Transcend, Kingston, Samsung), потому понимаю что за счет смены карт проблему не решить.
Проблема не в том, чтобы купить новую карту памяти и поставить вместо старой. Проблема в потере данных.

Может у кого-то есть подобный опыт как обеспечить более-менее надежность подобных систем?
Здесь вопрос даже не к raspberry, а вообщем к системам на базе Linux (и не только)

У меня есть периодические дампы БД. Но опять таки столкнулся с вопросом что в один момент вдруг дампы перестают создаваться по причине сбоя в служебных таблицах. Потому одними дампами проблему явно не решить.

Даст ли мне что-то если я сделаю репликацию на другую базу, которая крутиться на той же плате? Смогут ли они восстановиться в случае сбоя?
Есть ли возможность самодиагностики самой БД на проверку целостности, согласованности данных и служебных таблиц? Это дало бы мне возможность на раннем этапе ловить проблемы.

Буду рад любым советам!
  • Вопрос задан
  • 145 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
jamakasi666
@jamakasi666 Куратор тега Linux
Просто IT'шник.
Может у кого-то есть подобный опыт как обеспечить более-менее надежность подобных систем?
Здесь вопрос даже не к raspberry, а вообщем к системам на базе Linux (и не только)

Как раз относится и к расберри. Флешки, какие бы они не были, ненадежны.
1) Для начала городите любое гарантированное питание.
2) На серверах неспроста используется ЕСС память, поэтому даже в случае сферического "хорошо" в вакуме ошибки имеют место быть.
3) Выносите БД на другое хранилище.

Для надежности в целом:
1) Используйте f2fs вместо ext3\4.
2) Переводите корневой \ раздел в режим только чтение
3) БД храните отдельно от системы. Подключенный по usb hdd\ssd. Смонтировать по сети из более нажедного источника.
4) Можно заморочиться с оверлееями. Условно каталог с БД кинуть в оверлей где верхний уровень будет в tmpfs а нижний на флешке. Запускать раз в N часов\сутки слияние из верхнего в нижний уровень.

Как надежное питание можно использовать powerbank или даже обычный бесперебойник. Плюсом последнего будет то что его можно будет подцепить к малине и смотреть сколько заряда, какое состояние и принимать меры если питание перешло на батарею. Т.е. в вашем случае к примеру как по пункту 4 запускать слияние.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@pasha_a Автор вопроса
Люблю ставить перед собой цели и добиваться их.
Дмитрий Александров , спасибо Вам за такой развернутый и исчерпывающий ответ!
Более подробно еще изучу каждый из пунктов, т.к. в частью вещей сталкиваюсь впервые (f2fs, оверлеи).

С бесперебойным питанием действительно получился "косяк", т.к. когда я начал думать как обеспечить своей системе гарантированное питание, другая организация, которая завязана в проекте, пообещала что обеспечат мне гарантированное 220В. Они то и обеспечили вроде как, поставив ИБП с хорошими АКБ, однако они периодически лазят туда исправляя "косяки" в своем оборудовании и таким образом умудряясь отключать и мое оборудование...

По поводу использования powerbank я решил создать отдельную тему , чтобы не смешивать тут все воедино.
Я там изложил свои опасения по этому поводу и результаты неутешительных экспериментов с имеющимся у меня powerbank.

3) Выносите БД на другое хранилище.

Ну т.е. логика работы должна быть следующая - после старта платы, я должен смонтировать внешний винчестер, а потом запустить postgres, который уже будет работать с внешним хранилищем? Или я неправильно понял идею?
А для БД все равно где хранятся файлы ее БД?

А подскажите пожалуйста как правильно выключать линукс чтобы ничего не повредить? Я так понимаю,
мне нужно сначала остановить ту же БД, и другие процессы, которые могут выполнять какую-либо запись на карту памяти?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы