Продвинутые решения: 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С:
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 -
Дождаться полной остановки процессов:
bash # Проверить, что процессы завершились lxc exec 1c-server-new -- bash -c "sleep 5 && ps aux | grep -E 'ragent|rmngr|ras' | grep -v grep" # Должно быть пусто -
Полная очистка конфигурации:
```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"
```
-
Запустить только RAS:
bash lxc exec 1c-server-new -- systemctl start ras-8.3.27.1989.service sleep 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"
```
- Проверить результат:
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).
Шаги:
-
Убедиться, что ragent и RAS запущены:
bash lxc exec 1c-server-new -- systemctl is-active srv1cv8-8.3.27.1989@default.service ras-8.3.27.1989.service -
Найти 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" -
Остановить rmngr (SIGSTOP - приостановка, не завершение):
bash lxc exec 1c-server-new -- kill -STOP $RMNGR_PID -
Проверить, что порт 1541 освободился:
bash lxc exec 1c-server-new -- bash -c "ss -tlnp | grep 1541" # Должно быть пусто или показать, что процесс приостановлен -
Выполнить 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" -
Возобновить rmngr:
bash lxc exec 1c-server-new -- kill -CONT $RMNGR_PID -
Проверить результат:
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.
Шаги:
-
Остановить сервисы:
bash lxc exec 1c-server-new -- systemctl stop srv1cv8-8.3.27.1989@default.service -
Настроить regport 1542:
bash lxc exec 1c-server-new -- systemctl edit srv1cv8-8.3.27.1989@default.service
Добавить:
ini [Service] Environment=SRV1CV8_REGPORT=1542 -
Очистить старые данные:
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/*" -
Запустить сервисы:
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 -
Создать кластер на порту 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" -
Проверить:
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 или таймаутов. Попробовать разные способы получения информации о кластере.
Шаги:
-
Проверить файлы кластера напрямую:
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" -
Попробовать 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"
```
-
Проверить через прямое подключение к ragent (если возможно):
bash # Попробовать получить информацию напрямую lxc exec 1c-server-new -- bash -c "netcat localhost 1540 < /dev/null" 2>&1 -
Если в файлах есть информация о кластере, попробовать извлечь 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 параметры, которые позволяют "перезаписать" существующий кластер или обойти проверку порта.
Шаги:
-
Изучить справку rac cluster insert:
bash lxc exec 1c-server-new -- bash -c "/opt/1cv8/x86_64/8.3.27.1989/rac help 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 --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"
```
- Проверить логи 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'
Плюсы: Может обнаружить скрытые параметры или причины ошибки.
Минусы: Может не быть таких параметров.
Рекомендуемый порядок применения
- Решение D — проверить, не создан ли кластер уже (быстро, без риска).
- Решение A — полная очистка + создание в окне инициализации (средний риск).
- Решение C — использование порта 1542 (если допустимо изменение порта).
- Решение E — изучение параметров rac (низкий риск, может дать информацию).
- Решение B — остановка rmngr через kill (высокий риск, использовать в последнюю очередь).
Важные замечания
- Всегда создавайте резервные копии перед экспериментами.
- Проверяйте логи после каждого шага:
journalctl -u srv1cv8-8.3.27.1989@default.service -f - Если ни одно решение не помогло, возможно, проблема в самой версии 8.3.27.1989 — рассмотрите откат на 8.3.27.1786 или обращение в поддержку 1С.