Закончил с переносом серверов
Сегодня закончил с переносом серверов. Сначала перенёс было базу данных PostgreSQL на тот же сервер, где висит интерфейсная и проверяющая части бота. В первый момент казалось, что всё хорошо, но потом полезли проблемы: Postgres запускал несколько процессов, которые съедали всё процессорное время, и бот переставал работать из-за того, что до Postgres невозможно достучаться. Сначала думал, что это команда /status делает слишком сложные запросы (она и на старом сервере подтормаживала). Включил лимит на время выполнения запроса через statement_timeout (кстати, полезная опция!), не помогло. Ограничил количество процессов autovaccum до двух — стало полегче, но всё равно всё тормозило. Начал метаться: то пытался пробовать какие-то другие меры на новом сервере, то думал о том, чтобы пробросить соединение к базе через SSH на старый. Из-за того, что никак не мог определиться, что делать начал реально злиться и психовать (для меня именно неопределённость, когда непонятно, что делать — это дестабилизирующий фактор). К тому же сегодня ещё протонный шторм, вызванный вчерашней солнечной вспышкой, что тоже для мозгов не полезно.
Потом наконец-то определился. Решил разрешить PostgreSQL на старом сервере слушать не только localhost, но и внешний интерфейс (изначально очень не хотел это делать из соображений безопасности). Дальше настроил возможность подключения к базе только с IP нового сервера, поправил настройки бота на новом, и всё заработало! Жаль только, что пришлось потерять все данные с момента переноса базы утром (это примерно 6 часов).
В какой-то момент (до переноса) ещё с удивлением обнаружил, что на новом сервере очень мало свободной памяти (около 150 Мб), а около 600 Мб — невыгружаемой. Очень удивлялся, сначала подумал, что за эти годы так раздулось ядро FreeBSD. Но нет, оказалось, что дело в файловой системе zfs и её APC-кеше: он по умолчанию забирал более 500 Мб! Когда ограничил его через vfs.zfs.arc_max, всё стало нормально. Хотя есть подозрения, что те самые сжиравшие процессорное время процессы postgres autovacuum были как-то связаны именно с zfs, так как большую часть времени они выполнялись в system mode, а не user mode.
Ещё перенёс сайт идеалистов с бесплатного сервера от Cloud на прежний VDS. Но тут всё прошло легко и просто. Все настройки сохранились с прежних времён, всё, что требовалось — это перебросить обновлённую базу и пользовательские загруженные файлы, запустить Akkoma и поменять IP-адрес в DNS.
В общем, теперь вроде бы вопрос и с ботом, и с сайтом Идеалистов решён. Посмотрим, как покажет себя новый хостер. Если проблем не вылезет, в апреле, когда закончится оплаченное время на TimeWeb, перенесу к нему и основные сайты.
Второй день работы бота полёт более-менее нормальный, даже несмотря на жёсткие магнитные бури. Вчера была только пара ложных срабатываний на сайт идеалистов, но с учётом того, что к нему подключение не самое прямое — не удивительно. На остальных сайтах ложных срабатываний нет.