Задать вопрос
@Artemkaa_2001

Xray Core, можно ли как-то сделать hot reload?

Возможно ли как либо, перезапускать сервис методом Hot Reload?
У меня идёт добавка/удаление пользователя, в config.json, вследствие чего постоянно применяется restart xray.service
И у всех клиентов данного конфига пропадает соединение на 2-5С, хотелось бы это как-то исправить.
При этом у меня около 25 inbounds, и в каждом сидит в среднем по 9 человек.
  • Вопрос задан
  • 315 просмотров
Подписаться 2 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Merion Academy
    Онлайн-курс по сетевым технологиям Huawei
    2 месяца
    Далее
  • Skillfactory
    Управление информационной инфобезопасностью
    11 месяцев
    Далее
  • Merion Academy
    Онлайн-курс по сетевой безопасности
    4 месяца
    Далее
Решения вопроса 1
@Artemkaa_2001 Автор вопроса
Я реализовал систему Hot Reload для XRay, которая позволяет добавлять и удалять пользователей без рестарта сервиса и без потери активных подключений. XRay изначально поддерживает API, через которое можно обновлять клиентов и правила маршрутизации в реальном времени. Обычно при изменении конфига XRay требуется перезапуск, из-за чего возникает короткий даунтайм. Здесь всё сделано так, что изменения применяются сразу, без остановки сервиса.

Добавлением пользователей управляет отдельный скрипт, который распределяет их между группами по принципу баланса нагрузки — он выбирает ту группу, где меньше клиентов, и добавляет туда нового. Скрипт обновляет общий JSON-файл с актуальным состоянием, в котором хранится информация о всех пользователях и группах.

После обновления данных генерируются два JSON-файла: первый содержит объект клиента с нужными inbound-настройками, второй — полный блок routing с обновлёнными правилами. Эти файлы отправляются напрямую в XRay через его API. Сначала обновляются правила (adrules), затем добавляется сам клиент (adu). XRay применяет изменения мгновенно, без перезапуска и без обрыва текущих подключений.

Важно, что при обновлении правил в XRay нужно передавать весь список routing-rules из конфига, а не только изменённую группу — так XRay не теряет остальные маршруты. В результате новая конфигурация подхватывается «на лету»: клиент сразу может подключаться, все старые остаются онлайн, а система балансирует группы автоматически. Это полностью рабочий Hot Reload для XRay, при котором не требуется перезапуск даже при большом числе пользователей.

А в случае перезагрузки Xray, он просто подхватывает всех из config json и всё :)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
TrueBers
@TrueBers
Гуглю за еду
Гугл.
Совсем.
Забанили?

xray никогда не позиционировался фронтендом, это внутренний сервис, который надо закрывать каким-то фронтом, который обеспечит zero-downtime.
Ответ написан
@Drno
нет, изменение json предполагает перезапуск сервиса, чтобы новый json перечитался

посмотрите как это сделано в панелях типа 3x-ui, там есть промежуточное "звено" которое в реалтайме следит за изменениями json
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы