Продвинутые решения: rmngr блокирует rac cluster insert (когда GUI и восстановление не помогли)

Дата: 2026-01-25
Версия 1С: 8.3.27.1989
Контекст: GUI недоступен, восстановление reg_1541 с 1c-server не помогло

Новые подходы к решению

Решение A: Полная очистка + создание кластера в окне инициализации

Идея: Остановить ragent, полностью очистить все каталоги конфигурации (не только reg_1541, но и srvinfo, и другие служебные файлы), затем запустить ragent и сразу же (в течение первых секунд после старта, пока rmngr еще не полностью инициализировался) выполнить rac cluster insert.

Шаги:

  1. Остановить все сервисы 1С:
    bash lxc exec 1c-server-new -- systemctl stop srv1cv8-8.3.27.1989@default.service lxc exec 1c-server-new -- systemctl stop ras-8.3.27.1989.service

  2. Дождаться полной остановки процессов:
    bash # Проверить, что процессы завершились lxc exec 1c-server-new -- bash -c "sleep 5 && ps aux | grep -E 'ragent|rmngr|ras' | grep -v grep" # Должно быть пусто

  3. Полная очистка конфигурации:
    ```bash
    # Создать резервную копию
    lxc exec 1c-server-new -- bash -c "cd /home/usr1cv8/.1cv8/1C/1cv8 && tar czf /tmp/1c-config-backup-$(date +%Y%m%d_%H%M%S).tar.gz ."

# Очистить ВСЕ каталоги конфигурации
lxc exec 1c-server-new -- bash -c "rm -rf /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/"
lxc exec 1c-server-new -- bash -c "rm -rf /home/usr1cv8/.1cv8/1C/1cv8/srvinfo/
"
lxc exec 1c-server-new -- bash -c "rm -f /home/usr1cv8/.1cv8/1C/1cv8/.lst"
lxc exec 1c-server-new -- bash -c "find /home/usr1cv8/.1cv8/1C/1cv8 -name '
.lock' -delete"
```

  1. Запустить только RAS:
    bash lxc exec 1c-server-new -- systemctl start ras-8.3.27.1989.service sleep 2

  2. Запустить ragent и СРАЗУ выполнить cluster insert:
    ```bash
    # Запустить ragent в фоне
    lxc exec 1c-server-new -- systemctl start srv1cv8-8.3.27.1989@default.service

# Подождать 2-3 секунды (ragent начал старт, но rmngr еще не полностью инициализирован)
sleep 3

# СРАЗУ выполнить cluster insert
lxc exec 1c-server-new -- bash -c "timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac cluster insert --host=localhost --port=1541 --name=cluster1 localhost:1545"
```

  1. Проверить результат:
    bash lxc exec 1c-server-new -- bash -c "timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac cluster list localhost:1545"

Плюсы: Использует "окно" между стартом ragent и полной инициализацией rmngr.
Минусы: Требует точного тайминга; может не сработать, если rmngr инициализируется слишком быстро.


Решение B: Временная остановка rmngr через kill

Идея: После запуска ragent найти PID процесса rmngr и временно остановить его (SIGSTOP), выполнить rac cluster insert, затем возобновить (SIGCONT).

Шаги:

  1. Убедиться, что ragent и RAS запущены:
    bash lxc exec 1c-server-new -- systemctl is-active srv1cv8-8.3.27.1989@default.service ras-8.3.27.1989.service

  2. Найти PID rmngr:
    bash RMNGR_PID=$(lxc exec 1c-server-new -- bash -c "ps aux | grep '[r]mngr' | awk '{print \$2}' | head -1") echo "rmngr PID: $RMNGR_PID"

  3. Остановить rmngr (SIGSTOP - приостановка, не завершение):
    bash lxc exec 1c-server-new -- kill -STOP $RMNGR_PID

  4. Проверить, что порт 1541 освободился:
    bash lxc exec 1c-server-new -- bash -c "ss -tlnp | grep 1541" # Должно быть пусто или показать, что процесс приостановлен

  5. Выполнить cluster insert:
    bash lxc exec 1c-server-new -- bash -c "timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac cluster insert --host=localhost --port=1541 --name=cluster1 localhost:1545"

  6. Возобновить rmngr:
    bash lxc exec 1c-server-new -- kill -CONT $RMNGR_PID

  7. Проверить результат:
    bash lxc exec 1c-server-new -- bash -c "timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac cluster list localhost:1545"

Важно: SIGSTOP приостанавливает процесс, но не освобождает порт. Нужно проверить, действительно ли порт освобождается. Если нет — этот метод не сработает.

Альтернатива: Использовать kill -TERM для завершения rmngr, выполнить cluster insert, затем ragent должен автоматически перезапустить rmngr. Но это рискованно — ragent может не перезапустить rmngr корректно.

Плюсы: Прямое воздействие на процесс.
Минусы: Может не освободить порт; риск нестабильности.


Решение C: Использование другого порта с полной миграцией

Идея: Настроить ragent на использование regport 1542 (через SRV1CV8_REGPORT=1542), полностью очистить старые данные, создать кластер на порту 1542, затем при необходимости вернуться к 1541.

Шаги:

  1. Остановить сервисы:
    bash lxc exec 1c-server-new -- systemctl stop srv1cv8-8.3.27.1989@default.service

  2. Настроить regport 1542:
    bash lxc exec 1c-server-new -- systemctl edit srv1cv8-8.3.27.1989@default.service
    Добавить:
    ini [Service] Environment=SRV1CV8_REGPORT=1542

  3. Очистить старые данные:
    bash lxc exec 1c-server-new -- bash -c "rm -rf /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/*" lxc exec 1c-server-new -- bash -c "rm -rf /home/usr1cv8/.1cv8/1C/1cv8/srvinfo/*"

  4. Запустить сервисы:
    bash lxc exec 1c-server-new -- systemctl start ras-8.3.27.1989.service lxc exec 1c-server-new -- systemctl start srv1cv8-8.3.27.1989@default.service sleep 5

  5. Создать кластер на порту 1542:
    bash lxc exec 1c-server-new -- bash -c "timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac cluster insert --host=localhost --port=1542 --name=cluster1 localhost:1545"

  6. Проверить:
    bash lxc exec 1c-server-new -- bash -c "timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac cluster list localhost:1545"

Плюсы: Обходит конфликт на 1541, используя свободный 1542.
Минусы: Кластер будет на 1542, а не на 1541; может потребоваться настройка клиентов/пробросов портов.


Решение D: Проверка и использование существующего кластера через rac cluster list

Идея: Возможно, кластер уже создан автоматически при старте ragent, но просто не виден через rac cluster list из-за проблем с RAS или таймаутов. Попробовать разные способы получения информации о кластере.

Шаги:

  1. Проверить файлы кластера напрямую:
    bash lxc exec 1c-server-new -- bash -c "ls -la /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/" lxc exec 1c-server-new -- bash -c "cat /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/1CV8Clst.lst 2>/dev/null | head -50"

  2. Попробовать rac cluster list с разными таймаутами:
    ```bash
    # Короткий таймаут
    lxc exec 1c-server-new -- bash -c "timeout 5 /opt/1cv8/x86_64/8.3.27.1989/rac cluster list localhost:1545"

# Длинный таймаут
lxc exec 1c-server-new -- bash -c "timeout 30 /opt/1cv8/x86_64/8.3.27.1989/rac cluster list localhost:1545"

# Без таймаута (осторожно!)
lxc exec 1c-server-new -- bash -c "/opt/1cv8/x86_64/8.3.27.1989/rac cluster list localhost:1545"
```

  1. Проверить через прямое подключение к ragent (если возможно):
    bash # Попробовать получить информацию напрямую lxc exec 1c-server-new -- bash -c "netcat localhost 1540 < /dev/null" 2>&1

  2. Если в файлах есть информация о кластере, попробовать извлечь UUID:
    ```bash
    CLUSTER_UUID=$(lxc exec 1c-server-new -- bash -c "grep -i 'cluster|uuid' /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/1CV8Clst.lst 2>/dev/null | head -1 | grep -oE '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' | head -1")
    echo "Найденный UUID: $CLUSTER_UUID"

# Если UUID найден, попробовать использовать его
if [ -n "$CLUSTER_UUID" ]; then
lxc exec 1c-server-new -- bash -c "timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac server list --cluster=$CLUSTER_UUID localhost:1545"
fi
```

Плюсы: Может обнаружить уже существующий кластер, который просто не виден через стандартные команды.
Минусы: Если кластера действительно нет, это не поможет.


Решение E: Использование rac cluster insert с параметром --force или другими опциями

Идея: Проверить, есть ли у rac cluster insert параметры, которые позволяют "перезаписать" существующий кластер или обойти проверку порта.

Шаги:

  1. Изучить справку rac cluster insert:
    bash lxc exec 1c-server-new -- bash -c "/opt/1cv8/x86_64/8.3.27.1989/rac help cluster insert"

  2. Попробовать различные варианты команды:
    ```bash
    # С дополнительными параметрами
    lxc exec 1c-server-new -- bash -c "timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac cluster insert --host=localhost --port=1541 --name=cluster1 --security-level=0 localhost:1545"

# Попробовать указать другой порт ragent (если поддерживается)
# lxc exec 1c-server-new -- bash -c "timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac cluster insert --host=localhost --port=1541 --name=cluster1 --agent-port=1540 localhost:1545"
```

  1. Проверить логи ragent и RAS на предмет подсказок:
    bash lxc exec 1c-server-new -- journalctl -u srv1cv8-8.3.27.1989@default.service --no-pager -n 100 | grep -i 'cluster\|port\|error' lxc exec 1c-server-new -- journalctl -u ras-8.3.27.1989.service --no-pager -n 100 | grep -i 'cluster\|port\|error'

Плюсы: Может обнаружить скрытые параметры или причины ошибки.
Минусы: Может не быть таких параметров.


Рекомендуемый порядок применения

  1. Решение D — проверить, не создан ли кластер уже (быстро, без риска).
  2. Решение A — полная очистка + создание в окне инициализации (средний риск).
  3. Решение C — использование порта 1542 (если допустимо изменение порта).
  4. Решение E — изучение параметров rac (низкий риск, может дать информацию).
  5. Решение B — остановка rmngr через kill (высокий риск, использовать в последнюю очередь).

Важные замечания

  • Всегда создавайте резервные копии перед экспериментами.
  • Проверяйте логи после каждого шага: journalctl -u srv1cv8-8.3.27.1989@default.service -f
  • Если ни одно решение не помогло, возможно, проблема в самой версии 8.3.27.1989 — рассмотрите откат на 8.3.27.1786 или обращение в поддержку 1С.

Связанные документы