ElasticSearch学习笔记(四)-ES集群基本概念及搭建过程及主要工作原理(一)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: ElasticSearch学习笔记(四)-ES集群基本概念及搭建过程及主要工作原理

1.前言


UP之前都是在自己的阿里云服务器和腾讯云服务器上测试的ES,之前的关于ES以及Kibana的操作都是可以正常的执行的,但是这次在配置ES集群的时候问题却是一直有问题.虽然两者的ES都能够正常启动,但是双方节点都显示找不到对方节点,一直处于ping对方节点的状态.并且由于双方节点都处于这种状态,导致两台服务器的Kibana都无法正常连接到相应的ES,导致后续的操作都无法正常执行.


20210107154834931.png


在请教了我们技术主管之后,说是具体原因可能是由于不在同一个局域网里面的原因,或者因为是在广域网的原因,建议先尝试在本机的VMware上开两个虚拟机先测试一下,看看在本机内是否能够正常启动,如果正常启动的话,后面再分析是不是因为阿里云与腾讯云之间通讯障碍的原因.


于是我今天就先尝试在本机上测试一下,看看是不是我之前配置的问题,在本机测试之后发现,本机上面ES的集群是能够正常配置以及启动的:


20210107155555216.png


所以原因基本可以锁定在了就是阿里云服务器和腾讯云服务器之间通讯的问题,这个之后再说.


其次讲一下本片文章主要有下面几个内容:


了解一下RS集群中的一些基本概念

ES是如何搭建集群的并且是如何设置开机自启动的

ES集群工作的主要原理是什么,这里我会拿ES集群和Mysql集群对比,这样能够更好的理解ES集群为什么这么做


2.集群的基本概念


了解完ES集群如何配置之后,我们就需要顺便了解一下集群中的一些概念,这些概念其实之前就已经提到了,但是我们都没有深入的讲解,今天我们刚好再细致的讲解一下.


集群

集群就是由两个及以上节点构成的一个节点群,在集群中只会有一个主节点,其他的节点都是听从主节点的安排,并且所有的节点一起来存储ES的数据,并且这些数据都是分散的存储在这些节点之中.

节点

节点就是安装了ES的虚拟机,每个节点都能够存储数据.节点分为主节点以及从节点,主节点控制所有的从节点,并且

索引

索引这个概念我们之前就已经讲过了,在ES中的索引就相当于数据库的概念.但是呢这个又不完全一样.因为在ES中的索引只是一个单纯的逻辑存储单位,并不是真正的物理存储单位,真正的物理存储单位就是我们下面要说的一个概念即分片.

分片

分片这个概念我们之前就已经讲过了,我们所有的数据都是存储在分片里面的,这里我们就需要和上面的索引联合起来讲一下了.一般的我们是先创建索引也就是我们的 index,创建完索引之后,我们就会往索引里面添加数据,这时候这些数据就是存储在分片里面的,并且添加的数据可能是存储在多个分片里面.这就使得索引和分片的关系入下图所示:


20210108134916208.png


副本

最后我们需要了解一下副本的概念.其实大家看到就知道是什么意思.在ES集群里面,他是 默认会给每个分片在除该分片所在的节点以外的其它的节点上面创建该分片的一个副本.但是并不是所有其它的节点都会创建副本,ES集群默认的是在其它的3个节点上创建副本. 这样做既能保证数据的容错性,又能够有效的降低数据的存储压力,如果其它节点都创建该分片的副本的话,虽然容错性更够进一步的提高,但是每个节点的存储的数据就会大幅度增加.


3.如何搭建ES集群


如何不会VMware安装虚拟机的小伙伴,可以看我的这片博客: VMware中如何安装虚拟机 并且软件以及linux系统我都已经通过百度网盘链接的方式分享出来了


ES集群的搭建非常的简单,只需要简单配置一下config目录下的elasticsearch.yml文件即可.


这里主要就是配置一下的信息:


#集群的名称
cluster.name: es-cluster
#节点的名称
node.name: es-1
#是否是主节点
node.master: true
#是否是数据节点
node.data: true
#数据存储的目录
path.data: /opt/es/data
#日志存储的目录
path.logs: /opt/es/logs
#本机的ip
network.host: 本机ip
#es对方访问的端口号
http.port: 9200
#es集群内部通信的端口号
transport.tcp.port: 9300
集群中其他机器的IP地址
discovery.zen.ping.unicast.hosts: ["IP地址"]
#避免脑裂,设置集群中能够作为主节点机器的最小个数
discovery.zen.minimum_master_nodes: 2


稍微了解了这些之后,我们再来详细讲解一下他们的概念.


cluster.name: es-cluster

这个主要就是定义我们ES集群的名字,并且这个名称必须要统一,否则无法当成是同一个集群


node.name: es-1

这个就是节点的名称,每个节点的名称必须不一样,否则无法分辨各个节点


node.master: true

定义该节点是否可以成为主节点,一般每个节点都添加这段代码,因为我们这里定义之后,该节点不一定就是主节点,主节点是在启动之后集群自己从所有的主节点组里面挑选一个最为适合的节点为主节点.


node.data: true

定义该节点是否需要存储数据,这个要看具体的情况,一般公司就是直接ES和存储服务器是同一台,那么就需要设置,如果是ES服务器和存储服务器是不在同一台的,那么就可以不添加,具体看自己的需求.


path.data: /opt/es/data

这个大家看名字就能看出来就是定义ES数据的存储目录


path.logs: /opt/es/logs

这个大家看名字也能看出来就是定义ES日志的存储目录


network.host: 本机ip

这个定义的就是我们的ES最后是通过哪个IP访问


http.port: 9200

这个定义的就是我们的ES最后是通过哪个端口访问,这个主要指的是我们在浏览器中如何访问ES的端口


transport.tcp.port: 9300

这个定义的则是ES集群内部各个节点之间通讯的端口号


discovery.zen.ping.unicast.hosts: ["IP地址"]

这个就类似于我们的通讯录,主要就是将集群中除当前节点的ip外,填写其他节点的ip,这样每个节点才能知道其他节点的信息.


discovery.zen.minimum_master_nodes: 2

在了解这个属性之前,我们需要先了解一下脑裂这个概念.从字面意思来理解就是脑子分裂了,从原来的一个脑子分裂成了两个及以上的脑子.一般情况下集群是能够正常工作的,但是大家知道,世界上就是存在很多不正常的情况.

如果集群正常工作的话,那么工作的流程应该是这样的:


20210107165751572.png


但是假设由于网络或者其他的一些原因导致节点3与节点4与主节点的通信断掉了,就会变成下面这个样子:


20210107170018758.png


在这种情况下,节点3和节点4就会理所应当的认为是主节点挂掉了,那么这时候他们就会从他们俩中再选出一个主节点,就会出现下面的情况:


20210107192752730.png


这样集群中就会出现两个主节点,并且每个主节点还都认为没有其他主节点.自己和自己的从节点玩.不仅是内部,外部肯定也是不知道的,这就会导致下面这种情况:


20210108103231980.png


进行第一次请求的时候被分发到节点1,因为此时ES集群内部认为节点1是主节点,所以就在节点1处进行了操作.


当二次请求到达时,ES集群又将节点3认为是主节点于是就是节点3处进行了修改操作.


关键是如果刚好这时第三次请求到达后刚好ES集群又将节点1当成是主节点,那么这样就歇逼了,可以看到数据是没有发生改变的.所以就这就脑裂之后会产生的问题.客户端的请求可能是分发到了多个主节点上,但是主节点之间已经失去了通信,那么这样重复几次请求之后就会导致节点之间的数据不统一.


所以我们就需要解决脑裂这个问题,这里我们设置的这个属性就能在极大程度上帮助我们解决这个问题,注意这里只是极大程度上,并不能完全解决这个问题.


这里我们设置的属性意思就是集群中可以设置为主节点机器的最小数目,并且这个数目的值是这样定义的,是 机器总数的半值+1.一旦ES检测到所有的节点数<这个值就说明ES集群已经发生脑裂了,就会停止服务.


这里和大家举个例子来说明一下,大家就能理解了.这里我们还是拿上面的例子来讲解:


20210107195450389.png


上面的例子就已经很好的讲解了这个过程.


讲解完上面属性的概念之后,这时候我们就来实际操作一下,分别给两台机器配置一下ES集群的配置.


这里我选择的是直接Clone我的另一台机器,大家可以选择直接配置两台虚拟机,也可以像我这样值配置一台虚拟机,另一台机器直接通过Clone这一台机器即可.


Clone的过程如下:


给虚拟机创建快照


20210107200759102.gif


通过快照来Clone虚拟机


20210107205925947.gif

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
数据可视化 Java Windows
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
本文介绍了如何在Windows环境下安装Elasticsearch(ES)、Elasticsearch Head可视化插件和Kibana,以及如何配置ES的跨域问题,确保Kibana能够连接到ES集群,并提供了安装过程中可能遇到的问题及其解决方案。
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
|
9天前
|
存储 监控 安全
Elasticsearch 集群
【11月更文挑战第3天】
86 54
|
5天前
|
监控 API 索引
Elasticsearch集群健康检查
【11月更文挑战第4天】
19 3
|
1月前
|
存储 缓存 监控
深入解析:Elasticsearch集群性能调优策略与最佳实践
【10月更文挑战第8天】Elasticsearch 是一个分布式的、基于 RESTful 风格的搜索和数据分析引擎,它能够快速地存储、搜索和分析大量数据。随着企业对实时数据处理需求的增长,Elasticsearch 被广泛应用于日志分析、全文搜索、安全信息和事件管理(SIEM)等领域。然而,为了确保 Elasticsearch 集群能够高效运行并满足业务需求,需要进行一系列的性能调优工作。
84 3
|
1月前
|
SQL 分布式计算 NoSQL
大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行
大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行
41 4
|
1月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
117 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
1月前
|
自然语言处理 搜索推荐 Java
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(一)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图
50 0
|
1月前
|
存储 自然语言处理 搜索推荐
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
34 0
|
9天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
24 5
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo