我有一个小的2节点集群
node1“始终开启”并放置在生产服务器上
node2“有时开启”并放在笔记本上以进行开发建议
他们都有简单的单播配置
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: [ "other node IP" ]
通常node1比node2有更新的数据,连接后所有的分片都从node1同步到node2,没关系
但是如果node1有更新的数据,他们就会丢失。 如果偶尔node1成为master,它可以杀死生产中的新数据
我无法在笔记本上设置node.master:false,因为它从node1脱机工作。
是否可以通过在索引(较新的胜利)中优化合并文档来设置主 - 主同步行为?
可能我必须在中间添加额外的3d node.data:false,node.master:true节点吗?
那我该怎么办?
答案 0 :(得分:1)
这是一个你想要实现的有趣设置,但从长远来看,这不是我建议的,因为你经常会让你的生产节点处于压力之下。
首先,在这种情况下,术语“开发”没有多大意义,因为就ES而言,您每次都会添加一个“生产”节点并终止“生产”节点。您在“开发”节点上执行的大部分操作都会影响您的“生产”节点。
那就是说,我建议你试试这个:
您可以将“开发”节点设置为不保留node.data: false
的任何数据,并防止每个节点成为node.master: false
的主人。因此,当您的开发节点加入时,ES将不会开始移动分片,但您仍然可以查询该节点。在此配置中,您希望在所有索引上将副本数设置为0,以使群集保持“绿色”运行状况。请注意,在此配置中,所有数据仅存储在“生产”节点上。如果这种情况发生,你将会丢失数据。
如果您确实希望开发节点包含数据的副本,请确保在其上设置node.master: false
并且所有索引的副本数均为1.这样,您的“生产” “节点将始终具有您的数据副本,并且当您的开发节点脱机时,不会丢失任何数据。当您的开发节点重新联机时,它将自动与“生产”节点同步,以使其数据(其副本)是最新的。根据您拥有的数据量,这可能需要一些时间,但通常很快。再次,请注意您在“开发”节点上执行的任何查询都会影响您的生产节点,所以从长远来看,这可能不是一个好主意。如果你负担得起,最好在每个索引上至少有2个节点,每个索引有1个副本,最好是3 +。