如何建立ES集群?


80

假设我要在5台计算机上运行Elasticsearch集群,并且它们都连接到共享驱动器。我将Elasticsearch的单个副本放在该共享驱动器上,以便所有三个都可以看到它。我是否只是在所有机器上的共享驱动器上启动Elasticsearch,集群便会自动发挥作用?还是我必须配置特定设置以使Elasticsearch意识到它可以在5台计算机上运行?如果是这样,相关的设置是什么?我应该担心配置副本还是会自动处理?


3
您不会使用共享文件夹作为索引,是吗?
javanna

Answers:


53

它超级容易。

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

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

如果所有机器都具有相同的集群名称,elasticsearch将自动执行其余操作(只要所有机器都在同一网络上)

阅读此处以开始使用:https : //www.elastic.co/guide/en/elasticsearch/guide/current/deploy.html

创建索引(数据存放在哪里)时,您需要定义所需的副本数量(它们将分布在集群中)


9
另外-安装头插件。它使监视索引的状态变得非常容易。mobz.github.io/elasticsearch-head
Transact Charlie

1
为什么需要在每台计算机上有单独的副本?根据我在单节点计算机上看到的内容,可以更改节点名称,以使多个实例以相同的副本运行:concept47.com/austin_web_developer_blog/elasticsearch/…当您具有单独的共享驱动器的独立计算机时,这不适用?我会认为,如果我为单个副本设置了群集名称,那么我可以让每台机器都运行该单个副本,因此,群集名称在理论上是正确的,还是我不正确?
罗兰多

每台机器(或节点)将需要它自己的文件空间来编写Lucene索引文件。如果您更改配置文件(检查链接)以指向本地节点上的另一个目录,则它可能会起作用。
Transact Charlie

我的印象是,每个集群的节点名称不同,因为elasticsearch的单个实例将能够自动判断出另一个实例已在运行,elasticsearch会基于节点创建单独的目录。(如果这不是正确的假设,请纠正我)
Rolando

1
为什么不试试它-您总是可以清理它?向后报告-我会感兴趣。过去,我在每台计算机上都运行一个安装,因为这似乎更加冗余和安全。
Transact Charlie

53

它通常是自动处理的。

如果自动发现无效。通过启用单播发现来编辑弹性搜索配置文件

节点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操作。


为了澄清起见,所有“ unicast.hosts”都应该是主服务器的IP / FQDN吗?似乎就是您的示例所指示的内容。
Harperville 2014年

据1.7.x的elasticsearch.yml评论,如果你设置“node.master:假”,则节点永远不会成为主...
Jonesome恢复莫妮卡

@Jonesome-我的示例说明了一个主节点和> 1个数据节点。如果您不希望节点充当主节点,则将属性设置为false可以没问题。但是,如果您希望节点成为主节点,则永远不要触摸此属性。
KannarKK 2015年

@KannarKK但是,使用ES时,如果在除1之外的每个节点上都设置“ node.master:false”,如果主节点出现故障,整个集群是否会出现故障?这不是破坏集群的主要目的吗?为什么不将“ node.master”完全留在yml中(默认情况下为true),以便如果主节点死亡,另一个节点可以成为主节点?
Jonesome恢复Monica 2015年

@Jonesome-我已经在答案中包含此信息:....请注意,按照ES规则,如果您有N个节点,那么按照惯例,N / 2 + 1个节点应该是故障转移机制的主节点。或可能不是数据节点。因此,如果您有> 1个主服务器,请将其所有信息添加到主机列表中
KannarKK

5

我尝试了@KannarKK在ES 2.0.2上建议的步骤,但是,无法启动和运行群集。显然,正如我在从属配置发现上在Master上设置tcp端口号那样,我发现了一些东西.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

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/zh/elasticsearch/reference/master/setup-configuration-memory.html

network.host:如果要通过网络公开ES实例,则为0.0.0.0。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/zh-CN/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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.