Beta
Отказоустойчивый режим App Gateway Connector
Запуск двух или трёх исходящих экземпляров одного коннектора рабочей области, проверка состояния, обновление без простоя и сбор подтверждений для релиза.
Шаги
Выполняйте по порядку.
- 01Понять, нужен ли отказоустойчивый режимИспользуйте его для общих производственных внутренних приложений, а не для личного настольного коннектора.
- 02Подготовить схему запускаИспользуйте одну запись коннектора и один рабочий токен, но отдельный идентификатор для каждого процесса.
- 03Запустить в Kubernetes, systemd или Docker ComposeВыберите тот способ управления процессами, который уже используется для производственных сервисов в сети клиента.
- 04Обслуживать без планового простояВыведите один экземпляр из работы, дождитесь завершения потоков, перезапустите его и только потом переходите к следующему.
- 05Проверить и собрать подтвержденияИспользуйте doctor, состояние в панели, стендовые проверки и длинное окно метрик перед заявлением о производственной отказоустойчивости.
Справочник
Детали реализации для настройки и проверки.
- Корректно: «реализация отказоустойчивого режима готова к стендовой проверке».
- Некорректно: «производственный отказоустойчивый релиз полностью готов», пока не пройдены все проверки релиза.
- Настольная оболочка не является рабочим процессом отказоустойчивого режима. Используйте CLI-коннектор как управляемый серверный процесс.
- Два экземпляра — базовый производственный вариант.
- Три экземпляра нужны при нескольких репликах API BusinessProxy или когда нужен больший запас при обслуживании.
- Размещайте экземпляры на разных серверах или узлах, если нужно переживать отказ отдельного сервера.
- Существующие потоки могут завершиться во время вывода из работы; новые потоки уходят на другой пригодный экземпляр.
- Ротация токена закрывает старые проверенные туннели на всех репликах API.
- Резервная передача остаётся страховочным путём, но в устойчивом состоянии её доля должна быть ниже 1% перед производственным заявлением.
- В рабочей области есть запись App Gateway-коннектора и актуальный рабочий токен.
- Каждый сервер с коннектором достигает API BusinessProxy по исходящему HTTPS и достигает каждого настроенного внутреннего адреса.
- Секреты хранятся в защищённом хранилище платформы, а не в скриншотах, обращениях в поддержку или истории командной строки.
- На серверах с коннектором включена синхронизация времени, чтобы сигналы активности и окна проверок были достоверными.
BUSINESSPROXY_API_URL=https://api.business-proxy.com
CONNECTOR_WORKSPACE_ID=<идентификатор-рабочей-области>
CONNECTOR_ID=<идентификатор-коннектора>
CONNECTOR_TOKEN=<рабочий-токен>
CONNECTOR_INSTANCE_ID=<уникальный-идентификатор-экземпляра>
CONNECTOR_TUNNEL_CONNECTIONS=2
CONNECTOR_DRAIN_ON_EXIT=true
CONNECTOR_DRAIN_TIMEOUT=30s- Не используйте один CONNECTOR_INSTANCE_ID для двух одновременно работающих процессов.
- Начинайте с CONNECTOR_TUNNEL_CONNECTIONS=2, если поддержка не указала другое значение.
- Оставьте CONNECTOR_DRAIN_ON_EXIT=true, чтобы обычный перезапуск сначала прекращал приём новых запросов.
количество_экземпляров * CONNECTOR_TUNNEL_CONNECTIONS >= коэффициент_запаса * число_реплик_API
Пример:
3 экземпляра * 2 туннеля >= 2 * 3 реплики APIset -a
. /etc/businessproxy/connector/common.env
. /etc/businessproxy/connector/instance-a.env
set +a
businessproxy-connector doctor
businessproxy-connector run- Повторите команду на втором сервере или втором процессе с файлом instance-b.env.
- В панели дождитесь, что оба экземпляра в сети и нет предупреждений об устаревшем сигнале или выводе из работы.
apiVersion: apps/v1
kind: Deployment
metadata:
name: businessproxy-connector
spec:
replicas: 2
strategy:
type: RollingUpdate
template:
spec:
terminationGracePeriodSeconds: 60
containers:
- name: connector
image: businessproxy/connector:<версия>
envFrom:
- secretRef:
name: businessproxy-connector-runtime
env:
- name: CONNECTOR_INSTANCE_ID
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: CONNECTOR_DRAIN_ON_EXIT
value: "true"- Добавьте правила исходящего доступа к API BusinessProxy по HTTPS и внутренний доступ к адресам приложений.
- Не публикуйте Kubernetes Service для входящего трафика к коннектору.
[Unit]
Description=BusinessProxy Connector %i
After=network-online.target
Wants=network-online.target
[Service]
EnvironmentFile=/etc/businessproxy/connector/common.env
EnvironmentFile=/etc/businessproxy/connector/%i.env
ExecStart=/usr/local/bin/businessproxy-connector run
Restart=always
RestartSec=5s
TimeoutStopSec=75s
KillSignal=SIGTERM
[Install]
WantedBy=multi-user.target
# Запуск двух экземпляров:
systemctl enable --now businessproxy-connector@instance-a
systemctl enable --now businessproxy-connector@instance-bservices:
connector-a:
image: businessproxy/connector:<версия>
restart: unless-stopped
env_file:
- ./common.env
environment:
CONNECTOR_INSTANCE_ID: connector-a
CONNECTOR_DRAIN_ON_EXIT: "true"
connector-b:
image: businessproxy/connector:<версия>
restart: unless-stopped
env_file:
- ./common.env
environment:
CONNECTOR_INSTANCE_ID: connector-b
CONNECTOR_DRAIN_ON_EXIT: "true"- Не останавливайте все экземпляры сразу, если простой внутреннего приложения не является осознанным действием.
- При штатном последовательном обновлении новые запросы должны восстановиться за несколько секунд.
- Если доля резервной передачи выросла и не вернулась ниже 1%, остановите обновление и проверьте покрытие туннелей.
- Не меняйте токен посреди первого расширения схемы, если нет подозрения на раскрытие токена.
- Держите под рукой пакет отката предыдущей версии, но не откатывайтесь на случайно собранный локальный файл.
businessproxy-connector doctor
# Ожидаемое состояние в панели:
# - коннектор в сети
# - 2 или 3 рабочих экземпляра
# - после обслуживания нет устаревших экземпляров или экземпляров в выводе из работы
# - нет предупреждения о покрытии реплик APInpm run connector:ha-staging-readiness:check -- \
--profile staging \
--env-file /secure/env/businessproxy/connector-ha-staging.env \
--evidence-dir /secure/evidence/businessproxy/connector-ha-staging/readiness
npm run connector:ha-staging-evidence:run -- \
--profile staging \
--env-file /secure/env/businessproxy/connector-ha-staging.env \
--evidence-dir /secure/evidence/businessproxy/connector-ha-staging
npm run connector:ha-long-window-evidence:run -- \
--profile staging \
--env-file /secure/env/businessproxy/connector-ha-long-window.env- Файлы подтверждений не должны содержать токены, частные IP-адреса, внутренние URL, тела запросов или сырой вывод метрик.
- Не закрывайте проверки G3-G9 до прохождения настоящих стендовых подтверждений.
- В сети только один экземпляр: проверьте CONNECTOR_INSTANCE_ID, правило перезапуска сервиса, исходящий HTTPS и рабочий токен.
- Экземпляр остаётся устаревшим: проверьте синхронизацию времени на сервере, журналы процесса и сетевой путь к API BusinessProxy.
- Экземпляр остался в выводе из работы после обслуживания: убедитесь, что старый процесс завершился, а управляющий сервис запустил новый процесс с нужным идентификатором.
- Доля резервной передачи высокая: проверьте покрытие реплик API, число туннелей, насыщение коннектора и частые переподключения.
- Не работает только одно внутреннее приложение: выполните диагностику с каждого сервера коннектора до этого внутреннего адреса, прежде чем менять отказоустойчивую схему.
- Если само внутреннее приложение не работает, коннектор не сделает его исправным.
- Если все экземпляры коннектора запущены на одном отказавшем сервере, отказоустойчивости уровня сервера не будет.
- Если сеть клиента блокирует исходящий HTTPS к BusinessProxy со всех серверов, коннектор не сможет установить туннели.