Расхождение системного времени между серверами
Синхронизированное время на серверах баз данных имеет важное значение для распределённых баз данных. Если системные часы на серверах YDB будут сильно расходиться, это приведёт к увеличению задержек в распределённых транзакциях.
Внимание
Важно поддерживать системное время на серверах YDB в синхронном состоянии, чтобы избегать больших задержек.
Если системное время узлов, на которых запущены таблетки-координаторы, отличается друг от друга, задержки транзакций увеличиваются на величину разницы во времени между самыми быстрыми и самыми отстающими системными часами. Это происходит потому, что транзакция, запланированная на узле с более быстрыми системными часами, может быть выполнена только после того, как координатор с самыми отстающими часами достигнет того же времени.
Более того, если отклонение во времени превысит 30 секунд, система YDB откажется обрабатывать распределённые транзакции. Перед тем как координаторы приступят к планированию транзакции, задействованные data shards определяют допустимый диапазон временных меток (timestamps) для транзакции. Начало этого диапазона — текущее системное время таблетки-медиатора, а конец определяет тайм-аут планирования в 30 секунд. Если системное время координатора выходит за пределы этого временного диапазона, он не может запланировать распределённую транзакцию, что приводит к ошибкам в таких запросах.
Диагностика
Чтобы диагностировать расхождение в системном времени серверов YDB, используйте следующие методы:
-
Используйте Healthcheck во Встроенном UI:
-
Во Встроенном UI перейдите на вкладку Databases и нажмите на наименование базы данных.
-
На вкладке Navigation убедитесь, что требуемая база данных выбрана.
-
Откройте вкладку Diagnostics.
-
На вкладке Info нажмите на кнопку Healthcheck.
Если кнопка Healthcheck отображает статус
MAINTENANCE REQUIRED
, возможно, в кластере YDB возникли проблемы, например, расхождение системных часов. Все выявленные неполадки будут перечислены в разделе DATABASE под кнопкой Healthcheck. -
Чтобы увидеть диагностированные неполадки, раскройте раздел DATABASE.
Проблемы с расхождением системного времени отображаются в разделе
NODES_TIME_DIFFERENCE
.
Примечание
Для получения дополнительной информации см. Health Check API
-
-
Откройте страницу Interconnect overview во Встроенном UI.
-
Используйте такие инструменты, как
pssh
илиansible
, чтобы выполнить команду (например,date +%s%N
) на всех узлах YDB и отобразить значение системных часов.Важно
На результаты будут влиять сетевые задержки между хостом, на котором запущены
pssh
илиansible
, и хостами YDB.Если вы используете утилиты синхронизации времени, вы также можете запросить их статус вместо запроса текущих временных меток. Например,
timedatectl show-timesync --all
.
Рекомендации
-
Вручную синхронизируйте системные часы серверов, на которых работают узлы YDB. Например, используйте
pssh
илиansible
, чтобы выполнить команду синхронизации часов на всех узлах. -
Убедитесь, что системные часы на всех серверах YDB регулярно синхронизируются с помощью
timesyncd
,ntpd
,chrony
или аналогичного инструмента. Рекомендуется использовать один и тот же источник времени для всех серверов в кластере YDB.