我启动了一个运行 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
。我怎样才能解决这个问题?
我启动了一个运行 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
。我怎样才能解决这个问题?
在设置您的 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.
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
. 准备好将此文件的任何更改与新版本合并。