elasticsearch 2节点集群:正确设置?

Jon*_*ica 5 elasticsearch

我有两个节点,但它们不在同一个子网上.

问题:

1)据我所知,在2节点集群中,两者都应设置为master?

2)下面的配置是让节点找到对方的正确方法吗?(由于节点不在同一子网上)

3)客户端应用程序可以附加到任一节点,并进行读写操作吗?

4)下面提出的配置是否正确?(我可以在两个配置中指定"node.master:true"吗?这会使发现发生吗?)

建议的配置:

节点1:

    cluster.name: mycluster
    node.name: "node1"
    node.master: true
    node.data: true
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["192.168.100.103"]  # IP of node2
Run Code Online (Sandbox Code Playgroud)

节点2:

    cluster.name: mycluster
    node.name: "node2"
    node.master: true
    node.data: true
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["192.168.101.103"]   #IP of node1
Run Code Online (Sandbox Code Playgroud)

2018年更新:

我们现在只使用3和5节点集群.

ᐅde*_*ris 10

您应该小心使用两个节点。

例如,discovery.zen.minimum_master_nodes 的默认设置是 1。这意味着如果网络断开连接,你的每个主节点(因为你都设置了两个都可以是主节点),将检查这个设置并看到它可以看到本身(默认最小主节点),它可以形成一个集群。另一个节点也像这样,你是“裂脑”。对于两个节点,您应该将其设置为 2,而不是默认值 1。

现在假设您已将其设置为 2。然后在网络断开连接时,两个符合主节点的节点都将停止运行,因为它们至少需要再看到一个符合主节点的节点才能开始主节点选举过程。您的集群停止工作,直到假定连接。

对于两个节点的情况,我认为应该只将一个节点设置为 master 资格,至少让它在网络问题中工作。

请检查 [1] 进行类似的讨论。

更新:@Eitanmg 共享了官方文档 [2] 以进行完全相同的讨论,您可能应该阅读该文档。

[1] https://blog.trifork.com/2013/10/24/how-to-avoid-the-split-brain-problem-in-elasticsearch/

[2] https://www.elastic.co/guide/en/elasticsearch/reference/current/high-availability-cluster-small-clusters.html#high-availability-cluster-design-two-nodes

  • 确实如此,另请参阅官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/high-availability-cluster-small-clusters.html#high-availability-cluster-design-two -节点 (2认同)

Val*_*Val 8

Q1:防止大脑裂开的主节点的理想数量是拥有(N/2) + 1主人,所以在你的情况下,由于N = 2,主人的数量也是2.

Q2:配置是正确的,虽然你不需要指定node.master: true,node.data: true因为两者都是true默认的.

Q3:没错

Q4:也正确.

最后,找出最好的方法是使用这些配置运行节点并查看其行为方式.

  1. 你启动node1,检查日志,看到node1是master(因为它是唯一的节点)
  2. 然后启动node2,检查日志并查看node2是否加入了集群
  3. 然后你将node1关闭,检查日志并验证node2是否成为主服务器
  4. 然后再次启动node1并验证它是否加入群集
  5. 然后你将node2关闭并验证node1再次成为主服务器.
  6. 等等...