ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【ES专题】ElasticSearch集群架构剖析_es集群(1) [打印本页]

作者: 莱莱    时间: 2024-8-16 06:03
标题: 【ES专题】ElasticSearch集群架构剖析_es集群(1)
前言

个人感觉集群架构其实都有点大同小异,看了这么多集群架构之后,感觉无非要思量的地方就几点:
阅读对象

有基本ES使用知识,需要使用集群架构
阅读导航

系列上一篇文章:《【ES专题】ElasticSearch搜索进阶》
系列下一篇文章:《【ES专题】ElasticSearch功能详解与原理剖析》
要点

ES要掌握什么:
条记正文

一、ES集群架构

1.1 为什么要使用ES集群架构

为什么需要使用集群架构?这就得提一下分布式系统的可用性与扩展性了。

上面所说的正是集群架构的优势所在。对ES集群架构来说,则体现在:


1.2 ES集群核心概念

ES集群中有2个比较核心的概念需要理解一下。分别是:节点、分片。在聊这些概念之前,我们先重新梳理一下,ES的集群是什么。
ES的集群,亦上图所示,它通常由如下特性:

   留意:ES在现实生产情况中,还会摆设多个集群一起工作
  
1.2.1 节点

ES中的节点本质上是一个Elasticsearch的实例,一个Java进程。通常,我们建议生产情况中,一台机器只运行一个ES实例。(一台机器摆设多个节点,其实是违背【高可用】原则的)
ES节点有如下特性:

通过ES多角色界说可以看的出来,ES的集群架构非常成熟,它也是我现在见过的角色最丰富的架构。如此丰富的角色界说,肯定是为了拓展集群架构而生的,单一职责嘛。不外有一点我没想通的是,假如节点太多了,做一次CRUD的速率能快吗?会不会在通信上就耗费了很多时间。
   节点范例,可以通过如下配置参数禁用/启用

  关于Master eligible nodes和Master Node

关于Data Node 和 Coordinating Node

其他节点范例

   差别硬件配置,通常是CPU跟硬盘。硬盘根据冷热数据范例,可以选择固态大概机械硬盘
  
以下是一个多集群业务架构图:

1.2.1.1 Master Node主节点的功能

Master节点重要功能::
1.2.1.2 Data Node数据节点的功能

Data Node数据节点的功能:
   官方界说:
数据节点保存包罗您已索引的文档的分片。数据节点处置惩罚数据相干操纵,例如 CRUD、搜索和聚合。这些操纵是 I/O、内存和 CPU 麋集型操纵。监视这些资源并在过载时添加更多数据节点非常重要。
拥有专用数据节点的重要好处是主角色和数据角色的分离。
要创建专用数据节点,请设置:node.roles: [ data ]
在多层摆设体系结构中,您可以使用专门的数据角色将数据节点分配到特定层:data_content、data_hot、data_warm、 data_cold或data_frozen。一个节点可以属于多个层,但具有专用数据角色之一的节点不能具有通用data角色。
  1.2.1.3 Coordinate Node调和节点的功能

官方界说:
诸如搜索哀求或批量索引哀求之类的哀求,它们大概涉及差别数据节点上保存的数据。例如,搜索哀求分两个阶段执行,这两个阶段由接收客户端哀求的节点(调和节点)调和。
每个节点都是隐式的调和节点。这意味着具有显式空角色列表的节点node.roles将仅充当调和节点,无法禁用。因此,这样的节点需要有足够的内存和 CPU 才能处置惩罚网络阶段。
1.2.1.4 Ingest Node调和节点的功能

官方界说:
在现实的文档索引发生之前,使用摄取节点对文档举行预处置惩罚。摄取节点拦截批量和索引哀求,应用转换,然后将文档传递回索引或批量api。
默认情况下,所有节点都启用摄取,因此任何节点都可以处置惩罚摄取任务。您还可以创建专用的摄取节点。假如要禁用节点的摄取,请在elasticsearch. conf中配置以下配置。yml文件:node.ingest: false
要在索引之前对文档举行预处置惩罚,请界说一个指定一系列处置惩罚器的管道。每个处置惩罚器都以某种特定的方式转换文档。例如,管道大概有一个处置惩罚程序从文档中删除字段,然后有另一个处置惩罚程序重命名字段。然后,集群状态存储配置的管道。
要使用管道,只需在索引或批量哀求上指定pipeline参数。这样,摄取节点就知道要使用哪个管道。例如:
  1. PUT my-index/my-type/my-id?pipeline=my_pipeline_id
  2. {
  3.   "foo": "bar"
  4. }
复制代码
1.2.1.5 其他节点功能

其他节点相对来说使用的比较少,不做介绍了
1.2.1.6 Master Node主节点选举流程

ES的选举流程也很简朴,如下:
   在我们的生产过程中,Master Node的最佳实践方案
  
  1.2.2 分片

分片是ES中一个比较重要的概念。ElasticSearch是一个分布式的搜索引擎,索引可以分成一份或多份,多份分布在差别节点的分片当中。ElasticSearch会自动管理分片,假如发现分片分布不平衡,就会自动迁徙。
分片又有【主分片】、【副天职片】之分。它们的区别如下:

  1. # 指定索引的主分片和副本分片数
  2. PUT /csdn_blogs
  3. {
  4.   "settings": {
  5.     "number\_of\_shards": 3,
  6.     "number\_of\_replicas": 1
  7.   }
  8. }
复制代码
分片架构

如上图是某个集群的分片架构,它有如下特性:
   通常都是奇数,所谓【集群奇数法则】。但其实只是名字很唬人,本质上也没那么神奇。你自己想想,假如是偶数的话,是不是很有大概出现选举平票的时候?根据我的经验,选举算法通常都渴望快速选举一个master大概leader出来,以便可以或许快速提供服务,以是没空扯皮
     高可用之——故障转移
     使用【cat API检察集群信息】
  
  1.3 搭建三节点ES集群

1.3.1 ES集群搭建步骤

下面是在Linux情况,centos7下面的集群搭建步骤:
1)系统情况预备
首先创建用户,因为es不允许root账号启动
  1. adduser es
  2. passwd es
复制代码
安装版本:elasticsearch-7.17.3。接着切换到root用户,修改/etc/hosts:
  1. vim  /etc/hosts
  2. 192.168.66.150 es-node1  
  3. 192.168.66.151 es-node2  
  4. 192.168.66.152 es-node3  
复制代码
2)修改elasticsearch.yml
留意配置里面的注释,里面有一些细节。比如:
  1. # 指定集群名称3个节点必须一致
  2. cluster.name: es-cluster
  3. #指定节点名称,每个节点名字唯一
  4. node.name: node-1
  5. #是否有资格为master节点,默认为true
  6. node.master: true
  7. #是否为data节点,默认为true
  8. node.data: true
  9. # 绑定ip,开启远程访问,可以配置0.0.0.0
  10. network.host: 0.0.0.0
  11. #用于节点发现
  12. discovery.seed_hosts: ["es-node1", "es-node2", "es-node3"]
  13. #7.0新引入的配置项,初始仲裁,仅在整个集群首次启动时才需要初始仲裁。
  14. #该选项配置为node.name的值,指定可以初始化集群节点的名称
  15. cluster.initial_master_nodes: ["node-1","node-2","node-3"]
  16. #解决跨域问题
  17. http.cors.enabled: true
  18. http.cors.allow-origin: "\*"
复制代码
三个节点配置很简朴,按照上面的模板,依次修改node.name就行了
3) 启动每个节点的ES服务
  1. # 注意:如果运行过单节点模式,需要删除data目录, 否则会导致无法加入集群
  2. rm -rf data
  3. # 启动ES服务
  4. bin/elasticsearch -d
复制代码
4)验证集群
正常来说,假如我们先启动了192.168.66.150,那么它就是这个集群当中的主节点,以是我们验证集群的话,只需要访问http://192.168.66.150:9200即可看到如下界面:

1.3.2 安装客户端

介绍完了ES的集群摆设,我们再来看看ES客户端的摆设。这里有两个可选方案,它们分别是Cerebro和Kibana,它们的区别与接洽如下:
   Cerebro和Kibana都是用于Elasticsearch的开源工具,但它们在功能和使用场景上存在一些区别。
  功能:
  
  使用场景:
  
  Cerebro安装
Cerebro 可以检察分片分配和通过图形界面执行常见的索引操纵,完全开源,并且它允许添加用户,密码或 LDAP 身份验证问网络界面。Cerebro 基于 Scala 的Play 框架编写,用于后端 REST 和 Elasticsearch 通信。 它使用通过 AngularJS 编写的单页应用程序(SPA)前端。
安装包下载地址如下:https://github.com/lmenezes/cerebro/releases/download/v0.9.4/cerebro-0.9.4.zip
下载安装之后,用以下命令启动即可:
  1. cerebro-0.9.4/bin/cerebro
  2. #后台启动
  3. nohup bin/cerebro > cerebro.log &
复制代码
访问:http://192.168.66.150:9000/

输入ES集群节点:http://192.168.66.150:9200,创建连接。然后会出现以下界面:

kibana安装
1)修改kibana配置
  1. vim config/kibana.yml
  2. server.port: 5601
  3. server.host: "192.168.66.150"
  4. elasticsearch.hosts: ["http://192.168.66.150:9200","http://192.168.66.151:9200","http://192.168.66.152:9200"]  
  5. i18n.locale: "zh-CN"   
复制代码
2)运行Kibana
  1. #后台启动
  2. nohup  bin/kibana &
复制代码
3)访问
访问http://192.168.66.150:5601/验证
二、生产情况最佳实践

2.1 一个节点只承担一个角色的配置

我们在上面的介绍中知道,节点有多种差别的范例(角色),有:Master eligible / Data / Ingest / Coordinating /Machine Learning等。不外跟之前学习的各种集群架构差别的是,ES一个节点可承担多种角色。
不外,在生产情况中只管照旧一个节点一种角色比较好,优点是:极致的高可用;缺点是:大概有点费钱
想要一个节点只承担一个角色,只需要修改如下配置:
  1. #Master节点
  2. node.master: true
  3. node.ingest: false
  4. node.data: false
  5. #data节点
  6. node.master: false
  7. node.ingest: false
  8. node.data: true
  9. #ingest 节点
  10. node.master: false
  11. node.ingest: true
  12. node.data: false
  13. #coordinate节点
  14. node.master: false
  15. node.ingest: false
  16. node.data: false
复制代码
2.2 增加节点程度扩展场景




既有得当小白学习的零基础资料,也有得当3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目次截图出来,全套包罗大厂面经、学习条记、源码课本、实战项目、大纲路线、讲解视频,并且后续会持续更新
需要这份系统化资料的朋侪,可以戳这里获取
#data节点
node.master: false
node.ingest: false
node.data: true
#ingest 节点
node.master: false
node.ingest: true
node.data: false
#coordinate节点
node.master: false
node.ingest: false
node.data: false
  1. #### 2.2 增加节点水平扩展场景
  2. [外链图片转存中...(img-YjOKQvdb-1714255991059)]
  3. [外链图片转存中...(img-UlHjYR27-1714255991060)]
  4. [外链图片转存中...(img-fCKkkTnd-1714255991060)]
  5. **既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
  6. **由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
  7. **[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4