es集群 分片配置,elasticsearch集群搭建

  es集群 分片配置,elasticsearch集群搭建

  本文主要介绍了Elasticsearches的集群构建和数据分片过程的详细说明。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。

  

目录

Elasticsearch高级集群构建,数据分片广播模式单播模式选择主节点什么是裂脑错误识别?

 

  

Elasticsearch高级之集群搭建,数据分片

 

  Es使用两种不同的方法来发现对方:

  广播

  单播

  您也可以同时使用这两种方式,但是默认的广播和单播需要一个已知节点列表才能完成。

  

广播方式

 

  当es实例启动时,它向地址224 . 2 . 2 . 228 . 0000000000004发送一个广播ping请求,其他es实例使用相同的集群名称响应此请求。

  一般情况下,默认的集群名称是上述cluster_name对应的elasticsearch。总的来说,广播是一种很好的地方风格。想象一下,广播发现就像你大喊:别说了,你再说话我就红了!那么你听到的一切都会回应你。

  但是广播有缺点,过程不可控。

  在单独的本地目录下,分别制作elasticsearch文件的另一个副本,并在bin目录下启动启动文件。输入:http://127 . 0 . 0 . 1:9200/_ cluster/health?Pretty可以从number_of_nodes中看到,集群中已经有两个节点。

  

单播方式

 

  当一个节点的ip(想象一下如果我们的ip地址一直在变)不经常变化,或者es只连接一个特定的节点。单播发现是一种理想的模式。当使用单播时,我们告诉es集群中其他节点的ip和(可选)端口以及端口范围。我们在elasticsearch.yml配置文件中设置:

  discovery . Zen . ping . unicast . hosts :[ 10 . 0 . 0 . 1 , 10.0.0.3:9300 , 10.0.0.6[9300-9400]]

  就像交换微信名片一样,大家互传的时候都会加入群。

  一般来说,我们不需要关闭单播发现。如果需要广播发现,只需将配置文件中的列表留空即可。

  #现在,让我们为这个集群添加一些单播配置,并在每个节点中打开configelasticsearch.yml文件。各节点的配置如下(原配置文件已标注,可以理解为空。我已经写好了每个节点的配置,并直接粘贴到其中。如果没有动态标注,出了问题很容易恢复):

  #1 elasticsearch2节点,集群名为my_es1,集群端口为9300;该节点的名称是node1,它监听本地端口9200。可以做主节点,读写磁盘(不写的话默认)。

  cluster.name: my_es1

  node.name:节点1

  网络主机: 127.0.0.1

  http.port: 9200

  transport.tcp.port: 9300

  discovery . Zen . ping . unicast . hosts :[ 127 . 0 . 0 . 1:9300 , 127.0.0.1:9302 , 127.0.0.1:9303 , 127.0.0.1:9304]

  # 2 elasticsearch3节点,集群名为my_es1,集群端口为9302;该节点的名称是node2,它侦听本地端口9202,并且可以拥有成为主节点和读写磁盘的权限。

  cluster.name: my_es1

  node.name:节点2

  网络主机: 127.0.0.1

  http.port: 9202

  transport.tcp.port: 9302

  node.master: true

  node.data: true

  discovery . Zen . ping . unicast . hosts :[ 127 . 0 . 0 . 1:9300 , 127.0.0.1:9302 , 127.0.0.1:9303 , 127.0.0.1:9304]

  # 3 elasticsearch3节点,集群名为my_es1,集群端口为9303;节点名为node3,监听本地端口9203,可以有权限成为主节点,读写磁盘。

  特许人寿保险人

  ster.name: my_es1

  node.name: node3

  network.host: 127.0.0.1

  http.port: 9203

  transport.tcp.port: 9303

  discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300", "127.0.0.1:9302", "127.0.0.1:9303", "127.0.0.1:9304"]

  # 4 elasticsearch4节点,集群名称是my_es1,集群端口是9304;节点名称是node4,监听本地9204端口,仅能读写磁盘而不能被选举为主节点。

  cluster.name: my_es1

  node.name: node4

  network.host: 127.0.0.1

  http.port: 9204

  transport.tcp.port: 9304

  node.master: false

  node.data: true

  discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300", "127.0.0.1:9302", "127.0.0.1:9303", "127.0.0.1:9304"]

  由上例的配置可以看到,各节点有一个共同的名字my_es1,但由于是本地环境,所以各节点的名字不能一致,我们分别启动它们,它们通过单播列表相互介绍,发现彼此,然后组成一个my_es1集群。谁是老大则是要看谁先启动了!

  

 

  

选取主节点

 

  无论是广播发现还是到单播发现,一旦集群中的节点发生变化,它们就会协商谁将成为主节点,elasticsearch认为所有节点都有资格成为主节点。

  如果集群中只有一个节点,那么该节点首先会等一段时间,如果还是没有发现其他节点,就会任命自己为主节点。

  对于节点数较少的集群,我们可以设置主节点的最小数量,虽然这么设置看上去集群可以拥有多个主节点。

  实际上这么设置是告诉集群有多少个节点有资格成为主节点。

  怎么设置呢?修改配置文件中的:

  

discovery.zen.minimum_master_nodes: 3

 

  一般的规则是集群节点数除以2(向下取整)再加一。比如3个节点集群要设置为2。这么着是为了防止脑裂(split brain)问题。

  

 

  

什么是脑裂

 

  脑裂这个词描述的是这样的一个场景:

  (通常是在重负荷或网络存在问题时)elasticsearch集群中一个或者多个节点失去和主节点的通信,然后各节点就开始选举新的主节点,继续处理请求。

  这个时候,可能有两个不同的集群在相互运行着,这就是脑裂一词的由来,因为单一集群被分成了两部分。

  为了防止这种情况的发生,我们就需要设置集群节点的总数,规则就是节点总数除以2再加一(半数以上)。这样,当一个或者多个节点失去通信,小老弟们就无法选举出新的主节点来形成新的集群。因为这些小老弟们无法满足设置的规则数量。

  我们通过下图来说明如何防止脑裂。比如现在,有这样一个5个节点的集群,并且都有资格成为主节点:

  

 

  为了防止脑裂,我们对该集群设置参数:

  

discovery.zen.minimum_master_nodes: 3 # 3=5/2+1

 

  之前原集群的主节点是node1,由于网络和负荷等原因,原集群被分为了两个switch:node1 、2和node3、4、5。

  因为minimum_master_nodes参数是3,所以node3、4、5可以组成集群,并且选举出了主节点node3。

  而node1、2节点因为不满足minimum_master_nodes条件而无法选举,只能一直寻求加入集群(还记得单播列表吗?),要么网络和负荷恢复正常后加入node3、4、5组成的集群中,要么就是一直处于寻找集群状态,这样就防止了集群的脑裂问题。

  除了设置minimum_master_nodes参数,有时候还需要设置node_master参数,比如有两个节点的集群,如果出现脑裂问题,那么它们自己都无法选举,因为都不符合半数以上。

  这时我们可以指定node_master,让其中一个节点有资格成为主节点,另外一个节点只能做存储用。当然这是特殊情况。

  那么,主节点是如何知道某个节点还活着呢?这就要说到错误识别了。

  

 

  

错误识别

 

  其实错误识别,就是当主节点被确定后,建立起内部的ping机制来确保每个节点在集群中保持活跃和健康,这就是错误识别。
主节点ping集群中的其他节点,而且每个节点也会ping主节点来确认主节点还活着,如果没有响应,则宣布该节点失联。想象一下,老大要时不常的看看(循环)小弟们是否还活着,而小老弟们也要时不常的看看老大还在不在,不在了就赶紧再选举一个出来!

  

 

  但是,怎么看?多久没联系算是失联?这些细节都是可以设置的,不是一拍脑门子,就说某个小老弟挂了!在配置文件中,可以设置:

  

discovery.zen.fd.ping_interval: 1

 

  每个节点每隔discovery.zen.fd.ping_interval的时间(默认1秒)发送一个ping请求,等待discovery.zen.fd.ping_timeout的时间(默认30秒),并尝试最多discovery.zen.fd.ping_retries次(默认3次),无果的话,宣布节点失联,并且在需要的时候进行新的分片和主节点选举。

  根据开发环境,适当修改这些值。

  以上就是Elasticsearches的集群搭建及数据分片过程详解的详细内容,更多关于Elasticsearches集群搭建数据分片的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: