假设我有5台机器,我想在其上运行elasticsearch集群,并且它们都连接到共享驱动器。我将弹性搜索的一个副本放到共享驱动器上,这样所有三个都可以看到它。我只是在我的机器上启动该共享驱动器上的elasticsearch并且群集会自动发挥其魔力吗?或者我是否必须配置特定设置以使弹性搜索能够实现其在5台计算机上运行?如果是,那么相关设置是什么?我是否应该担心配置副本还是自动处理?
答案 0 :(得分:52)
通常会自动处理。
如果自动发现不起作用。通过启用单播发现来编辑弹性搜索配置文件
节点1:
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"]
节点2:
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的资源将阻止其他服务正常运行。
例如,考虑一个10,000节点集群和所有10,000个节点进行自动ping。
答案 1 :(得分:51)
非常容易。
你需要每台机器拥有它自己的ElasticSearch副本(只需复制你现在拥有的那台) - 原因是每台机器/节点都会保留它自己的文件,这些文件在整个群集中分片。
您唯一需要做的就是编辑配置文件以包含群集的名称。
如果所有计算机都具有相同的群集名称,elasticsearch将自动执行其余计算(只要计算机都在同一网络上)
请阅读此处以帮助您入门: https://www.elastic.co/guide/en/elasticsearch/guide/current/deploy.html
当您创建索引(数据所在的位置)时,您可以在此时定义所需的副本数量(它们将分布在群集中)
答案 2 :(得分:4)
我尝试了@KannarKK在ES 2.0.2上建议的步骤,但是,我无法启动并运行群集。显然,我想出了一些东西,因为我在Master上设置了tcp端口号,在Slave配置discovery.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"]
答案 3 :(得分:1)
Elastic Search 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”
cluster.name::在将要成为集群一部分的所有计算机上,这都是相同的。
node.name: ES实例的标识符。如果未提供,则默认为计算机名称。
node.master::指定此ES实例是否将成为主实例
node.data :指定此ES实例是否将成为数据节点(保留数据)
bootsrap.memory_lock::禁用交换。您可以在不设置此标志的情况下启动集群。但建议您设置锁定。更多信息:https://www.elastic.co/guide/en/elasticsearch/reference/master/setup-configuration-memory.html
network.host::0.0.0.0(如果要通过网络公开ES实例)。 0.0.0.0与127.0.0.1(又名localhost或回送地址)不同。 这意味着计算机上的所有IPv4地址。如果计算机具有多个ip地址,并且服务器正在监听0.0.0.0,则客户端可以从任何IPv4地址访问该计算机。
http.port::此ES实例将在其上侦听HTTP请求的端口
transport.host::主机的IPv4地址(将用于与在不同计算机上运行的其他ES实例进行通信)。更多信息:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html
transport.tcp.port::9300(计算机将接受TCP连接的端口)
discovery.seed_hosts :在最新版本中已更改。使用将要成为此群集一部分的ES实例 TCP端口(重要)初始化所有IPv4地址。在属于该群集的所有ES实例中,这都是相同的。
cluster.initial_master_nodes:将要参加主选举的ES机器的节点名称(node.name)。(基于仲裁的决策:-https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-quorums.html#modules-discovery-quorums)