Расхождение системного времени между серверами

Синхронизированное время на серверах баз данных имеет важное значение для распределённых баз данных. Если системные часы на серверах YDB будут сильно расходиться, это приведёт к увеличению задержек в распределённых транзакциях.

Внимание

Важно поддерживать системное время на серверах YDB в синхронном состоянии, чтобы избегать больших задержек.

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

Более того, если отклонение во времени превысит 30 секунд, система YDB откажется обрабатывать распределённые транзакции. Перед тем как координаторы приступят к планированию транзакции, задействованные data shards определяют допустимый диапазон временных меток (timestamps) для транзакции. Начало этого диапазона — текущее системное время таблетки-медиатора, а конец определяет тайм-аут планирования в 30 секунд. Если системное время координатора выходит за пределы этого временного диапазона, он не может запланировать распределённую транзакцию, что приводит к ошибкам в таких запросах.

Диагностика

Чтобы диагностировать расхождение в системном времени серверов YDB, используйте следующие методы:

  1. Используйте Healthcheck во Встроенном UI:

    1. Во Встроенном UI перейдите на вкладку Databases и нажмите на наименование базы данных.

    2. На вкладке Navigation убедитесь, что требуемая база данных выбрана.

    3. Откройте вкладку Diagnostics.

    4. На вкладке Info нажмите на кнопку Healthcheck.

      Если кнопка Healthcheck отображает статус MAINTENANCE REQUIRED, возможно, в кластере YDB возникли проблемы, например, расхождение системных часов. Все выявленные неполадки будут перечислены в разделе DATABASE под кнопкой Healthcheck.

    5. Чтобы увидеть диагностированные неполадки, раскройте раздел DATABASE.

      Проблемы с расхождением системного времени отображаются в разделе NODES_TIME_DIFFERENCE.

    Примечание

    Для получения дополнительной информации см. Health Check API

  2. Откройте страницу Interconnect overview во Встроенном UI.

  3. Используйте такие инструменты, как pssh или ansible, чтобы выполнить команду (например, date +%s%N) на всех узлах YDB и отобразить значение системных часов.

    Важно

    На результаты будут влиять сетевые задержки между хостом, на котором запущены pssh или ansible, и хостами YDB.

    Если вы используете утилиты синхронизации времени, вы также можете запросить их статус вместо запроса текущих временных меток. Например, timedatectl show-timesync --all.

Рекомендации

  1. Вручную синхронизируйте системные часы серверов, на которых работают узлы YDB. Например, используйте pssh или ansible, чтобы выполнить команду синхронизации часов на всех узлах.

  2. Убедитесь, что системные часы на всех серверах YDB регулярно синхронизируются с помощью timesyncd, ntpd, chrony или аналогичного инструмента. Рекомендуется использовать один и тот же источник времени для всех серверов в кластере YDB.