Назад | Перейти на главную страницу

Ubuntu Enterprise Cloud - отключение СК и синхронизация времени

У меня проблемы с облачной установкой.

Я установил все с компакт-диска Ubuntu Server 11.04, затем обновил систему до последней версии (apt-get update && apt-get dist-upgrade), установил NTP, правильно настроил и все загрузил. Некоторое время облако работает нормально, но затем облачный контроллер / контроллер кластера перестанет общаться с одним из контроллеров узлов!

Один из симптомов - euca-describe-availability-zones verbose внезапно начинает показывать меньше ресурсов, чем соответствующие (и начальные) значения.

Если я смотрю на cc.log, это показывает:

[Mon Sep 19 19:09:07 2011][002531][EUCADEBUG ] DEBUG: requested URI http://10.20.200.10:8775/axis2/services/EucalyptusNC
[Mon Sep 19 19:09:07 2011][002531][EUCADEBUG ]  ncClientCall(ncDescribeResource): ppid=13403 client calling 'ncDescribeResource'
[Mon Sep 19 19:09:07 2011][002531][EUCAERROR ] ERROR: DescribeResource() could not be invoked (check NC host, port, and credentials)
[Mon Sep 19 19:09:07 2011][002531][EUCADEBUG ]  ncClientCall(ncDescribeResource): ppid=13403 done calling 'ncDescribeResource' with exit code '1'

Затем в соответствующем контроллере узла axis2c.log, Я вижу это:

[Mon Sep 19 19:10:58 2011] [error] rampart_timestamp_token.c(179) [rampart]Timestamp not valid: Created time is not valid
[Mon Sep 19 19:10:58 2011] [error] rampart_sec_header_processor.c(612) [rampart]Timestamp is not valid
[Mon Sep 19 19:10:58 2011] [error] rampart_sec_header_processor.c(1911) [rampart]Timestamp processing failed
[Mon Sep 19 19:10:58 2011] [error] rampart_in_handler.c(143) [rampart][rampart_in_handler] Security Header processing failed.
[Mon Sep 19 19:10:58 2011] [error] phase.c(233) Handler RampartInHandler invoke failed within phase Security
[Mon Sep 19 19:10:58 2011] [error] engine.c(696) Invoking phase Security failed
[Mon Sep 19 19:10:58 2011] [error] engine.c(279) Invoking operation specific phases failed for operation ncDescribeResource
[Mon Sep 19 19:10:58 2011] [error] rampart_engine.c(159) [rampart][rampart_engine] Cannot get saved rampart_context
[Mon Sep 19 19:10:58 2011] [error] rampart_out_handler.c(136) [rampart][rampart_out_handler] ramaprt_context creation failed.
[Mon Sep 19 19:10:58 2011] [error] phase.c(233) Handler RampartOutHandler invoke failed within phase MessageOut
[Mon Sep 19 19:10:58 2011] [error] engine.c(696) Invoking phase MessageOut failed

Итак: есть проблема синхронизации времени.

Однако NTP установлен и правильно настроен.

Я заметил одну вещь, выпуская много ntpq -np, в том, что ЧПУ перестает работать после положительного смещения времени. Если смещение остается отрицательным, все работает нормально. Смещения очень маленькие (около 5 мс, абсолютный максимум, который я мог видеть, составляет 10 мс).

Погуглив, я нашел этот код вала: http://wso2.org/project/wsf/php/1.1.0/docs/code-coverage/rampartc/src/util/.libs/rampart_timestamp_token.c.gcov.html

/*Check whether created is less than current time or not*/
  current_val = rampart_generate_time(env, 0);
  validity = rampart_compare_date_time(env, current_val, created_val);
  if (validity == AXIS2_SUCCESS)
  {
      AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][ts]Timestamp not valid: Created time is not valid");
              AXIS2_FREE(env->allocator, current_val);
              current_val = NULL;
      return AXIS2_FAILURE;
  }

Как мы видим, он явно допускает отклонение во времени в одном смысле, но не в другом.

Я что-то упускаю? Я единственный, кто столкнулся с этой проблемой? Разве не глупо проверять метки времени с точностью до миллисекунд и допускать только отрицательные отклонения ?!

Как люди справляются с этой проблемой? Что я могу сделать, чтобы мое облако оставалось живым?

Я придумал несколько решений:

  1. Патч rampart, чтобы просто удалить проверку отметки времени
  2. Заплатить вал, чтобы учесть положительные отклонения
  3. Найдите способ сделать ntp или ntpdate отрегулируйте время до определенного смещения относительно базового времени сервера
  4. Напишите свой собственный инструмент синхронизации времени

Что вы думаете?

РЕДАКТИРОВАТЬ: похоже, можно отключить Rampart в конфигурации Axis2, но я не могу понять, как это сделать!

РЕДАКТИРОВАТЬ 2: Версия Rampart, доступная в репозиториях Ubuntu, - 1.3.0, которая датируется 2007 или 2008 годом ... последняя выпущенная версия - это что-то вроде 1.6.0, выпущенная в июне 2011 года. Очевидно, эта последняя версия разрешает пакеты «из будущего». Я бы очень хотел найти эту последнюю версию в PPA!

РЕДАКТИРОВАТЬ 3: Я нашел некоторые параметры для изменения поведения Rampart 1.3.0: TimeToLive, ClockSkewBuffer и PrecisionInMilliseconds. Я добавил их (360, 60 и false соответственно) в EucalyptusNC.xml и EucalyptusCC.xml, и все стало лучше. Иногда я все еще вижу сообщения об ошибках с отметками времени в журналах, но сейчас они очень редки. Я также отключил NTP на NC и создал сценарий cron (который запускается каждый час) для синхронизации времени (ntpdate -b) с CC.

РЕДАКТИРОВАТЬ 4: По-видимому, это ошибка в пакете Eucalyptus Ubuntu. Я зарегистрировал ошибку на Launchpad, следуя рекомендациям людей из #eucalyptus на Freenode: https://bugs.launchpad.net/ubuntu/+source/eucalyptus/+bug/854946

насколько я понимаю, версия rampartc - 1.3.0, а текущая версия axis2c - 1.6.0. Итак, это текущая версия.

Мы не видели этой проблемы в синхронизации: если время составляет 5 минут, обычно это работает.

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