пятница, 18 октября 2019 г.

Proxmox VE: Replication Job failed

        Нас долгое время задалбывали рандомные варнинги приходящие от ProxmoxVE - Replication Job failed.  Какой-то дополнительной информации - что именно пошло не так и где proxmox не предоставляет. Вообще в этой системе с документацией туго,  и пул реквест им не пришлешь. Зато есть платная поддержка. 
               Эта хрень приходила в почту несколько месяцев,  админы все время грозились что-то сделать, но как-то у них не очень получалось. Мне как начальнику делать нехер, поэтому я закатав рукава полез внутрь proxmox. Внутри там с одной стороны все довольно красиво написано, API, плагины, код не плохого качества. С другой стороны - это все на перле. Никогда не думал что придется вспоминать перл, но как говорится никогда не говори никогда. 
          Оказалось что варнинги выбрасывались заданиями по репликации виртуальных машин с одного сервера на другой. Если быть более точным - реплицировались не сами виртуалки, а снэпшоты сделанные с виртуалки. Причем обычно все отрабатывало штатно, а в некоторых случаях (примерно 10%) это заканчивалось ничем. С чем это было связано - непонятно.
            Покопавшись в коде выяснил что "репликация" производится путем выполнения команд через shell, с каким-то таймаутом.  Если команды не укладывается в заданный таймаут - процесс завершается ошибкой. Никаких настроек типа "таймаут такой-то" в конфигах ProxmoxVE нет. Есть только магические чиселки, прямо в перловом коде. Чиселок много, они разным способом перетирают друг друга, комментарии в коде - это тоже для слабоков.     
            В общем если вас преследует аналогичная проблема, то в случае ZFS менять таймаут нужно в PVE/Storage/ZFS/PoolPlugin.pm, строка 185:
Если вы используете другой сторадж - логично будет посмотреть в других модулях директории PVE/Storage. Место установки  перловых модулей зависит от системы, у меня они лежат в /usr/share/perl5/

Комментариев нет:

Отправить комментарий