0

我启动了一个运行 linux 的 EC2 实例,并安装了 MarkLogic Server rpm。但是当我尝试启动 MarkLogic 服务时,我看到如下消息:

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

没有/dev/sdf。我怎样才能解决这个问题?

4

2 回答 2

6

在设置您的 EC2 实例时,建议您还添加一个 EBS 块。您将被要求输入设备名称。目前,在使用 RedHat AMI 时,无论您选择什么名称,您的第一台设备都会挂载为/dev/xvdl. 您的问题的解决方案是,完成此操作后,执行ln /dev/xvdl /dev/sdf- 硬链接。

As the above answer says, the startup script looks for this device when starting up, formats it if it is not formatted and mounts at /var/opt/MarkLogic.

This should sort things out.

于 2012-11-05T09:42:11.633 回答
3

MarkLogic Server for linux 内置了一个假设。如果它发现它在 xen 管理程序下运行,并且可以使用 AWS API 找到 EC2 主机名,它会假定它是 MarkLogic Server AMI 的一个实例。该 AMI 期望/dev/sdf用于其默认数据目录。该文档主要讨论使用 MarkLogic Server AMI,但在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 仍会从 AWS API 获取其公共主机名。这可能会导致轻微的延迟——可能并不重要。但你也可以把它存根:

# 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. 准备好将此文件的任何更改与新版本合并。

于 2012-09-05T21:29:30.993 回答