Решение проблемы таймаутов и "Broken pipe" в командах rac 1С

Дата: 2026-01-25
Контейнер: 1c-server-new
Версия 1С: 8.3.27.1989
Проблема: Команды rac infobase summary list и rac server list уходят в таймаут, в выводе rac есть сообщение "Broken pipe"

Обнаруженная проблема

Симптомы

  1. ✅ Регистрация базы prod_dev завершена (скрипт сообщил об успехе)
  2. ❌ База prod_dev НЕ найдена в конфигурации кластера (/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/1CV8Clst.lst)
  3. ❌ Команды rac infobase summary list и rac server list уходят в таймаут
  4. ❌ Команда rac cluster list возвращает "Ошибка установки соединения с кластером серверов"
  5. ⚠️ В выводе rac есть сообщение "Broken pipe" — указывает на нестабильность соединения

Диагностика

Проверка портов:

lxc exec 1c-server-new -- ss -tlnp | grep -E '1540|1541|1545'

Результат:
- ✅ Порт 1545 (RAS) — слушает
- ❌ Порт 1540 (ragent) — НЕ слушает (хотя процесс запущен)
- ❌ Порт 1541 (rmngr) — НЕ слушает (хотя процесс запущен)

Проверка процессов:

lxc exec 1c-server-new -- ps aux | grep -E 'ragent|rmngr|ras'

Результат:
- ✅ ragent — запущен (PID: 50634)
- ✅ rmngr — запущен (PID: 50651)
- ✅ ras — запущен (PID: 22441)

Проблема: Процессы запущены, но порты не слушают. Это указывает на проблему с инициализацией или привязкой к портам.

Причина проблемы

Основная причина

Процессы ragent и rmngr запущены, но не могут привязаться к портам 1540 и 1541. Это может быть из-за:

  1. Неполная инициализация кластера — кластер создан, но компоненты не полностью инициализированы
  2. Проблемы с правами доступа — процессы не могут привязаться к портам
  3. Конфликт портов — порты заняты другими процессами (маловероятно, т.к. ss не показывает их)
  4. Проблемы с конфигурацией сети в контейнере — LXD контейнер может иметь ограничения

Вторичные проблемы

  • База prod_dev не зарегистрирована — несмотря на сообщение скрипта об успехе, база не появилась в конфигурации кластера
  • Таймауты команд rac — из-за недоступности портов 1540 и 1541 команды не могут установить соединение
  • "Broken pipe" — следствие нестабильного соединения с кластером

Решения

Решение 1: Перезапуск сервисов с ожиданием инициализации (рекомендуется первым)

Шаги:

  1. Остановить сервисы:
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
  1. Подождать полной остановки:
sleep 5
  1. Запустить сервисы:
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
  1. Подождать инициализации (30-60 секунд):
sleep 30
  1. Проверить порты:
lxc exec 1c-server-new -- ss -tlnp | grep -E '1540|1541|1545'
  1. Проверить кластер:
lxc exec 1c-server-new -- timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac cluster list localhost:1545

Ожидаемый результат:
- Порты 1540, 1541, 1545 слушают
- Команда rac cluster list возвращает информацию о кластере

Решение 2: Проверка и восстановление конфигурации кластера

Если порты все еще не слушают:

  1. Проверить конфигурацию кластера:
lxc exec 1c-server-new -- cat /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/1CV8Clst.lst | head -20
  1. Проверить права доступа:
lxc exec 1c-server-new -- ls -la /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/
  1. Проверить логи ragent:
lxc exec 1c-server-new -- journalctl -u srv1cv8-8.3.27.1989@default.service --no-pager -n 100 | grep -i 'error\|fail\|bind\|port'

Решение 3: Пересоздание кластера (если предыдущие не помогли)

⚠️ ВНИМАНИЕ: Это удалит текущую конфигурацию кластера. Убедитесь, что у вас есть резервная копия.

Шаги:

  1. Остановить сервисы:
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
  1. Создать резервную копию конфигурации:
lxc exec 1c-server-new -- bash -c "cp -r /home/usr1cv8/.1cv8/1C/1cv8/reg_1541 /home/usr1cv8/.1cv8/1C/1cv8/reg_1541.backup.$(date +%Y%m%d_%H%M%S)"
  1. Очистить конфигурацию (опционально, только если нужно):
# Только если предыдущие решения не помогли
lxc exec 1c-server-new -- bash -c "rm -rf /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/*"
  1. Запустить сервисы:
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 10
  1. Пересоздать кластер:
lxc exec 1c-server-new -- bash -c "/opt/1cv8/x86_64/8.3.27.1989/rac cluster insert --host=localhost --port=1541 --name=cluster1 localhost:1545"
  1. Проверить кластер:
lxc exec 1c-server-new -- timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac cluster list localhost:1545
  1. Повторно зарегистрировать базу данных:
cd /home/cdto/DENKART
# Установить переменные окружения
export DB_NAME=prod_dev
export DB_SERVER=10.218.14.79
export DB_USER=usr1cv8
export DB_PASSWORD=$(./scripts/get-secret.sh POSTGRES_1C_PASSWORD)
export INFOBASE_NAME=prod_dev
export LOCALE=ru_RU

# Запустить скрипт регистрации
./scripts/register_1c_infobase.sh 1c-server-new

Решение 4: Проверка регистрации базы prod_dev

После восстановления соединения с кластером:

  1. Проверить наличие базы в кластере:
lxc exec 1c-server-new -- bash -c "grep -i prod_dev /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/1CV8Clst.lst"
  1. Если база не найдена, зарегистрировать вручную:
# Получить UUID кластера
CLUSTER_UUID=$(lxc exec 1c-server-new -- bash -c "/opt/1cv8/x86_64/8.3.27.1989/rac cluster list localhost:1545 | grep '^cluster' | awk '{print \$3}'")

# Получить пароль
PGPASS=$(./scripts/get-secret.sh POSTGRES_1C_PASSWORD)

# Зарегистрировать базу
lxc exec 1c-server-new -- bash -c "/opt/1cv8/x86_64/8.3.27.1989/rac infobase create \
  --name=prod_dev \
  --dbms=PostgreSQL \
  --db-server=10.218.14.79 \
  --db-name=prod_dev \
  --db-user=usr1cv8 \
  --db-pwd='$PGPASS' \
  --locale=ru_RU \
  --cluster=$CLUSTER_UUID \
  localhost:1545"
  1. Проверить регистрацию:
lxc exec 1c-server-new -- bash -c "timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac infobase summary list localhost:1545"

Проверка работоспособности

После применения решений

  1. Проверить порты:
lxc exec 1c-server-new -- ss -tlnp | grep -E '1540|1541|1545'

Ожидается: Все три порта слушают

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

Ожидается: Вывод информации о кластере без ошибок

  1. Проверить рабочие серверы:
CLUSTER_UUID=$(lxc exec 1c-server-new -- bash -c "/opt/1cv8/x86_64/8.3.27.1989/rac cluster list localhost:1545 | grep '^cluster' | awk '{print \$3}'")
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"

Ожидается: Список рабочих серверов без таймаутов

  1. Проверить информационные базы:
lxc exec 1c-server-new -- bash -c "timeout 10 /opt/1cv8/x86_64/8.3.27.1989/rac infobase summary list localhost:1545"

Ожидается: Список баз данных, включая prod_dev, без таймаутов

  1. Проверить базу в конфигурации:
lxc exec 1c-server-new -- bash -c "grep -i prod_dev /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/1CV8Clst.lst"

Ожидается: Найдена запись о базе prod_dev

Профилактика

Рекомендации для предотвращения проблемы

  1. Мониторинг портов:
  2. Регулярно проверять, что порты 1540, 1541, 1545 слушают
  3. Настроить мониторинг через скрипт или систему мониторинга

  4. Правильная последовательность запуска:

  5. Сначала запускать RAS (порт 1545)
  6. Затем запускать ragent (порт 1540)
  7. Дождаться полной инициализации перед использованием rac команд

  8. Резервное копирование конфигурации:

  9. Регулярно создавать резервные копии /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/
  10. Особенно перед изменениями конфигурации кластера

  11. Логирование:

  12. Регулярно проверять логи сервисов на наличие ошибок
  13. Настроить ротацию логов

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


Статус: ⚠️ Требуется применение решений
Приоритет: Высокий
Дата последнего обновления: 2026-01-25