AWS上MarkLogic集群启动失败,报DynamoDB错误
MarkLogic 11.0.2 3节点集群启动失败问题解决
问题描述
通过CloudFormation模板部署3节点MarkLogic 11.0.2集群,CloudFormation配置执行正常,但MarkLogic服务无法启动。手动启动服务时出现以下错误:
[root@ip-100-202-30-37 etc]# service MarkLogic start Set configuration: JAVA_HOME="/usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.372.b07-1.amzn2.0.1.x86_64" Set configuration: MARKLOGIC_MDB_TYPE="ddb" Set configuration: AWS_REGION="us-east-1" Set configuration: AWS_DEFAULT_REGION="us-east-1" Set configuration: MARKLOGIC_ZONE="us-east-1c" Set configuration: MARKLOGIC_HOSTNAME="ip-100-202-30-37.ec2.internal" Initialize Configuration. AWS Region: us-east-1, ZONE: us-east-1c. INSTANCE: i-0sdeftghyuj908yt Configured node name. MARKLOGIC_NODE_NAME: NodeC# Set configuration: MARKLOGIC_MDB_TYPE="ddb" Managed cluster initialization Localized name pattern to NodeC-us-east-1c# No MDB found: ml-cluster-v11-MarkLogicDDBTable-2DRFTGHU67OKL - aborting
已确认CloudFormation中主集群节点配置正确,报错提及的DynamoDB表已创建但为空。
排查与解决方案
- 确认主节点初始化状态:Managed Cluster模式下,主节点需先完成初始化并将集群元数据写入DynamoDB表,从节点才能读取并加入集群。检查主节点的MarkLogic服务是否成功启动,若主节点也未启动,优先查看主节点的启动日志(路径:
/var/opt/MarkLogic/Logs/ErrorLog.txt)。 - 验证IAM角色权限:确保所有EC2实例的IAM角色拥有DynamoDB的
PutItem、GetItem、Scan等权限。主节点需要写入权限,从节点需要读取权限,权限不足会导致主节点无法写入元数据,从节点读取为空。 - 核对DDB表名称一致性:检查CloudFormation模板中定义的DDB表名称,与节点启动时报错的表名
ml-cluster-v11-MarkLogicDDBTable-2DRFTGHU67OKL完全匹配,避免模板参数或输出变量错误导致名称不匹配。 - 检查节点启动顺序:必须先启动主节点,等待主节点完成集群初始化(可通过主节点的ErrorLog确认元数据已写入DDB),再启动从节点。若从节点先启动,会因DDB表为空触发启动失败。
- 验证网络连通性:确认EC2实例能正常访问DynamoDB。检查安全组是否允许出站到443端口,VPC环境下需确认是否配置了DynamoDB VPC端点,或是否有网络ACL限制了DDB访问。
- 查看主节点详细日志:在主节点的
ErrorLog.txt中搜索DynamoDB相关日志,确认是否存在写入失败的报错(如权限拒绝、网络超时),这是DDB表为空的直接原因。
内容的提问来源于stack exchange,提问作者JayantKYadav
相关产品推荐
相关产品推荐

