Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Marklogic 通过负载平衡器部署mlGradle时出错_Marklogic_Marklogic 8 - Fatal编程技术网

Marklogic 通过负载平衡器部署mlGradle时出错

Marklogic 通过负载平衡器部署mlGradle时出错,marklogic,marklogic-8,Marklogic,Marklogic 8,我们在AWS中设置了一个3节点集群,由负载平衡器支持。通过负载平衡器访问管理UI、查询控制台和REST API是很好的。但是当通过mlGradle部署模块内容时,我们会得到以下错误 :mlLoadModules FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':mlLoadModules'. > Unable to insert content a

我们在AWS中设置了一个3节点集群,由负载平衡器支持。通过负载平衡器访问管理UI、查询控制台和REST API是很好的。但是当通过mlGradle部署模块内容时,我们会得到以下错误

:mlLoadModules FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':mlLoadModules'.
> Unable to insert content at URI: /config/context.xml; cause: Query evaluation request rejected (400, BAD_REQUEST). Is this an XDBC server?
当针对单个节点时,此错误是正常的。我的猜测是,它可能会击中不同的主机,导致失败。我有AWS负载平衡器设置,用于cookies的粘性,但这似乎没有帮助


其他人以前见过这个问题吗?

回到基本问题:绕过负载平衡器,然后在受控测试中分别命中每个节点。确保每个节点的其余部分都能正常工作。然后,如果每个节点本身看起来正常,则转到负载平衡器-无论是否粘滞,看起来您没有击中XDBC服务器。

错误在于AWS负载平衡器的配置。所有端点都列为HTTP端点,因此我创建了负载平衡器,将请求代理为HTTP。在我的特定部署中,使用XDBC将文件加载到模块的根目录。HTTP端点也启用了XDBC,但负载平衡器只接受HTTP,这就是我收到错误请求的原因。将所有端口的负载平衡器切换到TCP可以正常工作。

问题既不是负载平衡器也不是Xdbc vs http。xdbc是HTTP兼容的,如果不兼容,则不会有任何请求工作,您可以使用验证。具有原始配置的单节点群集。它会起作用的。“问题”是mlgradle执行的管理操作要求与负载平衡概念之间的错误连接。如果出于多种原因,按顺序执行的管理操作命中不同的ML服务器,则这些操作可能不起作用,其中之一是计时和等待条件rest调用,这些调用仅在所联系的服务器中有效(例如,等待主机重新启动完成,以特定顺序更新节点以适应故障切换、事务、会话状态等).


您对负载平衡器所做的是将其从cookie关联更改为不同的算法。这确实会改变行为,但不会从根本上解决问题,您还导致ELB刷新,已观察到该刷新导致ELB无法为第一组连接加载balencem。这会在测试中导致假阳性结果,因为目标服务器没有实际分布。您可以通过启动新的ELB并测试背靠背连接来验证,以查看哪些服务器受到攻击。请注意,无论哪台服务器被击中,大多数事情通常都会起作用,您无法通过使用黑盒测试不注意错误来验证“它起作用”—要击中事件的确切顺序可能很困难—或是持续—从而产生意外的(尽管并非总是错误的)行为。。。您可以通过使用xdmp:host()在qconsole中看到这一点。。跑几次,等一会儿,重复。你期待什么?那是真的吗?它是否始终可以复制?哪些类型的应用程序会受到影响?这是错误的吗?如果您事先没有这个问题的答案,我建议不要在应用程序代码和marklogic之间使用load balencers。如果应用程序完全无状态,则在应用程序和internet/浏览器用户之间使用它们。如果没有,则装载打捆机不是解决方案。

谢谢@DALDEI。这是很久以前的事了,我想当时mlgradle也有一个问题,就是没有传播xcc.http兼容标志。