我正在使用云表单模板3节点集群和测试DR的AZ故障在AWS。
我所做的是:
3月3日16:30 ip-10-58-3-36 MarkLogic:原主机名ip-10-58-3-68.us-west-1计算没有集群主机在线试用其他主机( Mar 3 16:31:31 ip-10-58-3-36 /opt/MarkLogic/mlcmd/scripts/initialize-node.xsh MarkLogic: 56 mar3 16:31 ip-10-58 3-36 MarkLogic)3 16:31 ip-10-58 3-36 MarkLogic: /opt/MarkLogic/mlcmd/scripts/initialize-node.xsh线路: 59 /3 16:31 ip-10-10-58-3-36 MarkLogic:未能更新主机名-等待重试Mar 3 16:31:31 ip-10-58-3-36 MarkLogic: 153 3 16:31 ip-10-58-3-36 MarkLogic:睡眠14秒钟3 16:31 ip-10-58-36 MarkLogic: 154
我浏览了/var/log/消息,并看到:
3月3日15:05:05 ip-10-58-3-36 MarkLogic: MARKLOGIC_INSTANCE: MARKLOGIC_INSTANCE:i- MDM_NODE_NAME: MARKLOGIC_NODE_NAME: NodeB# NodeB# ZONE: us-west-1b
MARKLOGIC_ZONE参数指向错误的区域。
我的问题是:为什么这个参数在这里是错误的?这是软件中的漏洞吗?
我尝试通过user_data更新这个参数,但仍然没有骰子。
我很好奇其他人是如何解决这个问题的,因为看起来这个集群并不是自愈。
另一件事是,如果我杀死主(停止服务/停止ec2),那么整个集群是不可用的。它可以设置,这样奴隶才能提升自己成为主人吗?
我使用的是MarkLogic 8.0-6
发布于 2017-03-04 22:48:51
如果您是手工修改在模板中创建的资源,您将有很大的问题。参数“错误”,最可能的原因是:
在另一个AZ中使用Master & EBS创建ASG
AWS模板“管理”它们创建的所有资源,删除和创建新的资源将导致内部问题,您应该“更新”模板,以便云形成知道正在发生什么,并(如果可能的话)处理所有依赖项。
托管群集特性本身不知道CF模板(您可以在不使用CF的情况下运行托管集群)。它是在启动时由环境变量配置的,然后在DynamoDB中保持长期状态,以便能够在任何或所有被终止的EC2实例中生存下来。初始状态需要在其生命周期内与动态状态保持一致。一旦一个新实例第一次运行,状态初始配置将缓存在根卷中,以确保在该EC2实例的生存期内不会发生更改。当使用示例模板时,这些模板作为用户数据传入。从ASG启动的EC2实例需要“启动配置”来提供用户数据。这是模板中的设置。如果你删除一个ASG (或启动配置) --并创建一个新的配置--不仅CF会感到困惑,而且除非您非常小心地正确配置启动配置和用户数据,否则启动的节点将被错误配置--充其量。一旦一个新实例第一次运行,状态初始配置将缓存在根卷中,以确保在该EC2实例的生存期内不会发生更改。
这就是您所看到的:节点从错误的区域获得配置,这是因为在不同的区域中创建了ASG,但是从原始区域获得了配置。要做这种手术,需要深入了解整个过程和架构,即使这样,也不太可能成功,因为它的设计并不是为了以这种方式改变配置。
它被设计成以您期望的方式具有容错性,但是由于EBS的限制,它要复杂一些-- EBS卷不跨区域,因此在新区域中启动ML实例将无法直接使用他人的EBS卷。相反,您需要首先跨区域复制森林,然后如果出现区域故障,其他节点将拥有副本,集群就会存活下来。如果您需要更多的节点,那么通过CF更新修改“每个区域的实例”。这将在可用区域中生成新的实例,它们将加入集群。托管群集功能只运行到“群集连接”级别。您需要自行管理数据(森林、卷等)的再平衡(通过REST、手动或其他过程)。
通常-*托管集群特性的架构是针对并利用EC2实例终止的。如果出了问题,最好的解决方法就是让实例死掉,由一个新的实例代替它。
https://stackoverflow.com/questions/42589659
复制相似问题