В MarkLogic Server для Linux встроено предположение. Если он видит, что работает под гипервизором xen, и может найти имя хоста EC2 с помощью AWS API, он предполагает, что это экземпляр MarkLogic Server AMI. Этот AMI предполагает использовать /dev/sdf
в качестве каталога данных по умолчанию. В документации в основном говорится об использовании AMI MarkLogic Server, но есть краткое упоминание о решении этой проблемы по адресу http://docs.marklogic.com/5.0doc/docapp.xqy#display.xqy?fname=http://pubs/5.0doc/xml/ec2/instance.xml%2381403
Оказывается, сценарий запуска /etc/init.d/MarkLogic
просматривает переменную окружения MARKLOGIC_EBS
, чтобы решить, ждать ли появления /dev/sdf
. Эта переменная MARKLOGIC_EBS
установлена в /etc/sysconfig/MarkLogic
, которая предназначена для редактирования администраторами (здесь вы также можете установить MARKLOGIC_USER
на что-то отличное от daemon
, например).
Таким образом, мы можем отредактировать /etc/sysconfig/MarkLogic
, чтобы игнорировать /dev/sdf
. Вот интересная часть этого файла:
# the initial hostname that MarkLogic should use on Amazon EC2
if [ -d /proc/xen ]; then
if [ "`curl -s --connect-timeout 2 -o /tmp/public-hostname -w %{http_code} http://169.254.169.254/2007-03-01/meta-data/public-hostname`" = "200" ]; then
MARKLOGIC_HOSTNAME=`cat /tmp/public-hostname`
MARKLOGIC_EC2_HOST=1
MARKLOGIC_EBS=/dev/sdf
fi
fi
Самое простое решение — закомментировать строку, устанавливающую MARKLOGIC_EBS
.
the initial hostname that MarkLogic should use on Amazon EC2
if [ -d /proc/xen ]; then
if [ "`curl -s --connect-timeout 2 -o /tmp/public-hostname -w %{http_code} http://169.254.169.254/2007-03-01/meta-data/public-hostname`" = "200" ]; then
MARKLOGIC_HOSTNAME=`cat /tmp/public-hostname`
MARKLOGIC_EC2_HOST=1
#MARKLOGIC_EBS=/dev/sdf
fi
fi
Это решит проблему, но MarkLogic по-прежнему будет получать свое общедоступное имя хоста из API AWS каждый раз при запуске или перезапуске службы. Это может вызвать небольшую задержку - вероятно, неважную. Но вы также можете заглушить это:
# the initial hostname that MarkLogic should use on Amazon EC2
if [ "" -a -d /proc/Xxen ]; then
if [ "`curl -s --connect-timeout 2 -o /tmp/public-hostname -w %{http_code} http://169.254.169.254/2007-03-01/meta-data/public-hostname`" = "200" ]; then
MARKLOGIC_HOSTNAME=`cat /tmp/public-hostname`
MARKLOGIC_EC2_HOST=1
#MARKLOGIC_EBS=/dev/sdf
fi
fi
Как бы вы ни решили обойти тест EC2, теперь вы готовы запустить службу MarkLogic, не беспокоясь о /dev/sdf
. Конечно, вам все равно понадобится лицензия MarkLogic Server. См. http://developer.marklogic.com/licensing, чтобы узнать больше о различных вариантах лицензий.
Обратите внимание, что когда вы обновляете MarkLogic Server, rpm может содержать новую версию /etc/sysconfig/MarkLogic
. Будьте готовы объединить любые ваши изменения в этом файле с новой версией.
person
mblakele
schedule
05.09.2012