Как запустить MarkLogic на AWS EC2, используя собственный лицензионный ключ?

Я запустил экземпляр EC2 под управлением Linux и установил rpm-пакет MarkLogic Server. Но когда я пытаюсь запустить службу MarkLogic, я вижу такие сообщения:

Waiting for block device on /dev/sdf
Waiting for block device on /dev/sdf
Waiting for block device on /dev/sdf

/dev/sdf нет. Как я могу обойти эту проблему?


person mblakele    schedule 05.09.2012    source источник


Ответы (2)


При настройке экземпляра EC2 предложите также добавить блок EBS. Вам будет предложено ввести имя устройства. В настоящее время при использовании RedHat AMI, независимо от выбранного вами имени, ваше первое устройство будет подключено как /dev/xvdl. Решение вашей проблемы, сделав это, сделать ln /dev/xvdl /dev/sdf - жесткую ссылку.

Как сказано в приведенном выше ответе, сценарий запуска ищет это устройство при запуске, форматирует его, если оно не отформатировано, и монтирует в /var/opt/MarkLogic.

Это должно разобраться.

person mustard57    schedule 05.11.2012

В 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