首页 > 其他分享 >elasticsearch高可用 原理

elasticsearch高可用 原理

时间:2023-02-06 13:57:45浏览次数:38  
标签:可用 默认 集群 elasticsearch master 原理 节点 es

elasticsearch高可用 原理 

ES是如何解决高可用

ES是一个分布式全文检索框架,隐藏了复杂的处理机制,核心数据分片机制、集群发现、分片负载均衡请求路由。

ES的高可用架构

IMG_256

ES基本概念名词

Cluster

代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。

es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

Shards

代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。

[分片的数量只能在索引创建前指定,并且索引创建后不能更改。]

分片数由index.number_of_shards在索引创建的时候指定,如果需要修改主分片数,需要重建索引:
1 按照需要创建一个新的索引;
2 reindex把索引现有的数据同步到新索引中;
3 别名绑定新创建的索引上;

规避主分片不能修改的问题的方法,官方的说明:

我们当前的选择只有一个就是将数据重新索引至一个拥有更多分片的一个更大的索引,但这样做将消耗的时间是我们无法提供的。

[通过事先规划,我们可以使用 预分配 的方式来完全避免这个问题。]

replicas

代表索引副本,es可以设置多个索引的副本。

副本的作用:

1.是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。

2.是提高es的查询效率,es会自动对搜索请求进行负载均衡。

Recovery

代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配;

挂掉的节点重新启动时也会进行数据恢复。

ES集群中的五大角色

在Elasticsearch中,有五大角色,主要如下:

Master Node:主节点

主节点,该节点不和应用创建连接,每个节点都保存了集群状态.

master节点控制整个集群的元数据。

只有Master Node节点可以修改节点状态信息及元数据(metadata)的处理,比如索引的新增、删除、分片路由分配、所有索引和相关 Mapping 、Setting 配置等等。

Master eligible nodes:合格主节点

合格节点,每个节点部署后不修改配置信息,默认就是一个 eligible 节点.

有资格成为Master节点但暂时并不是Master的节点被称为 eligible 节点,该节点可以参加选主流程,成为Mastere节点.

该节点只是与集群保持心跳,判断Master是否存活,如果Master故障则参加新一轮的Master选举。

Data Node:数据节点

数据节点,改节点用于建立文档索引, 接收 应用创建连接、接收索引请求,接收用户的搜索请求

data节点真正存储数据,ES集群的性能取决于该节点的个数(每个节点最优配置的情况下),

data节点的分片执行查询语句获得查询结果后将结果反馈给Coordinating节点,在查询的过程中非常消耗硬件资源,如果在分片配置及优化没做好的情况下,进行一次查询非常缓慢(硬件配置也要跟上数据量)。

Coordinating Node:协调节点(/路由节点/client节点)

协调节点,该节点专用与接收应用的查询连接、接受搜索请求,但其本身不负责存储数据。

协调节点的职责:

接受客户端搜索请求后将请求转发到与查询条件相关的多个data节点的分片上,然后多个data节点的分片执行查询语句或者查询结果再返回给协调节点,协调节点把各个data节点的返回结果进行整合、排序等一系列操作后再将最终结果返回给用户请求。

搜索请求在两个阶段中执行(query 和 fetch),这两个阶段由接收客户端请求的节点 - 协调节点协调。

1.在请求query 阶段,协调节点将请求转发到保存数据的数据节点。 每个数据节点在本地执行请求并将其结果返回给协调节点。

2.在收集fetch阶段,协调节点将每个数据节点的结果汇集为单个全局结果集。

Ingest Node:ingest节点

ingest 节点可以看作是数据前置处理转换的节点,支持 pipeline管道 设置,可以使用 ingest 对数据进行过滤、转换等操作,类似于 logstash 中 filter 的作用,功能相当强大。

Ingest节点处理时机——在数据被索引之前,通过预定义好的处理管道对数据进行预处理。默认情况下,所有节点都启用Ingest,因此任何节点都可以处理Ingest任务。

elasticsearch.yml详细配置

cluster.name: elasticsearch

# 配置的集群名称,默认是elasticsearch,es服务会通过广播方式自动连接在同一网段下的es服务,通过多播方式进行通信,同一网段下可以有多个集群,通过集群名称这个属性来区分不同的集群。

 

node.name: "Franz Kafka"

# 当前配置所在机器的节点名,你不设置就默认随机指定一个name列表中名字,该name列表在es的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。

 

node.master: true

指定该节点是否有资格被选举成为node(注意这里只是设置成有资格, 不代表该node一定就是master),默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。

 

node.data: true

# 指定该节点是否存储索引数据,默认为true。

 

index.number_of_shards: 5

# 设置默认索引分片个数,默认为5片。

 

index.number_of_replicas: 1

# 设置默认索引副本个数,默认为1个副本。如果采用默认设置,而你集群只配置了一台机器,那么集群的健康度为yellow,也就是所有的数据都是可用的,但是某些复制没有被分配

# (健康度可用 curl 'localhost:9200/_cat/health?v' 查看, 分为绿色、黄色或红色。绿色代表一切正常,集群功能齐全,黄色意味着所有的数据都是可用的,但是某些复制没有被分配,红色则代表因为某些原因,某些数据不可用)。

 

path.conf: /path/to/conf

# 设置配置文件的存储路径,默认是es根目录下的config文件夹。

 

path.data: /path/to/data

# 设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例:

# path.data: /path/to/data1,/path/to/data2

 

path.work: /path/to/work

# 设置临时文件的存储路径,默认是es根目录下的work文件夹。

 

path.logs: /path/to/logs

# 设置日志文件的存储路径,默认是es根目录下的logs文件夹

 

path.plugins: /path/to/plugins

# 设置插件的存放路径,默认是es根目录下的plugins文件夹, 插件在es里面普遍使用,用来增强原系统核心功能。

 

bootstrap.mlockall: true

# 设置为true来锁住内存不进行swapping。因为当jvm开始swapping时es的效率 会降低,所以要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。 同时也要允许elasticsearch的进程可以锁住内# # 存,linux下启动es之前可以通过`ulimit -l unlimited`命令设置。

 

network.bind_host: 192.168.0.1

# 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,绑定这台机器的任何一个ip。

 

network.publish_host: 192.168.0.1

# 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。

 

network.host: 192.168.0.1

# 这个参数是用来同时设置bind_host和publish_host上面两个参数。

 

transport.tcp.port: 9300

# 设置节点之间交互的tcp端口,默认是9300。

 

transport.tcp.compress: true

# 设置是否压缩tcp传输时的数据,默认为false,不压缩。

 

http.port: 9200

# 设置对外服务的http端口,默认为9200。

 

http.max_content_length: 100mb

# 设置内容的最大容量,默认100mb

 

http.enabled: false

# 是否使用http协议对外提供服务,默认为true,开启。

 

gateway.type: local

# gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,hadoop的HDFS,和amazon的s3服务器等。

 

gateway.recover_after_nodes: 1

# 设置集群中N个节点启动时进行数据恢复,默认为1。

 

gateway.recover_after_time: 5m

# 设置初始化数据恢复进程的超时时间,默认是5分钟。

 

gateway.expected_nodes: 2

# 设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。

 

cluster.routing.allocation.node_initial_primaries_recoveries: 4

# 初始化数据恢复时,并发恢复线程的个数,默认为4。

 

cluster.routing.allocation.node_concurrent_recoveries: 2

# 添加删除节点或负载均衡时并发恢复线程的个数,默认为4。

 

indices.recovery.max_size_per_sec: 0

# 设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制。

 

indices.recovery.concurrent_streams: 5

# 设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。

 

discovery.zen.minimum_master_nodes: 1

# 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)

 

discovery.zen.ping.timeout: 3s

# 设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。

 

discovery.zen.ping.multicast.enabled: false

# 设置是否打开多播发现节点,默认是true。

 

discovery.zen.ping.unicast.hosts: ["host1", "host2:port", "host3[portX-portY]"]

# 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。\

elasticsearch7版本引入的新集群协调子系统

新增两个如下配置项

discovery.seed_hosts

cluster.initial_master_node

官方文档例子

discovery.seed_hosts:

- 192.168.1.10:9300

- 192.168.1.11

- seeds.mydomain.com

cluster.initial_master_nodes:

- master-node-a

- master-node-b

- master-node-c

伪分布式集群搭建

采用yml+docker-compose完成伪分布式集群的搭建。真分布式集群安装仅需稍作修改

在宿主机上【宿主机】修改/etc/sysctl.conf 添加vm.max_map_count=262144。启动sysctl -p

master elasticsearch.yml

cluster.name: docker-cluster

 

node.name: master

node.master: true

node.data: true

network.host: 0.0.0.0

network.publish_host: 192.168.31.45 # 这里是我内网ip

cluster.initial_master_nodes:

- master

 

http.cors.enabled: true

http.cors.allow-origin: "*"

master docker-compose.yml

version: '3.7'

services:

es:

image: docker.elastic.co/elasticsearch/elasticsearch:7.1.1

container_name: master

environment:

- "ES_JAVA_OPTS=-Xms512m -Xmx512m"

volumes:

- esdata:/usr/share/elasticsearch/data

- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

ports:

- 9200:9200

- 9300:9300

 

volumes:

esdata:

slave elasticsearch.yml

cluster.name: docker-cluster

 

node.name: slave

node.master: false

node.data: true

network.host: 0.0.0.0

network.publish_host: 192.168.31.45

http.port: 9201

transport.tcp.port: 9301

discovery.seed_hosts:

- 192.168.31.45:9300

 

http.cors.enabled: true

http.cors.allow-origin: "*"

slave docker-compose.yml

version: '3.7'

services:

es:

image: docker.elastic.co/elasticsearch/elasticsearch:7.1.1

container_name: slave

environment:

- "ES_JAVA_OPTS=-Xms512m -Xmx512m"

volumes:

- esdata2:/usr/share/elasticsearch/data

- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

ports:

- 9201:9201

- 9301:9301

 

volumes:

esdata2:

运行elasticsearch-head

for Elasticsearch 5.x: docker run -p 9100:9100 mobz/elasticsearch-head:5

for Elasticsearch 2.x: docker run -p 9100:9100 mobz/elasticsearch-head:2

for Elasticsearch 1.x: docker run -p 9100:9100 mobz/elasticsearch-head:1

for fans of alpine there is mobz/elasticsearch-head:5-alpine

 

open http://localhost:9100/

标签:可用,默认,集群,elasticsearch,master,原理,节点,es
From: https://www.cnblogs.com/jiangjiangstudy/p/17095192.html

相关文章

  • 3.9.1Cache的基本概念和原理
    @目录一、引子二、工作原理三、局部性原理(1)空间局部性(2)时间局部性(3)总结四、性能分析(1)方案一(2)方案二(3)考题五、块(1)主存(2)Cache(3)补充说明1.术语2.有待解决的问题六、回顾一、......
  • AOP实现原理
    ......
  • TDSQL(MySQL)架构原理总结
    TDSQL(MySQL)架构原理总结一、思维导图![TDSQL架构原理总结](E:\教案笔记作业\自我总结笔记\typora\第三阶段\图片\TDSQL架构原理总结.png)二、核心架构1、架构概述TDSQL......
  • 调试基础知识及原理
    一个可调试的可执行文件。我个人觉得里面的内容可以分为3个部分。1,机器码。C/C++转成的机器码2,符号表信息(symbols)3,调试信息(debuginfo)无论是Linux的GDB,还是Windows的W......
  • 【算法】插入排序算法原理及实现
    1.什么是插入排序每一步将一个待排序的数据插入到前面已经排序好的有序序列里,直到插完所有的元素为止。插入排序与打扑克牌很类似,你摸到第一张牌的时候是不需要排序的,后续摸......
  • 搞懂设计模式——代理模式 + 原理分析
    作者:京东零售秦浩然引子举个栗子,众所周知,我们是可以在京东上购买机票的。但机票是航司提供的,我们本质上是代理销售而已。那为什么航司要让我们代理销售呢?我们又是如......
  • elasticsearch高可用 原理
    elasticsearch高可用原理 ES是如何解决高可用ES是一个分布式全文检索框架,隐藏了复杂的处理机制,核心数据分片机制、集群发现、分片负载均衡请求路由。ES的高可用架构......
  • BP神经网络的数学原理及其算法实现
    什么是BP网络BP网络的数学原理BP网络算法实现 转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/44514073 上一篇文章介绍了KNN分类器,当......
  • numpy.ndarray原理与计算
    numpy.ndarray原理与计算Numpy的ndarray什么是Numpy的ndarray首先,Numpy的核心是ndarray。然后,ndarray本质是数组,其不同于一般的数组,或者Python的list的地方......
  • 虚函数(涉及汇编原理)
    虚函数1.多态​ 对象的多态性需要通过虚表和虚表指针来完成2.虚表指针1)位置​ 定义在对象首地址的前4字节处(32位)或前8个字节(64位)处2)定义​ 一个二维指针,一个存储......