С 1 сентября для продолжения нормального использования доменов в зонах .ru,.su и .рф придётся подтверждать личность через Госуслуги. Мне было в падлу, да и
porno4free.ru спустя три года уже не кажется таким забавным доменом, поэтому я просто купил новый. И тут я вспомнил, что переезд на другой домен просто так не пройдет. На старом домене у меня уже два года жил собственный XMPP-сервер на Prosody.
Prosody я когда-то выбрал за его лёгкость. Он нормально работает на древних пк аля Sempron 2600+ с полтора гига оперативной памяти под OpenBSD и при желании его вообще можно захостить на роутере. Потом у меня появились три
Dell Wyse 3040. Изначально я рассчитывал, что два из них заберут другие люди, но в итоге оба отказались, и все три компьютера остались у меня. Продавать их мне было в падлу, поэтому они просто валялись без дела.
После очередных приколов с электричеством мне захотелось собрать отказоустойчивый кластер: несколько XMPP-нод, общая база, синхронизация состояния, GeoDNS и возможность пережить падение одной машины. Prosody не подходил, потому что он не поддерживает кластеризацию, а у ejabberd кластеризация есть из коробки. Так и началась миграция. Заодно я решил исполнить мечту детства № 1337 - поднять собственные авторитативные DNS-серверы. Установил Knot DNS на три VPS, настроил базовую обвязку и оно даже начало резолвиться. Правда, тут обнаружился нюанс с GeoDNS. Обычно он видит географию рекурсивного DNS-резолвера, а не самого клиента, если резолвер не передаёт EDNS Client Subnet. Поэтому через публичный DNS пользователь может получить европейский адрес, а через DNS российского провайдера — российский. В итоге GeoDNS я всё же сделал, и в целом он работает: правда тестировал только в мобильных сетях, а в наше время, чтобы прочитать этот пост нужно использовать использовать что-нибудь страшное, так что пофиг.
В итоге получилось две ноды ejabberd, nginx, HAProxy, PostgreSQL с репликацией и автоматическим переключением, общее файловое хранилище и watchdog. Два компа в разных районах и две впски.
Конечно же, без обсеров никуда.
Самый болезненный был связан с загрузкой файлов. Её обслуживали две ноды: слот создавался на одной, а nginx мог отправить сам файл на другую ноду. В результате примерно половина файлов терялась. А может, и больше. Была также классика: несколько раз делал опечатки в конфигах. То база отваливалась, то ещё что-нибудь ломалось.
Но самый обидный затуп произошёл, когда я минут пятнадцать не мог понять, почему сообщения не синхронизируются. Оказалось, я просто смотрел не на тот аккаунт.