12.Elasticsearch应用(十二)

Elasticsearch应用(十二)

1.单机ES面临的问题

  1. 海量数据存储问题
  2. 单点故障问题

2.ES集群如何解决上面的问题

  1. 海量数据存储解决问题: 将索引库从逻辑上拆分为N个分片(Shard),存储到多个节点
  2. 单点故障问题: 将分片数据在不同节点备份(Replica)

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

3.核心概念

集群(Cluster)

包含一个或多个启动着的ES实例的机器群。通常一台机器起一个ES实例。同一网络下,集群名一样的多个ES实例自动组成集群,自动均衡分片等行为。默认集群名为“elasticsearch”

集群名通过配置文件修改,或者在命令行中 -E cluster.name=es-cluster进行设定

集群状态(Cluster State)

介绍

维护了一个集群中,必要的信息,包括:所有的节点信息,所有的索引和其相关的Mapping与Setting信息,分片的路由信息

状态
  • Green: 主分片与副本都正常分配
  • Yellow: 主分片全部正常分配,有副本分片未能正常分配
  • Red: 有主分片未能分配。例如,当服务器的磁盘容量超过85%时,去创建了一个新的索引
集群状态Master节点

Master节点负责维护并且更新Cluster State

CAT API查看集群信息
GET /_cat/nodes?v #查看节点信息
 GET /_cat/health?v #查看集群当前状态:红、黄、绿
 GET /_cat/shards?v #查看各shard的详细情况
 GET /_cat/shards/{index}?v #查看指定分片的详细情况
 GET /_cat/master?v #查看master节点信息
 GET /_cat/indices?v #查看集群中所有index的详细信息
  GET /_cat/indices/{index}?v #查看集群中指定index的详细信息

节点(Node)

介绍

每个ES实例称为一个节点。节点名自动分配,也可以手动配置

节点名称配置方式

节点名称通过配置文件配置,或者启动时候 -E node.name=node1指定

UID存储目录

每一个节点在启动之后,会分配一个UID,保存在data目录下

常见的Node类型以及介绍

总览

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

Master-eligible nodes(合格节点)
  • 每个节点启动后,默认就是一个Master-eligible节点
  • 可以设置node.master: false禁用
  • Master-eligible节点可以参加选举主节点流程,成为Master节点
  • 当第一个节点启动时候,它会将自己选举成Master节点
Master Node(主节点)
  • 当第一个节点启动的时候,它会将自己选举成Master节点
  • 每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息
  • 负责:负责索引的创建与删除,决定分片被分配到哪个数据节点,维护并且更新Cluster State
  • 最佳实践:Master节点非常重要要考虑解决单点的问题,为一个集群设置多个Master节点每个节点只承担Master的单一角色
Data Node(数据节点)
  • 可以保存数据的节点
  • ES实例默认就是数据节点,可以通过node.data: false来改变
  • 负责保存分片数据
Coordinating Node(协调节点)
  • 负责接受Client的请求,将请求分发到合适的节点上,最终把结果汇集到一起返回
  • 每个节点默认都是协调节点
Ingest Node

数据前置处理转换节点,支持pipeline管道设置,可以使用ingest对数据进行过滤、转换等操作

Hot&Warm Node(冷热节点)

不同硬件配置的Data Node,用来实现Hot&Warm架构,降低集群部署的成本

Machine Learning Node(机器学习节点)
  • 负责跑机器学习的Job,用来做异常检测
Tribe Node(部落节点|家族节点)
  • 5.3之后开始使用Cross Cluster Search
  • Tribe Node可以连接到不同的ES集群,并且支持将这些集群当做一个单独的集群处理

分片(Primary Shard & Replica Shard)

介绍

Index数据过大时,将Index里面的数据,分为多个Shard,分布式的存储在各个服务器上面。可以支持海量数据和高并发,提升性能和吞吐量,充分利用多台机器的CPU

主分片
  • 能正常提供查询和插入的分片我们叫做主分片(Primary Shard)
  • 用以解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之上
  • 一个分片是一个运行的Lucene的实例
  • 主分片数在索引创建时指定,后续不允许修改,除非Reindex
副本分片
  • 用以解决数据高可用的问题。 副本分片是主分片的拷贝
  • 副本分片数,可以动态调整
  • 增加副本数,还可以在一定程度上提高服务的可用性(读取的吞吐)
指定索引的主分片和副本分片数
PUT /blogs
{
	settings": {
		"number_of_shards": 3,
		"number_of_replicas": 1
	}
}
分片的数量设置
  • 分片数设置过小:
    • 导致后续无法增加节点实现水平扩展
    • 单个分片的数据量太大,导致数据重新分配耗时
  • 分片数设置过大,7.0 开始,默认主分片设置成1,解决了over-sharding(分片过度)的问题
    • 影响搜索结果的相关性打分,影响统计结果的准确性
    • 单个节点上过多的分片,会导致资源浪费,同时也会影响性能

4.选主过程

  • 互相Ping对方,Node ld低的会成为被选举的节点
  • 其他节点会加入集群,但是不承担Master节点的角色。一旦发现被选中的主节点丢失,就会选举出新的Master节点

5.ES集群的完全体

在这里插入图片描述

6.ES集群的脑裂问题

默认情况下,每个节点都是master eligible节点,因此一旦master节点宕机,其它候选节点会选举一个成为主节点。当主节点与其他节点网络故障时,可能发生脑裂问题

为了避免脑裂,需要要求选票超过(eligible节点数量+1 )/2才能当选为主,因此eligible节点数量最好是奇数。对应配置项是discovery.zen.minimum_master_nodes,在es7.0以后,已经成为默认配置,因此一般不会发生脑裂问题

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

7.ES集群原理

路由原理

当新增文档时,应该保存到不同分片,保证数据均衡,那么coordinating node如何确定数据该存储到哪个分片呢?Elasticsearch会通过hash算法来计算文档应该存储到哪个分片:

# 1._routing默认是文档id
# 2.算法与分片数量有关,因此索引库一旦创建,分片数量不能修改
shard = hash(_routing) % number_of_shards

新增文档原理

在这里插入图片描述

分布式查询原理

新增文档是根据ID来的,如果查询不是通过ID就叫分布式查询
在这里插入图片描述

集群故障转移

集群的Master节点会监控集群中的节点状态,如果发现有节点宕机,会立即将宕机节点的分片数据迁移到其它节点,确保数据安全,这个叫做故障转移
在这里插入图片描述

8.节点发现流程详解

介绍

  1. 发现是集群形成模块查找与之形成集群的其他节点的过程
  2. 发现是主机未知的情况下(例如,节点刚启动时或先前的主机发生故障时),节点之间互相查找的过程
  3. 节点之间的通信是使用传输层(transport)完成的

发现的流程

  1. 从seed hosts providers获取种子地址列表,以及最后一个已知群集中任何符合主机资格的节点的地址开始
  2. 每个节点通过连接到每个地址来检测并尝试识别连接到的节点,并验证他是否具有主机资格
  3. 如果验证成功,它将与远程节点共享其所有已知的符合主机资格的对等方的列表。并且远程节点将依次与其对等方进行响应。然后,该节点将探查刚刚发现的所有新节点,请求其对等节点,依此类推
  4. 如果该节点不符合主节点资格,则它将继续此发现过程,直到发现了当选的主节点为止。如果未发现任何当选的主节点,则该节点将重试,之后discovery.find_peers_interval默认为1s
  5. 如果该节点是符合资格的主机,则它将继续此发现过程,直到它发现了一个选定的主节点,或者它已经找到了足够的无主机资格的节点来完成选举。如果这些操作都没有足够快地发生,则该节点将重试,之后 discovery.find_peers_interval默认为1s

发现流程总结

  1. 获取种子地址列表
  2. 连接节点并验证
  3. 如果验证成功则共享地址,并交叉请求节点
  4. 如果验证失败则继续
  5. 直到找到主节点或找到了足够的具有主机资格的节点来完成选举

Seed hosts providers(提供种子节点列表)

  1. 默认情况下,有两种方式来提供种子节点列表
  2. 基于设置的和基于文件的

基于设置的

  1. 这些地址可以指定为主机名或IP地址
  2. 主机列表是使用discovery.seed_hosts 静态设置设置的
  3. 如果未指定transport.profiles.default.port,transport.port则使用默认端口
  4. 如果主机名解析为多个IP地址,Elasticsearch将尝试连接到每个解析的地址
discovery.seed_hosts:
   - 192.168.1.10:9300
   - 192.168.1.11 
   - seeds.mydomain.com 

基于文件的

  1. 是通过外部文件配置主机列表
  2. 当文件更改时,Elasticsearch会重新加载该文件
discovery.seed_providers: file

具体使用

  1. 在ES的config目录下创建unicast_hosts.txt
  2. unicast_hosts.txt每一行包含一个节点地址
  3. 每个节点地址均由主机名或IP地址和可选的port组成
  4. 如果未指定端口号,Elasticsearch将隐式使用transport.profiles.default.port或transport.port,所给定的端口范围内的第一个端口
  5. IPv6地址必须在端口的方括号中,如果需要,应在方括号之后
  6. 您也可以在此文件中添加注释。所有注释都必须以其开头出现#在行上(即注释不能在行中间开始)
10.10.10.5
10.10.10.6:9305
10.10.10.5:10005
# an IPv6 address
[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:9301

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/353316.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【UE5】如何给人物骨骼绑定Control Rig用来制作动画(控制)

本篇文章暂时只教绑定人物手部的Control Rig,脚的Control Rig举一反三即可 1,右键-创建-控制绑定 2在控制绑定中-右键创建基本IK 3,填入上臂-下臂-手 4【手和下臂】右键-新建-Add Controls For Selected,(或者新建-…

关系三元组抽取方案

一、流程概览 先用序列标注模型预测句子中的实体,再对实体(加上句子)走关系分类模型,预测实体的关系,最后形成有效的三元组。 1、数据标注 2、数据处理 处理原始数据得到ner命名实体识别的训练预测数据和关系抽取训…

激光雷达标定入门(9)ROS驱动velodyne

这里根据雷达的ros驱动来,这里以velodyne为例。 地址:mirrors / ros-drivers / velodyne GitCode # clone到src git clone .......... # back ws catkin_make # donot forget source devel/setup.bash报错:fatal error: pcap.h: No such f…

ensp winpcap无法安装

安装ensp的依赖软件winpcap无法安装 发现提示已有最新版本、找网上都是修改文件后缀名,测试后发现根本不行,有点扯 npcap是wireshark安装带的,通过卸载wireshark安装 ensp安装顺序应该先安装winpcap->wireshark->virtualbox->ens…

浪花 - 后端接口完善

一、队伍已加入用户数量 1. 封装的响应对象 UserTeamVO 新增字段 hasJoinNum 2. 查询队伍 id 列表 3. 分组过滤,将 team_id 相同的 userTeam 分到同一组 4. 获取每一组的 userTeam 数量,即一个 team_id 对应几个userTeam(用户数量&#x…

数据结构与算法教程,数据结构C语言版教程!(第六部分、数据结构树,树存储结构详解)三

第六部分、数据结构树,树存储结构详解 数据结构的树存储结构,常用于存储逻辑关系为 "一对多" 的数据。 树存储结构中,最常用的还是二叉树,本章就二叉树的存储结构、二叉树的前序、中序、后序以及层次遍历、线索二叉树、…

APUE学习之管道(pipe)与命名管道(fifo)

目录 一、简介 二、管道(Pipe) 1、管道的基本概念 2、管道的局限性 3、管道的创建 4、管道的读写规则 5、实战演练 三、命名管道(fifo) 1、命名管道的基本概念 2、命名管道的创建 3、实战演练 4、运行结果 四、补充 …

flyway使用配置参数和注意事项介绍

文章目录 业务场景参数介绍initSqlsbaselineOnMigratebaselineVersiontargetvalidateOnMigrate SQL注意事项 业务场景 对于生产环境,随着项目版本迭代,数据库结构也会变动。如果一个项目在多个地方实施部署,且版本不一致,就需要一…

lqb日志08

一只小蒟蒻备考蓝桥杯的日志 文章目录 笔记坐标相遇判断工作调度问题(抽象时间轴绘制) 刷题心得小结 笔记 坐标相遇判断 我是小懒虫,碰了一下运气,开了个“恰当”的数(7000)如果,7000次还不能…

使用sdbg执行smali简单片段解混淆

https://github.com/CalebFenton/simplify/releases/download/v1.3.0/sdbg-0.1.0.jar "C:\Program Files\Java\jre-1.8\bin\java.exe" -jar sdbg-0.1.0.jar smali "Lu/ad;->c()V"其中smali为文件夹名称。 ###### Class p124u.C12414ad (u.ad) .class …

Modern C++ std::unique_ptr的实现原理

​ unique_ptr是一个非常简单的类,没有计数没有原子操作,非常类似纯指针。 它的类定义也非常简单: 它针对数组做了模板偏特化,因为它得支持数组操作比如Arr[i]。 unique_ptr的本质就是std::tuple, 里面第一项为指针指向管理对象,第二项为deleter:是一个函数指针或仿函数…

电脑屏幕色彩调整

显卡驱动 如果你的电脑是笔记本且没有独显直连,那你就不能在独显里面调屏幕色彩,就要去下载对应核显的驱动,然后去核显的驱动程序里面可以调节。比如:我的笔记本是华硕天选2,无独显直连,锐龙处理器&#x…

Nginx基础篇【一】

Nginx基础篇【一】 一、Nginx基础篇【一】1.1.背景介绍1.2.名词解释1.2.1. WEB服务器:1.2.2. HTTP:1.2.3. POP3/SMTP/IMAP:1.2.4. 反向代理1.2.5.常见服务器对比1.2.5.1.IIS1.2.5.2.Tomcat1.2.5.3.Apache1.2.5.4.Lighttpd1.2.5.5.其他的服务器 1.3.Nginx…

跟着cherno手搓游戏引擎【12】渲染context和首个三角形

渲染上下文&#xff1a; 目的&#xff1a;修改WindowsWindow的结构&#xff0c;把glad抽离出来 WindowsWindow.h:新建m_Context #pragma once #include "YOTO/Window.h" #include <YOTO/Renderer/GraphicsContext.h> #include<GLFW/glfw3.h> #include…

Ps:将文件载入堆栈

Ps菜单&#xff1a;文件/脚本/将文件载入堆栈 Scripts/Load Files into Stack 将文件载入堆栈 Load Files into Stack脚本命令可用于将两个及以上的文件载入到同一个 Photoshop 新文档中。 载入的每个文件都将成为独立的图层&#xff0c;并使用其原始文件名作为图层名。 Photos…

GraphicsMagick 的 OpenCL 开发记录(二十五)

文章目录 如何修复R6025 pure virtual function call问题 <2022-04-19 周二> 如何修复R6025 pure virtual function call问题 运气好&#xff0c;修复了这个问题。即&#xff0c;在ExitInstance()函数中调用一下MagickLib::DestroyMagick();即可。 过程中也经历了尝试…

CSS探索浏览器兼容性

学习如何探索浏览器的兼容性对于编写跨浏览器兼容的CSS代码非常重要。以下是一些学习CSS兼容性的方法&#xff1a; MDN文档&#xff1a;Mozilla开发者网络&#xff08;MDN&#xff09;提供了广泛而详细的CSS文档&#xff0c;其中包含有关CSS属性、选择器和功能的信息。在MDN上…

最新技术实战 | 无视杀软使用远控工具进行横向移动Tips

最新技术实战 | 无视杀软使用远控工具进行横向移动Tips。 杀软是什么意思&#xff1f;杀软是杀毒软件的简称&#xff0c;取的杀毒首字与软件首字组合而成&#xff0c;将杀毒软件简要的称之为杀软&#xff0c;所以&#xff0c;杀软的意思就是杀毒软件&#xff0c;专注于信息领域…

day34_js

今日内容 0 复习昨日 1 事件 1.1 事件介绍 1.2 事件绑定方式 1.3 不同事件的演示 2 DOM操作 2.1 概述 2.2 查找元素 2.3 元素内容的查找和设置 2.4 元素属性的查找和设置 2.5 元素CSS样式的查找和设置 2.6 创建元素 2.7 创建文本节点 2.8 追加元素 2.9 删除元素 3 案例练习 0 复…

基于springboot+vue的明星周边产品销售网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…