ElasticSearch 集群管理

ElasticSearch 集群管理

在这里插入图片描述
在这里插入图片描述

集群介绍

集群:多个人做一样的事
分布式:多个人做不一样的事

为什么要集群,原来的项目都是单体架构,一旦机器挂了,那就不能进行工作了。若是我们用了三台机器,都存储一样的东西,这三个同时对外提供服务,一旦有一个挂了还不影响,这就是集群来解决高可用。集群还可以解决负载均衡的问题。

集群总结下:集群解决的问题就是:1、让系统高可用。2、分担请求压力。

但是以后业务数据越来越多,每个机器已经无法存储了,那怎么办?
不能是买个更好的机器吧,那也太土豪了吧,那我们就用很多个机器来存储数据,那么就变成了集群分布式架构。集群分布式架构就是原来每个机器都存一样的数据,现在A、B两台机器合在一起存一整个ES数据,C、D一起存一整个ES数据。
分布式解决的问题:1、分担存储和计算的压力,提速。2、解耦。

在这里插入图片描述

ElasticSearch 集群特点

1、ElasticSearch天然支持分布式,不用引用第三方的插件、组件。
2、ElasticSearch的设计隐藏了分布式本身的复杂性。ES把分布式设计的复杂性隐藏了,让用户少量的配置就可以完成分布式的搭建。你就搭建好集群就行,内部ES如何操作我们不用担心。

ElasticSearch集群分布式架构相关概念

1、 集群(cluster):一组拥有共同的cluster name的节点,节点就是ES的一个实例。
在这里插入图片描述
2、 节点(node):集群中的一个ElasticSearch实例。
3、 索引(index):es存储数据的地方,相当于关系数据库中的database概念。
4、 分片(shard):索引可以被拆分为不同的部分进行存储,成为分片。在集群环境下,一个索引的不同分片可以拆分到不同的节点中。

在这里插入图片描述
一个索引被分片成了 0、1、2,分别存在了三个节点中。他们就是拥有共同名称的节点,作为一个集群。但是不能遇到故障,万一ES-node-1挂掉了,那就完蛋了。接下来引入下面的概念。
5、 主分片(Primary shard):相对于副本分片的定义。
6、 副本分片(Replica shard):每个主分片可以有一个或多个副本,数据和主分片一样。
但是每个节点都是自己的主分片和副本分片,机器一旦挂了还是完蛋了,那就让副本分片存在其他节点中。不要把鸡蛋放在一个篮子里,以上说的是实现过程,ES都帮我们处理了,不需要我们操心了。

在这里插入图片描述

搭建集群

前提:ES可是个吃货,配置一定要调高。 建议2核2G。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Linux操作如下:
在这里插入图片描述
在这里插入图片描述
Linux操作如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
node.master: true,nide.data: true 这两个都有true就是证明他都有竞争主节点的资格。

Linux操作如下:
若之前配置过单节点,那就把原来的删除掉。

在这里插入图片描述
配置第二台
在这里插入图片描述
Linux操作如下:
在这里插入图片描述
配置第三台:
在这里插入图片描述
Linux操作如下:
在这里插入图片描述
最后对日志文件进行授权
在这里插入图片描述
启动前要配置JVM的内存大小,不然就会报下方的错误。建议将三台的配置都改了,不然3G弄满了。
在这里插入图片描述
修改为256M
在这里插入图片描述
Linux操作如下:
在这里插入图片描述
启动三个服务 ./elasticsearch 一定不要用root权限启动。
在这里插入图片描述
访问下,访问不到就是防火墙的事了,那就切回root权限,关闭防火墙即可。命令:systemctl stop firewalld
在这里插入图片描述
这时候我们访问集群,在路径后面加 /_cat/health?v,这个时候应该是不成功的
在这里插入图片描述
报了主节点没发现的异常。
这时我们启动第二台的elasticsearch,再次访问

在这里插入图片描述
若在启动第三台,他就不会选举了,一号还是主节点。
在这里插入图片描述
在这里插入图片描述

使用Kibana配置和管理集群

Kibana配置就是把ES集群的地址配置到Kibana上。
在这里插入图片描述
Linux操作如下:
在这里插入图片描述
在这里插入图片描述

然后去bin目录,启动
在这里插入图片描述
在这里插入图片描述
打开浏览器访问下
在这里插入图片描述
点击stack monitoring
在这里插入图片描述
刚开始是关着的,给他打开
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击node
在这里插入图片描述

JAVAAPI访问集群

创建个索引
在这里插入图片描述
添加数据
在这里插入图片描述
创建实体,里面有三个ES的host、port。并创建get、set、toString方法。
在这里插入图片描述
application.yml
在这里插入图片描述
配置Client
在这里插入图片描述
通过集群的方式访问ES
在这里插入图片描述
以上代码跟之前学习的没有区别,集群就是把多台机器配置即可,那数据存到哪里了?分片呢?我们往下接着学习

集群原理

分片配置

在创建索引时,如果不设置指定的分片配置,默认主分片为1片,副本分片为1片。
在这里插入图片描述
之前我们创建的索引,在主节点上有数据,子节点也有数据,下图可以看到,主分片在2节点上,副本分片在主节点上。
在这里插入图片描述
那如何设置分片呢?
在这里插入图片描述
在这里插入图片描述
生成完一共6个节点,每个节点存的都不一样,任何一个挂了都不影响其他,这就是ES帮我们处理的。
在这里插入图片描述
现在模拟把第三台服务器挂掉
在这里插入图片描述
我们再查询下数据,也是可以访问的
在这里插入图片描述
回到kibana,3号已经挂掉了。
在这里插入图片描述
在这里插入图片描述
我们刷下页面,ES他会重新分配分片。
在这里插入图片描述
他又重新分配了,这就是节点的自平衡。不得不说这操作太嚣张了!!!!!
若你再把3号启动了,他又给你处理了,嚣张,嚣张。
知识点:分片与自平衡:当节点挂掉后,挂掉的节点分片会自平衡到其他节点中。

在ElasticSearch中,每个查询在每个分片的单个线程中执行,但是,可以并行处理多个分片。分片数量一旦确定好,不能修改。
那问题又来了,设置多少个分片合适呢?
索引分片推荐配置方案:
1、 每个分片推荐大小10G~30G之间
2、 分片数量推荐 = 节点数量 * 1~3倍 比如你3个节点,推荐分片就是3~9个
思考:比如有1000GB的数据,应该有多少个分片?多少个节点?
40个分片 20个节点 1000除以 25G等于40 40除以2等于20节点

路由原理

文档存入对应的分片,ES计算分片编号的过程,成为路由。
那么ES怎么知道一个文档应该存入哪个分片呢?
查询时,根据文档id查询文档,ES又该去哪个分片中查询数据呢?

在这里插入图片描述
由于5号文档在2号节点上,他的副本分片就对应在1号节点上。
在这里插入图片描述
假如我们在查id为5的文档,但是我们算完在2节点上,但是2节点挂了,那么他就会去1节点上找数据。
在这里插入图片描述

脑裂

在这里插入图片描述
在这里插入图片描述
我们见下图,8个节点本来1号是主节点,后来3、4、7、8不认1号为主节点,让3号为主节点,这样出现两个集群这就是脑裂。
在这里插入图片描述
那如何解决呢?
把服务器停掉,在修复好,再启动。这个问题既然没有好的办法去解决,那就规避脑裂出现的可能。

那什么情况下可能出现脑裂呢?
第一种:网络原因

在这里插入图片描述
在外网上每个节点相互通信有延迟,3号访问1,1没给响应,4,7,8也发现1没响应,他们以为1挂了,那就揭竿而起了,3当了主节点
第二种:节点负载
主节点要处理数据,他工作量太大了,假死了。3,4,7,8又访问不了他了,就又揭竿而起了。

在这里插入图片描述
第三种:JVM内存回收
在这里插入图片描述
总结:
在这里插入图片描述
那如何避免呢?
在这里插入图片描述

集群扩容

集群停了,重新搭建即可,原来3个的配置文件,改为配置4个、5个等,即可。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch是一种开源的分布式搜索和分析引擎,它可以用于快速搜索、分析和存储大量的数据。Elasticsearch集群是由多个节点组成的,每个节点都可以存储和处理数据。以下是关于Elasticsearch集群的一些介绍和演示: 1. 集群原理: Elasticsearch内置了一个名为ZenDiscovery的模块,用于节点发现和选主等功能。这意味着在启动Elasticsearch节点时,它们会自动加入集群,并通过选举机制选择一个主节点来协调集群操作。这使得构建和管理Elasticsearch集群变得非常简单,不需要额外的配置和第三方组件。 2. 单节点演示: 单节点是最简单的Elasticsearch集群配置,它只包含一个节点。以下是一个示例演示如何启动一个单节点的Elasticsearch集群: ```shell # 启动Elasticsearch节点 ./bin/elasticsearch ``` 在启动节点后,您可以使用Elasticsearch的REST API进行索引、搜索和其他操作。 3. 多节点演示: 多节点是更常见的Elasticsearch集群配置,它包含多个节点,可以提供更高的可用性和性能。以下是一个示例演示如何启动一个多节点的Elasticsearch集群: ```shell # 启动第一个节点 ./bin/elasticsearch # 启动其他节点,并指定第一个节点的地址 ./bin/elasticsearch -Ecluster.initial_master_nodes=node1 ``` 在启动所有节点后,它们会自动加入集群,并通过选举机制选择一个主节点来协调集群操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值