У меня проблемы с облачной установкой.
Я установил все с компакт-диска 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;
}
Как мы видим, он явно допускает отклонение во времени в одном смысле, но не в другом.
Я что-то упускаю? Я единственный, кто столкнулся с этой проблемой? Разве не глупо проверять метки времени с точностью до миллисекунд и допускать только отрицательные отклонения ?!
Как люди справляются с этой проблемой? Что я могу сделать, чтобы мое облако оставалось живым?
Я придумал несколько решений:
ntp
или ntpdate
отрегулируйте время до определенного смещения относительно базового времени сервераЧто вы думаете?
РЕДАКТИРОВАТЬ: похоже, можно отключить 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 минут, обычно это работает.
Вы столкнулись с ключевой проблемой программной виртуализации в целом и с помощью расширенной облачной виртуализации, часы не привязаны к аппаратным часам, и они будут плавать по отношению к общей бизнес-производительности базовой операционной системы хоста. Иногда физические часы и виртуальные часы синхронизируются, вызывая скачок часов, когда это происходит. Есть много приложений, в которых этот скачок часов может сильно ухудшить производительность приложения. Если вам нужны действительно высокоточные часы для хронометража или аудита, вам может потребоваться перейти на физический хостинг, а не на виртуальный хостинг в Интернете.