BI Consult Desktop Logo BI Consult Mobile Logo
  • Russian BI Исследование российских bi
  • Перейти на Fine BI
  • Контакты
  • +7 812 334-08-01
    +7 499 608-13-06
  • Отправить сообщение
  • Главная
  • Продукты Эксперт-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Сельское хозяйство
    • Энергетика
    • FMCG
    • Девелоперы
    • Маркетплейсы
    • Пищевая промышленность
    • Фармацевтика
    • Построение Data Platform
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и FP&A
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • IBP
    • ИТ (CIO)
    • Закупки
  • Платформы
    • Системы бизнес-анализа (BI)
    • Интегрированное бизнес-планирование (IBP)
    • Хранилища данных (DWH / Lakehouse)
    • Каталоги данных (Data Catalog)
    • Системы ETL и ELT
    • AI / Исскуственный интеллект
    • Шина данных (ESB)
    • Система управления мастер-данными (MDM)
    • Семантический слой
  • Услуги
    • Переход на отечественные BI и DWH системы
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений и DWH
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Greenplum
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt (Data Build Tool)
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

BI

  • FineBI
  • FineReport
  • FineDataLink
  • FineChatBI (FineAI)
  • Коннекторы данных из 1С в BI
  • Airflow / Nifi
  • Visiology
  • PIX BI
  • Modus BI
  • Yandex.DataLens
  • Open-source BI: Superset/Metabase
  • Luxms BI
  • AW BI + Alpha BI
  • FlyBI + Форсайт. Аналитическая Платформа
  • Loginom
  • Триафлай
  • AI / Исскуственный интеллект
  • Optimacros
  • Навигатор BI
  • Семантический слой

СУБД

  • Arenadata
  • ClickHouse
  • Greenplum
  • Postgres Professional
  • TData

Другое

  • Построение Data Platform
    • Аналитическое хранилище данных
    • Data Lake и Data Engineering
    • Подробнее про Data Lake
    • Внедрение Lakehouse
      • Apache Doris
      • StarRocks
      • Trino
    • Миграция витрин из пропиетарных DWH на новый стек
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Курсы по системам бизнес-анализа и методологии » Учебный курс Современная архитектура хранилища данных » Администрирование Hadoop » Высокодоступность HDFS: NameNode HA, JournalNode и Quorum Journal

Высокодоступность HDFS: NameNode HA, JournalNode и Quorum Journal

В современных кластерах Hadoop высокодоступность (HA) HDFS является ключевым элементом эксплуатации хранения данных. Потери доступности метаданных NameNode приводят к простою всего кластера, поэтому архитектура HA строится вокруг двух копий NameNode (Active и Standby), общего журнала изменений и координации Failover через ZooKeeper Failover Controller. Реализация требует четкого разделения ролей, согласованных путей записи метаданных и строгого тестирования сценариев отказа. В данной главе раскрываются принципы архитектуры, механизмы согласования и практические шаги по развёртыванию, настройке и эксплуатации NameNode HA с JournalNode и Quorum Journal Manager (QJM).

 

Краткое введение

Высокодоступность HDFS достигается за счёт разделения ролей между двумя NameNode‑instance: Active и Standby. Active NameNode обрабатывает клиентские запросы и записывает метаданные в локальные хранилища и в общий журнал редактирования через JournalNode. Standby NameNode поддерживает актуальные копии структур метаданных, загружает последнюю копию fsimage и применяет редактирования из журнала, чтобы быть готовым к быстрому переключению в случае отказа. Центральную роль в консенсусе между узлами играют JournalNode и Quorum Journal Manager (QJM), а автоматическое переключение осуществляется через ZKFC - ZooKeeper Failover Controller, который координирует выбор активного NameNode и предотвращает ситуации split-brain.

  • Архитектура HA в HDFS строится вокруг трех элементов: Active/Standby NameNode, JournalNode по всему кластеру, и ZKFC для безопасного переключения.
  • Журнал редактирования (edits log) передаётся из Active NameNode в JournalNodes и считывается Standby NameNode для поддержания консистентности метаданных.
  • Безопасность и устойчивость к сбоям достигаются через управление состоянием NameNode в рамках кворума JournalNodes и через координацию с ZooKeeper.

     

Архитектура NameNode HA: активная и резервная копии

NameNode хранит критические данные о структуре файлов, размещении блоков и метаданных каталогов. В HA две копии NameNode разделяют функциональные роли: одна активна, другая находится в режиме ожидания. Активная нода обрабатывает все обновления и клиентские запросы, но записи об изменениях дубликаты сохраняет в журнал редактирования, доступный через JournalNode. Standby NameNode поддерживает актуальную копию состояния и готов перейти в активный режим, минимизируя простой.

Ключевые принципы, лежащие в основе этого подхода:

  • консистентность метаданных достигается за счёт единого потока изменений, записываемого в journal через JournalNode;
  • мониторинг и координацию выполняют ZKFC и ZooKeeper, что исключает одновременную активность двух нод и предотвращает split-brain;
  • восстановление после сбоя происходит за счёт загрузки fsimage на Standby и применения накопленных редактирований из журнала.

Потоки взаимодействия можно описать так: клиент отправляет транзакционные запросы на Active NameNode; изменения на уровне файловой системы записываются в локальный журнал редактирования и реплицируются в JournalNodes. Standby NameNode начинает получать и воспроизводить редактирования из журнала для синхронизации с Active и поддержания актуального состояния. При возникновении отказа Active NameNode, ZKFC инициирует процедуру выбора нового активного узла, и Standby становится активной. После переключения новый Active продолжает обработку запросов, а прежний актив переходит в Standby и ресинхронизируется.

Для эффективной реализации HA критически важно обеспечить согласование между JournalNodes: минимальный кворум должен быть достигнут, чтобы единственный набор редактирований считался валидным и мог быть применён Standby. В этом контексте численный порог кворума определяется степенью отказоустойчивости кластера: чаще всего рекомендуется 3 JournalNodes (3-out-of-3) или 5 JournalNodes (5-out-of-5) в зависимости от требований к отказоустойчивости и доступности сети.

 

JournalNode и Quorum Journal Manager

JournalNode представляет собой набор сервисов, который хранит журнал редактирования публикуемого Active NameNode. В составе HA кластеров JournalNode обычно развёртываются на отдельных машинах и образуют кворум, обеспечивающий консистентность журналов. Quorum Journal Manager (QJM) - это механизм координации записи редактирований в JournalNodes, обеспечивающий согласование и отказоустойчивость.

 

Основные принципы работы:

  • All writes of edits from Active NameNode отправляются в JournalNodes через QJM. JournalNodes сохраняют последовательность редактирований, создавая надёжный источник правды для Standby NameNode.
  • Standby NameNode подписывается на обновления журнала и по мере необходимости воспроизводит редактирования, применяя их к своей локальной копии fsimage и служебных структур.
  • QJM обеспечивает консистентность и предотвращает рассинхронизацию между узлами, даже если часть JournalNodes временно недоступна.

Минимальная конфигурация предполагает три JournalNodes, которые образуют мажорный кворум. В случае отказа одного узла кворум сохраняется, и журнал продолжает существовать. При этом чрезвычайно важно обеспечить сетевую надёжность между JournalNodes и NameNodes, поскольку задержки и потери пакетов могут привести к расхождениям во времени применения редактирований.

Ниже приведён упрощённый пример конфигурации для использования QJM в файлах настройки:


  dfs.nameservices
  mycluster


  dfs.ha.namenodes.mycluster
  nn1,nn2


  dfs.namenode.rpc-address.mycluster.nn1
  host1:8020


  dfs.namenode.rpc-address.mycluster.nn2
  host2:8020


  dfs.namenode.shared.edits.dir
  qjournal://host1:8485;host2:8485;host3:8485/mycluster


  ha.zookeeper.quorum
  zk1:2181,zk2:2181,zk3:2181


  dfs.ha.automatic-failover.enabled
  true

В данном примере:

  • три JournalNodes образуют кворум; адреса JournalNode указанны в формате qjournal://host: port;
  • конфигурация требует наличия ZooKeeper и ZKFC на NameNode для автоматического переключения;
  • параметр dfs.namenode.shared.edits.dir указывает на журнал, которым управляет QJM.

Роль JournalNode в контексте масштабирования - это не только узлы хранения редактирований, но и элемент устойчивости к задержкам сети и сбоям. В случаях, когда JournalNodes временно недоступны, Active NameNode может продолжать обслуживать запросы, но Standby не сможет полноценно поддерживать актуальную копию до восстановления доступности журнала. Именно поэтому планирование емкости JournalNode, резервирования и мониторинга являются неотъемлемой частью развёртывания HA.

 

Конфигурация и развёртывание

Развёртывание HA в HDFS требует согласованного подхода к конфигурации NameNode, JournalNode и ZooKeeper. В процессе развёртывания следует учитывать размер кластера, требования к задержкам и требования к непрерывной доступности данных. Основные шаги включают:

  • проектирование топологии кворума JournalNodes и распределение журнала на узлы;
  • настройка ZooKeeper и ZKFC на каждом NameNode;
  • конфигурацию клиентов HDFS для поддержки переключения (Failover Proxy) и указание соответствующего Nameservice;
  • планирование процедур тестирования отказов и аварийного восстановления.

     

Практические рекомендации:

  • используйте как минимум 3 JournalNodes и обеспечьте их высокую доступность и независимость от рабочих узлов NameNode;
  • выделите достаточное время на тестирование сценариев отказа, включая падение узла JournalNode, сетевые разрывы и задержки;
  • регулярно обновляйте конфигурации и тестируйте совместимость с новой версией Hadoop;
  • внедрите мониторинг, охватывающий все компоненты HA: Active/Standby NameNode, JournalNodes и ZooKeeper.

Пример команды развёртывания JournalNode и базовой проверки доступности:

## Запуск JournalNode на узле
sudo -u hdfs hadoop-daemon.sh start journalnode

## Проверка статуса JournalNode
jps | grep JournalNode

Эти команды демонстрируют базовую операционную практику, однако реальная инфраструктура требует использования системного менеджера и мониторинга, соответствующего принятым inside-организационным процессам.

 

Механизмы failover и мониторинг

Автоматическое переключение между NameNode осуществляется через ZKFC, который работает на каждом NameNode и взаимодействует с ZooKeeper. Основная идея состоит в том, что ZKFC следит за доступностью активной ноды, состоянием журнала и сетевой связностью. Если активная нода перестала отвечать или не может записывать в журнал, ZKFC инициирует переключение, и Standby NameNode становится активной. Это позволяет минимизировать время простоя и снижает риск разделенных мозгов.

 

Мониторинг HA включает:

  • веб-интерфейсы NameNode (Active и Standby) для статуса, логов и очередей редактирований;
  • JMX и метрики JournalNode (скорость записи, задержки, диск и сеть);
  • состояние ZooKeeper и ZKFC (кворумы, выбор активной ноды, события).
  • систематические тесты отказа, в рамках которых симулируются сбои NameNode, JournalNode и сетевых компонентов, чтобы проверить корректность переключений и синхронизацию Standby.

     

Практические аспекты мониторинга:

  • регулярно проверяйте, что dfs.ha.automatic-failover.enabled включен и ZKFC запущен на обоих NameNode;
  • анализируйте журналы NameNode на предмет задержек в применении редактирований и конфликтов;
  • держите под контролем задержки репликации журнального потока через JournalNodes;
  • интегрируйте систему мониторинга с уведомлениями (PagerDuty/Slack и т.п.) на основе пороговых значений задержек и статуса нод.

Ключевым элементом эксплуатационной устойчивости является детальное тестирование сценариев отказа в контролируемой среде, включая симуляцию потери сети между JournalNode и NameNode, а также принудительное переключение. Это позволяет проверить корректность поведения кворумной логики и оценить фактическое время простоя при разных сценариях.

 

Безопасность, эксплуатация и лучшие практики

Обеспечение безопасности HA-решения требует внимания к аутентификации и авторизации. Kerberos часто применяется в средах Hadoop, включая HA-конфигурации, чтобы надёжно идентифицировать службы и пользователей, участвующих в операции NameNode и JournalNode. Важные моменты:

  • настройка Kerberos‑аутентификации на всех узлах HA, включая JournalNodes и ZKFC;
  • контроль доступа к журналу редактирования и fsimage через соответствующие права;
  • регулярное обновление сертификатов и управление ключами.

     

Процессы эксплуатации должны учитывать:

  • плановую замену узлов JournalNode без потери доступности;
  • резервное копирование fsimage и edit log в сочетании с устойчивыми к сбоям хранилищами;
  • мониторинг пропускной способности сети, так как задержки между Active NameNode и JournalNodes напрямую влияют на время переключения и консистентность.

     

Лучшие практики:

  • используйте отдельные сети или VLAN для коммуникаций между NameNode, JournalNodes и ZooKeeper, чтобы минимизировать задержки и изоляцию;
  • держите на каждом NameNode совместимые версии компонентов (HDFS, ZK, JournalNode) и избегайте смешивания несовместимых версий;
  • регулярно обновляйте конфигурации дисков и файловых систем с учётом роста объёма метаданных и редактирований;
  • автоматизируйте тестирование отказов и поддерживайте документацию по сценариям восстановления.

     

Тестирование отказоустойчивости и планы восстановления

Глубокое тестирование HA‑решения обязательно: оно должно подтверждать, что переключение активной ноды происходит корректно, Standby начинает полноценно обслуживать запросы, а данные синхронизируются без потери метаданных. Практические шаги включают:

  • моделирование отказа активной ноды и проверку, что Standby принимает роль Active без потери доступности;
  • проверку поведения при потере JournalNode в разных секциях кластера;
  • тестирование восстановления JournalNodes и повторной синхронизации Standby;
  • проверку корректности работы Failover Proxy в клиентских приложениях, чтобы они автоматически подключались к активной ноде.

В рамках методологии эксплуатации HA важно документировать все тесты, фиксировать время переключения и согласованность редактирований, а также обновлять планы восстановления по мере эволюции кластера.

 

Key takeaways

  • HA в HDFS основывается на двух NameNode (Active и Standby), журнале редактирования через JournalNode и координации через ZooKeeper Failover Controller, что позволяет минимизировать простой и защититься от split-brain.
  • JournalNode и Quorum Journal Manager образуют кворум для устойчивости к сбоям журнала редактирования, обеспечивая консистентность между Active и Standby.
  • Правильная конфигурация включает dfs.namenode.shared.edits.dir с протоколом qjournal, настройки ZooKeeper и включение автоматического переключения (dfs.ha.automatic-failover.enabled).
  • Мониторинг и тестирование отказов критически важны: отслеживаются статусы NameNode, JournalNode и ZKFC, а также проводятся регламентированные сценарии аварийного восстановления.
  • Безопасность играет ключевую роль: Kerberos и контроль доступа к журналам обеспечивают целостность и надёжность HA.

     

FAQ

  1. Что такое QJM и зачем он нужен в HA HDFS?

QJM (Quorum Journal Manager) обеспечивает консистентность и согласование журналов редактирования между Active и Standby NameNode. Он создает кворум из JournalNodes, чтобы записи редактирования могли быть надёжно сохранены и воспроизведены Standby NameNode, даже если часть JournalNodes временно недоступна. Без QJM возможна критическая несинхронность метаданных и риск split-brain в случае сбоев.

 

  1. Сколько JournalNodes рекомендуется использовать в кластере?

Оптимальная конфигурация - 3 JournalNodes для обеспечения кворума и устойчивости к одиночному сбою, либо 5 JournalNodes для более высокого уровня отказоустойчивости без риска потери кворума. Важно соблюдать баланс между стоимостью инфраструктуры и требуемой доступностью.

 

  1. Как работает автоматическое переключение Active/Standby NameNode?

Каждый NameNode запускает ZKFC, который через ZooKeeper координирует выбор активной ноды. При потере связи с журналом редактирования или подозрении на сбой активной ноды, ZKFC инициирует выбор нового активного NameNode. Этот процесс предохраняет кластер от split-brain за счёт мажорного кворума и согласованного переключения.

 

  1. Можно ли использовать только Manual Failover без ZKFC?

Технически возможно вручную переключать активную ноду, но без ZKFC риск split-brain существенно выше, и корректная синхронизация редактирований может нарушаться. Автоматическое переключение обеспечивает быструю реакцию и согласование между компонентами кластера.

 

  1. Какие этапы мониторинга включены в HA?

Мониторинг должен охватывать состояние Active/Standby NameNode, JournalNodes (показатели записи, задержка, доступность), состояние ZooKeeper и ZKFC, а также показатели сетевой задержки и дисковой подсистемы. Важно интегрировать алерты на пороги задержки и несогласованные состояния.

 

  1. Какие проблемы чаще всего возникают в HA HDFS?

Типичные проблемы включают несогласованность журналов при сбоях JournalNodes, задержки репликаций журналов, несоответствия версий компонентов, ошибки в настройках fsid и nameservices, а также проблемы с сетевыми фрагментациями, приводящие к split-brain. Регламентированное тестирование и корректная конфигурация снижают вероятность подобных ситуаций.

 

  1. Как мигрировать существующий кластера к HA?

Миграция включает подготовку NameNode к режиму HA, развёртывание JournalNodes и ZooKeeper, настройку конфигураций и тестирование failover. Важно синхронизировать fsimage и edit logs, обеспечить совместимость версий и выполнить детальное тестирование отказов перед переходом в продуктив.

 

  1. Что делать при возникновении split-brain?

Split-brain возникает, когда две NameNode считают себя активными и выполняют запись без согласованности. Решение состоит в проверке состояния ZooKeeper, перезапуске ZKFC на нодах и исправлении журнала редактирования. Последовательность действий должна быть задокументирована и протестирована в песочнице.

 

  1. Повлияет ли HA на производительность кластера?

HA добавляет сетевые обращения к JournalNodes и процессам координации. Это может увеличивать задержку записи редактирований и чуть снижать пропускную способность по сравнению с не‑HA конфигурацией, но за счёт быстрого переключения и отсутствия простоя в случае сбоев общая доступность метаданных существенно возрастает. Правильная настройка и выделение ресурсов позволяют минимизировать влияние.

 

  1. Совместимо ли решение с различными версиями Hadoop?

Совместимость HA решений зависит от конкретной версии Hadoop. В большинстве случаев HA поддерживается в линейке Hadoop 2.x и 3.x, однако требуется корректная настройка соответствующих параметров, особенно в части поддержки QJM, ZKFC и параметров журнального журнала. Перед внедрением следует проверить документацию по совместимости и обеспечить единообразие версий на NameNode, JournalNode иZooKeeper.

 

← Предыдущая статья
HDFS: принципы хранения, блочное устройство и репликация
Следующая статья →
YARN: ResourceManager, NodeManager и ApplicationMaster

 

Узнать стоимость решенияЗапросить видео презентацию

Запросить видео презентацию Запросить доступ к демо стенду online Узнать стоимость лицензий

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

loading...

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

Клиенты
  • «Лента» – первая по величине сеть гипермаркетов и четвертая среди крупнейших розничных сетей страны. Компания была основана в 1993 г. в Санкт-Петербурге.

    «Лента» управляет 249 гипермаркетами в 88 городах России и 131 супермаркетом в Москве, Санкт-Петербурге, Сибири, Уральском и Центральном регионах с общей торговой площадью около 1 494 тыс. кв. м. Средняя торговая площадь одного гипермаркета «Лента» составляет около 5 500 кв.м, средняя площадь супермаркета – 800 кв.м. Компания оперирует двенадцатью распределительными центрами. Штат компании – около 50, 5 тыс. человек.

  • В 2003 году Мерсико и пятью микрокредитными агентствами Мерсико было принято историческое решение о консолидации активов по всей территории Кыргызстана в целях образования национального финансового института по развитию сообществ - Компаньона. В октябре 2004 года Компаньон был зарегистрирован Национальным банком Кыргызской Республики.

  • Российский филиал одного их ведущих мировых производителей и дистрибьютеров косметики Estee Lauder Companies Inc. выбрал аналитическую платформу Loginom для предиктивной аналитики продаж как в офлайн-, так и в онлайн-канале.

  • «Синтека» — ведущий разработчик инновационных сервисов для строительной отрасли, который решает ключевые задачи автоматизации службы снабжения строительных компаний.

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Энергетика
    • Фармацевтика
  • Услуги
    • Переход на отечественные BI и DWH
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Техническая поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Платформы
    • FineBI
    • FineReport
    • FineDataLink
    • Коннекторы данных из 1С в BI
    • Airflow + NiFi
    • Visiology
    • Luxms BI
    • Modus BI
    • PIX BI
    • Arenadata
    • ClickHouse
    • Greenplum
    • Postgres Professional
    • Open-source BI: Superset/Metabase
    • Loginom
    • Yandex.DataLens
    • AI / Исскуственный интеллект
    • Optimacros
    • Шины данных
  • Курсы
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt
  • Функциональные решения
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • Сквозная аналитика
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
    • Политика конфиденциальности
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

 

 

 

 

 

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.