如何建立 ES 集群?

假设我有5台机器,我想运行一个 elasticsearch 集群,它们都连接到一个共享驱动器。我在那个共享硬盘上放了一份 elasticsearch 的拷贝这样三个人都能看到。我是否只要在我所有的机器上启动共享驱动器上的弹性搜索,集群就会自动发挥它的魔力?或者,我必须配置特定的设置,以获得 elasticsearch,以实现其运行在5台机器上?如果有,相关的设置是什么?我应该担心配置副本还是自动处理副本?

108176 次浏览

超级简单。

您需要每台机器都有自己的 ElasticSearch 副本(只需复制现有的副本即可)——原因是每台机器/节点都将保留自己的文件,这些文件在集群中分片。

您真正需要做的唯一一件事情是编辑配置文件以包含集群的名称。

如果所有机器都有相同的集群名称,elasticsearch 将自动完成其余的工作(只要所有机器都在同一个网络上)

请阅读以下内容: Https://www.elastic.co/guide/en/elasticsearch/guide/current/deploy.html

当您创建索引(数据所在的位置)时,您将定义需要多少个副本(它们将分布在集群中)

它通常是自动处理的。

如果自动发现不起作用。通过启用单播发现,编辑弹性搜索配置文件

节点一:

    cluster.name: mycluster
node.name: "node1"
node.master: true
node.data: true
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["node1.example.com"]

节点二:

    cluster.name: mycluster
node.name: "node2"
node.master: false
node.data: true
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["node1.example.com"]

对于节点3、4、5,以此类推。使节点1成为主节点,其余节点仅作为数据节点。

编辑: 请注意,根据 ES 规则,如果您有 N节点,那么按照约定,N/2+1节点应该是故障转移机制的主节点,尽管它们可能是也可能不是数据节点。

此外,如果自动发现不起作用,最可能的原因是因为网络不允许(因此禁用)。如果在多个服务器之间发生太多的自动发现 ping,管理这些 ping 的资源将阻止其他服务正确运行。

对于 ex,考虑一个10,000个节点集群和所有10,000个节点执行自动 ping。

我尝试了@KannarKK 在 ES 2.0.2上建议的步骤,但是,我无法启动并运行集群。显然,我想出了一些办法,因为我已经在 Master 上设置了 tcp 端口号,所以在从配置 Discovery y.zen.ping.unicast.hosts 上需要 Master 的端口号以及 IP 地址(tcp 端口号)来进行发现。因此,当我尝试下面的配置,它为我工作。

节点1

cluster.name: mycluster
node.name: "node1"
node.master: true
node.data: true
http.port : 9200
tcp.port : 9300
discovery.zen.ping.multicast.enabled: false
# I think unicast.host on master is redundant.
discovery.zen.ping.unicast.hosts: ["node1.example.com"]

节点2

cluster.name: mycluster
node.name: "node2"
node.master: false
node.data: true
http.port : 9201
tcp.port : 9301
discovery.zen.ping.multicast.enabled: false
# The port number of Node 1
discovery.zen.ping.unicast.hosts: ["node1.example.com:9300"]

弹性搜索7改变了集群初始化的配置。 值得注意的是 ES 实例在内部使用传输层(TCP)进行通信,而不是通常用于对索引执行操作的 HTTP 协议。下面是2台机器集群的示例配置。

cluster.name: cluster-new
node.name: node-1
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.211
transport.tcp.port: 9300
discovery.seed_hosts: [“102.123.322.211:9300”,"102.123.322.212:9300”]
cluster.initial_master_nodes:
- "node-1"
- "node-2”

机器2配置:-

cluster.name: cluster-new
node.name: node-2
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.212
transport.tcp.port: 9300
discovery.seed_hosts: [“102.123.322.211:9300”,"102.123.322.212:9300”]
cluster.initial_master_nodes:
- "node-1"
- "node-2”

Name: 这在将成为集群一部分的所有计算机上都是相同的。

Name: ES 实例的标识符。

Master: 指定这个 ES 实例是否为 master

Data : 指定此 ES 实例是否为数据节点(保存数据)

Memory _ lock: 禁用交换。您可以在不设置此标志的情况下启动群集。但建议设置锁。更多信息: < a href = “ https://www.elastic.co/guide/en/elasticsearch/reference/master/setup-configuration-memory y.html”rel = “ norefrer”> https://www.elastic.co/guide/en/elasticsearch/reference/master/setup-configuration-memory.html

Host: 0.0.0.0,如果希望通过网络公开 ES 实例。0.0.0不同于127.0.0.1(也就是本地主机或环回地址)。 意思是机器上所有的 IPv4地址。如果机器有多个 IP 地址,服务器监听0.0.0.0,客户端可以从任何 IPv4地址到达机器。

Port: 端口,这个 ES 实例将在其上侦听 HTTP 请求

Host: 主机的 IPv4地址(这将用于与运行在不同计算机上的其他 ES 实例进行通信)。更多信息: < a href = “ https://www.elastic.co/guide/en/elasticsearch/reference/current/module-Transport t.html”rel = “ norefrer”> https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html

Port: 9300(计算机将接受 tcp 连接的端口)

这在最近的版本中有所改变。初始化将成为这个集群一部分的 ES 实例的所有 IPv4地址 与 TCP 端口(重要)。这在属于这个集群的所有 ES 实例中都是一样的。

First _ master _ node: 将参与主选举的 ES 机器的节点名(node.name)(基于 Quorum 的决策制定:-https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-quorums.html#modules-discovery-quorums)