0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Elasticsearch底层模块:如何去规划和配置各种各样的node

马哥Linux运维 来源:马哥Linux运维 2022-12-22 10:18 次阅读

node module,主要是用来处理各种不同类型的节点的,es有哪些类型的node,另外就是对这些类型的node有些什么特殊的参数,对于一个较大的集群来说,如何去规划和配置各种各样的node

1、node类型

如果我们启动es的一个实例,那么就是启动了一个es node,一些es node就可以组成一个es集群。如果仅仅运行了一个es node,那么也有一个es集群,只是节点数量就是1。

集群中的每个node都可以处理http和transport请求,其中transport层是用来处理节点间的通信的,http层是用来处理外部的客户端rest请求的。

所有的node都知道集群中的其他node,并且可以将客户端的请求转发到适当的节点上去。

节点的类型包含以下几种:

(1)master-eligible node:master候选节点,将node.master设置为true(默认),代表这个node就是master的候选节点,可以被选举为master node,然后控制整个集群。

(2)data node:将node.data设置为true(默认),data node可以存储数据,同时处理这些数据相关的操作,比如CRUD操作,搜索操作,聚合操作,等等。

(3)ingest node:将node.ingest设置为true(默认),ingest node是用来对document写入索引文件之前进行预处理的。可以对每个document都执行一条ingest pipeline,在document写入索引文件之前,先对其数据进行处理和转化。但是如果要执行的ingest操作太过繁重,那么可以规划单独的一批ingest node出来,然后将node.master和node.data都设置为false即可。

(4)tribe node:tribe node可以通过tribe.*相关参数来设置,它是一种特殊的coordinate node,可以连接到多个es集群上去,然后对多个集群执行搜索等操作。

(5)默认情况下,每个node的node.master,node.data,node.ingest都是true,都是master候选节点,也可以作为data node存储和操作数据,同时也可以作为ingest node对数据进行预处理。对于小于20个节点的小集群来说,这种架构是ok的,没问题的。但是如果对于大于20个物理机的集群来说,最好是单独规划出master node、data node和ingest node来。

(6)coordinate node

搜索和bulk等请求可能会涉及到多个节点上的不同shard里的数据,比如一个search请求,就需要两个阶段执行,首先第一个阶段就是一个coordinating node接收到这个客户端的search request。接着,coordinating node会将这个请求转发给存储相关数据的node,每个data node都会在自己本地执行这个请求操作,同时返回结果给coordinating node,接着coordinating node会将返回过来的所有的请求结果进行缩减和合并,合并为一个global结果。

每个node都是一个coordinating node。这就意味着如果一个node,将node.master,node.data,node.ingest全部设置为false,那么它就是一个纯粹的coordinating node,仅仅用于接收客户端的请求,同时进行请求的转发和合并。

如果真的是大集群的话,最好也是单独规划一批node出来,就作为coordinating node,然后让es client全部往这些node上去发送请求。

如果真的是一个大于20个节点的生产集群的话,建议将4种node,master node,data node,ingest node,cooridating node,全部分离开来

集群中有30台机器

master node:3个

ingest node:视具体情况而定,具体是看你的ingest预处理操作有多么的复杂,耗费多少资源,但是一般情况下来说,es ingest node用的比较少的,ingest node也可以不用单独规划一批出来

coordinate node:视具体情况而定,但是对于大集群来说,最好是单独拆几个节点出来,用于接收客户端的请求,3个节点。主要是看你的并发访问量有多大,比如说你的最大的QPS也就是10,或者是100,那么3个节点肯定够了。如果你的QPS是1000,或者是10000,那么可能就要规划,10个coordinate node,或者100个

data node:24个data node,data node肯定是分配的是最多的,主要用来存储数据,执行各种对数据的操作么,资源耗费肯定是最多的

2、master eligible node

(1)master-eligible node的介绍以及配置

master node负责轻量级的集群管理工作,比如创建和删除索引,追踪集群中的每个node,决定如何将shards分配给各个node。对于集群来说,有一个稳定的master node,是非常关键的。然后master-eligible node都有机会被选举为一个master node,同时master node必须有权限访问path.data指定的data目录,因为master node需要在data目录中存储cluster state。

对数据进行index和search操作,会耗费大量的cpu,内存,磁盘io,以及网络io,耗费的是每个node的资源。因此我们必须要确保master node是非常稳定的,而且是压力不大的,对于大集群来说,比较好的办法是划分出单独的master node和data node。如果不拆开的话,一个node又要是data node,要复杂存储数据,处理各种操作,同时又要负责管理集群,可能就会不稳定,出问题。

同时因为默认情况下,master node也能扮演coordinating node的角色,并且将search和index请求路由到对应的data node上去执行,最好是不要让master node来执行这些coordinate操作。因为msater node的稳定运行对于整个集群来说非常重要,比你利用master node资源来执行一些coordinate操作要重要的多。

如果要设置一个node为专门的master-eligible node,需要做如下的设置:

node.master: true node.data: false node.ingest: false

(2)通过minimum_master_nodes来避免脑裂问题

要预防数据的丢失,我们就必须设置discovery.zen.minimum_master_nodes参数为一个合理的值,这样的话,每个master-eligible node才知道至少需要多少个master-eligible node才能组成一个集群。

比如说,我们现在有一个集群,其中包含两个master-eligible nodes。然后一个网络故障发生了,这两个节点之间丢失了联络。每个节点都认为当前只有一个master-eligible node,就是它们自己。此时如果discovery.zen.minimum_master_nodes参数的默认值是1,那么每个node就可以让自己组成一个集群,选举自己为master node即可。结果就会导致出现了两个es集群,这就是脑裂现象。即使网络故障解决了,但是这两个master node是不可能重新组成一个集群了。除非某个master eligible node重启,然后自动加入另外一个集群,但是此时写入这个节点的数据就会彻底丢失。

那么如果现在我们有3个master-eligible node,同时将discovery.zen.minimum_master_nodes设置为2.如果网络故障发生了,此时一个网络分区有1个node,另外一个网络分区有2个node,只有一个node的那个网络分区,没法检测到足够数量的master-eligible node,那么此时它就不能选举一个master node出来组成一个新集群。但是有两个node的那个网络分区,它们会发现这里有足够数量的master-eligible node,那么就选举出一个新的master,然后组成一个集群。当网络故障解除之后,那个落单的node就会重新加入集群中。

discovery.zen.minimum_master_nodes,必须设置为master-eligible nodes的quorum,quorum的公式为:(master_eligible_nodes / 2) + 1。

换句话来说,如果有3个master-eligible nodes,那么那个参数就必须设置为(3 / 2) + 1 = 2,比如下面这样:

discovery.zen.minimum_master_nodes: 2

随着集群节点的上线和下限,这个参数都是要重新设置的,可以通过api来设置

PUT_cluster/settings
{
"transient":{
"discovery.zen.minimum_master_nodes":2
}
}

此时将master node和data node分离的好处就出来了,一般如果单独规划一个master nodes的话,只要规划固定的3个node是master-eligible node就可以了,那么data node无论上线和下限多少个,都无所谓的。

3、data node

data node负责存储shard的数据,也就是那些document。data node可以处理各种操作,比如CRUD,搜索,聚合。这些操作全都是很耗费IO,内存和cpu资源的。因此监控这些资源的使用是很重要的,同时如果资源过载了,那么就要添加更多的data node。

如果要设置一个专门的data node,需要做出如下的设置:

node.master: false node.data: true node.ingest: false

4、ingest node

nigest node可以执行预处理pipeline,包含了多个ingest processors。不同的ingest processor执行的操作类型是不同的,那么对资源的需求也是不同的,不过还是最好是规划一批单独的ingest node出来,不要跟master node和data node混合在一起。

如果要配置一个单独的ingest node:

node.master: false node.data: false node.ingest: true search.remote.connect: false

5、cooridnating only node

如果我们规划了一批专门的master node,data node以及ingest node,那么此时还遗留下来了一种node,那就是coordinating node,这些node专门用来接收客户端的请求,同时对请求进行路由和转发,并对请求的结果进行合并。

coordinating only nodes对于大集群来说,可以使用专门的node来负载coordinate操作,而不是让coordinate操作的工作负载集中到master node和data node上去。coordinating node也会加入cluster,同时可以获取到完整的cluster state,它们主要是用cluster state中包含的node info来进行请求转发。

如果在一个集群中规划太多的coordinating node可能会加重整个集群的负担,因为被选举出来的master node必须要从所有的node上得到cluster state update的ack,如果coordinating nodes过多,那么可能会加重master node的负担。

如果要设置coordinating only node的话:

node.master: false node.data: false node.ingest: false search.remote.connect: false

6、node data path设置

(1)path.data

每个data和master-eligible node都需要能够访问data目录,在那里存储了每个shard的数据,包括cluster state也存储在那里。path.data默认是指向$ES_HOME/data目录的,但是在生产环境中,肯定是不能这样设置的,因为在升级es的时候,可能会导致数据被清空或者覆盖。

此时一般需要在elasticsearch.yml中设置path.data:

path.data: /var/elasticsearch/data

(2)node.max_local_storage_nodes

data目录可以被多个node共享,即使是不同集群中的es node,也许他们在一个物理机上启动了。这个共享的方式对于我们测试failover是很有用的,以及在开发机上测试不同的配置。但是在生产环境下,绝对不用这么做,一个data目录就给一个es node使用即可。默认情况下,es被配置成阻止超过一个node共享data目录中的数据,如果要允许多个node共享一个data目录,需要设置node.max_local_storage_nodes为一个超过1的数字。

编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • node
    +关注

    关注

    0

    文章

    23

    浏览量

    5923
  • Elasticsearch
    +关注

    关注

    0

    文章

    26

    浏览量

    2816

原文标题:Elasticsearch的底层模块深入解析之node

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux安装elasticsearch-head

    elasticsearch-head 是一款专门针对于 elasticsearch 的客户端工具,用来展示数据。 elasticsearch-head 是基于 JavaScript 语言编写的,可以
    的头像 发表于 02-15 16:06 556次阅读
    Linux安装<b class='flag-5'>elasticsearch</b>-head

    各种各样的电容该怎么选择?

    `我在看电路图的时候,发现电容有各种各样的,有陶瓷的,电解的,还有钽电容,贴片的等等。不知道该怎么选用。请问大概有多少种电容,分别有哪些特点!电路中发现接地的电容,选择不同的容值和种类。这是为什么?难道滤波和容值还有关系么?`
    发表于 11-21 20:50

    Proteus实例集锦,包括电路图、仿真程序,各种各样的电路

    `Proteus实例集锦,包括电路图、仿真程序,各种各样的电路.全套的文件包括hex还有对应的仿真图,很不错。解压后40m`
    发表于 05-12 07:11

    各种各样的labview的控件包,越多越好。

    本人现要做一个小项目,需要用到各种各样的控件,希望大家上传一些,将不胜感激。
    发表于 03-15 16:44

    一个超级的A D库,,包含各种各样的封装库,种类丰富,资料齐全

    一个超级的A D库,,包含各种各样的封装库,种类丰富,资料齐全!!!
    发表于 08-01 20:14

    这些线路中传输着各种各样的控制信号

    `  不久的以前,当我们打开发动机,我们看到的会是一连串的线束与线路~如下图:这些线路中传输着各种各样的控制信号。    这些线束不仅增加了车身的自重,消耗更多的能源,也增加了测试工程师调试与故障
    发表于 12-20 14:47

    linux安装配置ElasticSearch之源码安装

    创建软连接[root@CentOS6 home]# ln -s /usr/local/elasticsearch-1.7.2 /usr/local/elasticsearch4.配置
    发表于 01-11 17:27

    现代世界中充满了各种各样的电子传感器

    在我们生活的现代世界中充满了各种各样的电子传感器,它们通过网络连接在一起。但是,大多数传感器产生的数据对于我们来说是不可见的,只能用于特定的应用程序。一旦能够消除这种障碍,让任何联入网络的计算机都能使用这些数据,我们或许就将迈入普适计算的全新时代。
    发表于 05-05 08:31

    苏州回收西门子模块各个地区上门回收各种各样品牌CPU模块 plc模块

    联系方式 *** 苏州回收西门子模块各个地区上门回收各种各样品牌CPU模块 plc模块苏州回收西门子模块各个地区上门回收
    发表于 11-12 10:03

    为什么有各种各样的的单片机?

    什么是单片机?为什么有各种各样的的单片机?
    发表于 10-13 07:43

    Proteus实例集锦(包括电路图.仿真程序,各种各样的电路

    Proteus实例集锦(包括电路图.仿真程序,各种各样的电路):4x4键盘,51单片机12864大液晶屏proteus仿真,8253可编程定时器计数器,窃听器(使用PROTEUS串口例子)V1.0,电子琴和倒计时播放音
    发表于 10-02 10:23 1w次下载
    Proteus实例集锦(包括电路图.仿真程序,<b class='flag-5'>各种各样</b>的电路

    Rinspeed将推出新款无人驾驶公交 车体还分离以满足各种各样的需求

    而新晋品牌 Rinspeed 就打算推出一种新型自动驾驶汽车方案,这款车不仅搭载了自动驾驶系统,车体还分离以满足各种各样的需求。
    的头像 发表于 01-04 10:50 3037次阅读

    图解ElasticSearch底层工作原理

    底层工作原理,试图回答以下问题: 为什么我的搜索 *「foo-bar*」无法匹配foo-bar? 为什么增加更多的文件会压缩索引(Index)? 为什么ElasticSearch占用很多内存? 版本
    的头像 发表于 10-09 11:27 4592次阅读
    图解<b class='flag-5'>ElasticSearch</b>的<b class='flag-5'>底层</b>工作原理

    XR在娱乐领域各种各样的应用

    (增强现实)结合起来的MR(复合现实)等,这些技术统称为XR(扩展现实)。 XR也在娱乐领域开展各种各样的应用。例如,在戏剧和音乐会等舞台演出中使用XR的案例越来越多。在墙壁和地板由绿幕或大型高精度LED显示器构成的XR专用摄影棚进行表演,
    的头像 发表于 01-31 15:01 2343次阅读

    SpringBoot 连接ElasticSearch的使用方式

    在上篇 ElasticSearch 文章中,我们详细的介绍了 ElasticSearch各种 api 使用。 实际的项目开发过程中,我们通常基于某些主流框架平台进行技术开发,比如
    的头像 发表于 10-09 10:35 862次阅读