【ES专题】ElasticSearch集群架构剖析

目录

  • 前言
  • 阅读对象
  • 阅读导航
  • 前置知识
  • 笔记正文
    • 一、ES集群架构
      • 1.1 为什么要使用ES集群架构
      • 1.2 ES集群核心概念
        • 1.2.1 节点
          • 1.2.1.1 Master Node主节点的功能
          • 1.2.1.2 Data Node数据节点的功能
          • 1.2.1.3 Master Node主节点选举流程
      • 1.2.2 分片
      • 1.3 搭建三节点ES集群
        • 1.3.1 ES集群搭建步骤
        • 1.3.2 安装客户端
    • 二、生产环境最佳实践
      • 2.1 一个节点只承担一个角色的配置
      • 2.2 增加节点水平扩展场景
      • 2.3 异地多活架构
      • 2.4 Hot & Warm 架构
      • 2.5 如何对集群的容量进行规划
      • 2.6 如何设计和管理分片

前言

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

  1. 使用何种通信协议去同步数据,互相通信
  2. 采用何种策略同步数据(异步还是同步)
  3. 如何保证一致性,保证到什么程度(【最终一致性】 or【实时一致性 / 强一致性】)
  4. 使用何种算法去选举主次节点(感觉这个比较随意,通常为了快速恢复服务,选举流程是怎么快怎么来,但是不能出现【脑裂问题】)

阅读对象

有基本ES使用知识,需要使用集群架构

阅读导航

系列上一篇文章:《【ES专题】ElasticSearch搜索进阶》

前置知识

笔记正文

一、ES集群架构

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

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

  • 高可用性:分为两个点考虑
    • 服务高可用性:允许个别节点停止服务,个别节点停止服务不影响整体使用
    • 数据可用性:部分节点丢失,不会丢失数据(需要有备份策略)
  • 可扩展性:
    • 请求量提升/数据的不断增长(将数据分布到所有节点上)

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

  • 提高系统的可用性,部分节点停止服务,整个集群的服务不受影响
  • 存储的水平扩容

在这里插入图片描述

1.2 ES集群核心概念

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

  • 集群中有一个或者多个节点
  • 不同的集群通过不同的名字来区分,默认名字【elasticsearch】

注意:ES在实际生产环境中,还会部署多个集群一起工作

  • 通过配置文件修改,或者在命令行中 -E cluster.name=es-cluster进行设定
1.2.1 节点

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

  • 每一个节点都有名字,通过配置文件配置,或者启动时候 -E node.name=node1指定
  • 每一个节点在启动之后,会分配一个UID,保存在data目录下
  • 节点有多种类型,不同类型通常有不同的功能(其他中间件也会称之为:集群角色)。它们分别是:
    • Master Node:主节点,负责索引的删除创建
    • Master eligible nodes:【直译:符合条件的节点】。可以参与选举的合格节点
    • Data Node:数据节点,负责文档的写入、读取
    • Coordinating Node:协调节点
    • 其他节点

节点类型,可以通过如下配置参数禁用/启用
在这里插入图片描述

关于Master eligible nodes和Master Node

  • 每个节点启动后,默认就是一个Master eligible节点,即都可以参与集群选举,成为Master节点。可以通过node.mater=false禁止
  • 当第一个节点启动时候,它会将自己选举成Master节点
  • 每个节点上都保存了集群的状态,但是只有Master节点才能修改集群的状态信息。集群状态信息(Cluster State) 维护了一个集群中所有必要的信息。比如:
    • 所有节点信息
    • 所有的索引和其他相关的Mapping与Setting信息
    • 分片的路由信息

关于Data Node 和 Coordinating Node

  • Data Node:
    • 可以保存数据的节点,叫做Data Node,负责保存分片数据。在数据扩展上起到了至关重要的作用
    • 节点启动后,默认就是数据节点。可以设置node.data: false禁止
    • 由Master Node决定如何把分片分发到数据节点上
    • 通过增加数据节点可以解决数据水平扩展和解决数据单点问题
  • Coordinating Node:
    • 负责接受Client的请求, 将请求分发到合适的节点,最终把结果汇集到一起
    • 每个节点默认都起到了Coordinating Node的职责

其他节点类型

  • Hot & Warm Node:冷热节点。不同硬件配置 的Data Node,用来实现Hot & Warm架构,降低集群部署的成本
  • Ingest Node:数据前置处理转换节点,支持pipeline管道设置,可以使用ingest对数据进行过滤、转换等操作
  • Machine Learning Node:负责跑机器学习的Job,用来做异常检测
  • Tribe Node:Tribe Node连接到不同的Elasticsearch集群,并且支持将这些集群当成一个单独的集群处理

以下是一个多集群业务架构图:
在这里插入图片描述

1.2.1.1 Master Node主节点的功能

Master节点主要功能::

  1. 管理索引和分片的创建、删除和重新分配
  2. 监测节点的状态,并在需要时进行重分配
  3. 协调节点之间的数据复制和同步工作
  4. 处理集群级别操作,如创建或删除索引、添加或删除节点等
  5. 维护集群的状态
1.2.1.2 Data Node数据节点的功能

Data Node数据节点的功能:

  1. 存储和索引数据:Data Node 节点会将索引分片存储在本地磁盘上,并对查询请求进行响应
  2. 复制和同步数据:为了确保数据的可靠性和高可用性,ElasticSearch 会将每个原始分片的多个副本存储在不同的 Data Node 节点上,并定期将各节点上的数据进行同步
  3. 参与搜索和聚合操作:当客户端提交搜索请求时,Data Node 节点会使用本地缓存和分片数据完成搜索和聚合操作
  4. 执行数据维护操作:例如,清理过期数据和压缩分片等
1.2.1.3 Master Node主节点选举流程

ES的选举流程也很简单,如下:

  1. 通常集群启动时,第一个启动的节点会被选为主节点。当主节点挂了的时候,进行下一步
  2. 互相Ping对方,Node ld 低的会成为被选举的节点
  3. 其他节点会加入集群,但是不承担Master节点的角色。一旦发现被选中的主节点丢失,就会重新选举出新的Master节点

在我们的生产过程中,Master Node的最佳实践方案

  • Master节点非常重要,在部署上需要考虑解决单点的问题
  • 为一个集群设置多个Master节点,每个节点只承担Master 的单一角色

1.2.2 分片

分片是ES中一个比较重要的概念。ElasticSearch是一个分布式的搜索引擎,索引可以分成一份或多份,多份分布在不同节点的分片当中。ElasticSearch会自动管理分片,如果发现分片分布不均衡,就会自动迁移。

分片又有【主分片】、【副本分片】之分。它们的区别如下:

  • 主分片(Primary Shard)
    • 用以解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之上
    • 一个分片是一个运行的Lucene的实例
    • 主分片数在索引创建时指定,后续不允许修改,除非Reindex
  • 副本分片
    • 用以解决数据高可用的问题。 副本分片是主分片的拷贝(备份)
    • 副本分片数,可以动态调整
    • 增加副本数,还可以在一定程度上提高服务的可用性(读取的吞吐)
# 指定索引的主分片和副本分片数
PUT /csdn_blogs
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}

分片架构
在这里插入图片描述
如上图是某个集群的分片架构,它有如下特征:

  1. 集群中有3个节点
  2. 每个节点各有一个主副分片
  3. 主副分片之间交叉存储(node1的副本放在node3node2放在node1node3放在node2

使用【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的详细信息 `

1.3 搭建三节点ES集群

1.3.1 ES集群搭建步骤

下面是在Linux环境,centos7下面的集群搭建步骤:
1)系统环境准备
首先创建用户,因为es不允许root账号启动

adduser es
passwd es

安装版本:elasticsearch-7.17.3。接着切换到root用户,修改/etc/hosts:

vim  /etc/hosts
192.168.66.150 es-node1  
192.168.66.151 es-node2  
192.168.66.152 es-node3  

2)修改elasticsearch.yml
注意配置里面的注释,里面有一些细节。比如:

  1. 注意集群的名字,3个节点的集群名称必须一直
  2. 给每个节点指定名字,比如这里是node1/2/3
  3. 是否要开启外网访问,跟redis的配置差不多
# 指定集群名称3个节点必须一致
cluster.name: es-cluster
#指定节点名称,每个节点名字唯一
node.name: node-1
#是否有资格为master节点,默认为true
node.master: true
#是否为data节点,默认为true
node.data: true
# 绑定ip,开启远程访问,可以配置0.0.0.0
network.host: 0.0.0.0
#用于节点发现
discovery.seed_hosts: ["es-node1", "es-node2", "es-node3"]
#7.0新引入的配置项,初始仲裁,仅在整个集群首次启动时才需要初始仲裁。
#该选项配置为node.name的值,指定可以初始化集群节点的名称
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
#解决跨域问题
http.cors.enabled: true
http.cors.allow-origin: "*"

三个节点配置很简单,按照上面的模板,依次修改node.name就行了

3) 启动每个节点的ES服务

# 注意:如果运行过单节点模式,需要删除data目录, 否则会导致无法加入集群
rm -rf data
# 启动ES服务
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是Elasticsearch的图形管理工具,可以查看分片分配和执行常见的索引操作,功能集中管理alias和index template,十分快捷。此外,Cerebro还具有实时监控数据的功能。
  • Kibana:Kibana是一个强大的可视化工具,可以用于Elasticsearch数据的探索、分析和展示。它提供了丰富的图表类型,包括折线图、直方图、饼图等,可以方便地展示基于时间序列的数据。此外,Kibana还提供了日志管理、分析和展示的功能


使用场景:

  • Cerebro:Cerebro适合用于生产和测试环境的Elasticsearch集群管理,尤其适用于需要快速查看和执行索引操作的情况。由于Cerebro轻量且适用于实时监控,它可能更适用于较小的集群和实时监控的场景。
  • Kibana: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

下载安装之后,用以下命令启动即可:

cerebro-0.9.4/bin/cerebro

#后台启动
nohup bin/cerebro > cerebro.log &

访问:http://192.168.66.150:9000/
在这里插入图片描述
输入ES集群节点:http://192.168.66.150:9200,建立连接。然后会出现以下界面:
在这里插入图片描述
kibana安装
1)修改kibana配置

vim config/kibana.yml

server.port: 5601
server.host: "192.168.66.150" 
elasticsearch.hosts: ["http://192.168.66.150:9200","http://192.168.66.151:9200","http://192.168.66.152:9200"]  
i18n.locale: "zh-CN"   

2)运行Kibana

#后台启动
nohup  bin/kibana &

3)访问
访问http://192.168.66.150:5601/验证

二、生产环境最佳实践

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

我们在上面的介绍中知道,节点有多种不同的类型(角色),有:Master eligible / Data / Ingest / Coordinating /Machine Learning等。不过跟之前学习的各种集群架构不同的是,ES一个节点可承担多种角色
不过,在生产环境中尽量还是一个节点一种角色比较好,优点是:极致的高可用;缺点是:可能有点费钱
想要一个节点只承担一个角色,只需要修改如下配置:

#Master节点
node.master: true
node.ingest: false
node.data: false

#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

2.2 增加节点水平扩展场景

在实际生产中,我们可能会遇到需要水平扩展容量的场景,通常来说,以下是几个常见的场景:

  • 当磁盘容量无法满足需求时,可以增加数据节点
  • 磁盘读写压力大时,增加数据节点
  • 当系统中有大量的复杂查询及聚合时候,增加Coordinating节点,增加查询的性能

2.3 异地多活架构

下面是一个多集群架构。集群处在三个数据中心,数据三写,使用GTM分发读请求
在这里插入图片描述

全局流量管理(GTM)和负载均衡(SLB)的区别:
GTM 是通过DNS将域名解析到多个IP地址,不同用户访问不同的IP地址,来实现应用服务流量的分配。同时通过健康检查动态更新DNS解析IP列表,实现故障隔离以及故障切换。最终用户的访问直接连接服务的IP地址,并不通过GTM。
而 SLB 是通过代理用户访问请求的形式将用户访问请求实时分发到不同的服务器,最终用户的访问流量必须要经过SLB。 一般来说,相同Region使用SLB进行负载均衡,不同region的多个SLB地址时,则可以使用GTM进行负载均衡。

2.4 Hot & Warm 架构

热节点存放用户最关心的热数据;温节点或者冷节点存放用户不太关心或者关心优先级低的冷数据或者暖数据。
它的典型的应用场景如下:
在成本有限的前提下,让客户关注的实时数据和历史数据硬件隔离,最大化解决客户反应的响应时间慢的问题。业务场景描述:每日增量6TB日志数据,高峰时段写入及查询频率都较高,集群压力较大,查询ES时,常出现查询缓慢问题。

  • ES集群的索引写入及查询速度主要依赖于磁盘的IO速度,冷热数据分离的关键为使用SSD磁盘存储热数据,提升查询效率。
  • 若全部使用SSD,成本过高,且存放冷数据较为浪费,因而使用普通SATA磁盘与SSD磁盘混搭,可做到资源充分利用,性能大幅提升的目标。

ES为什么要设计Hot & Warm 架构呢?

  • ES数据通常不会有 Update操作;
  • 适用于Time based索引数据,同时数据量比较大的场景。
  • 引入 Warm节点,低配置大容量的机器存放老数据,以降低部署成本

两类数据节点,不同的硬件配置:

  • Hot节点(通常使用SSD)︰索引不断有新文档写入。
  • Warm 节点(通常使用HDD)︰索引不存在新数据的写入,同时也不存在大量的数据查询

Hot Nodes:用于数据的写入

  • lndexing 对 CPU和IO都有很高的要求,所以需要使用高配置的机器
  • 存储的性能要好,建议使用SSD
    在这里插入图片描述

Warm Nodes
用于保存只读的索引,比较旧的数据。通常使用大容量的磁盘
在这里插入图片描述

配置Hot & Warm 架构
使用Shard Filtering实现Hot&Warm node间的数据迁移

  • node.attr来指定node属性:hot或是warm。
  • 在index的settings里通过index.routing.allocation来指定索引(index)到一个满足要求的node
    在这里插入图片描述
    使用 Shard Filtering,步骤分为以下几步:
  • 标记节点(Tagging)
  • 配置索引到Hot Node
  • 配置索引到 Warm节点

1)标记节点
需要通过“node.attr”来标记一个节点

  • 节点的attribute可以是任何的key/value
  • 可以通过elasticsearch.yml 或者通过-E命令指定
# 标记一个 Hot 节点
elasticsearch.bat  -E node.name=hotnode -E cluster.name=tulingESCluster -E http.port=9200 -E path.data=hot_data -E node.attr.my_node_type=hot

# 标记一个 warm 节点
elasticsearch.bat  -E node.name=warmnode -E cluster.name=tulingESCluster -E http.port=9201 -E path.data=warm_data -E node.attr.my_node_type=warm

# 查看节点
GET /_cat/nodeattrs?v

2)配置Hot数据
创建索引时候,指定将其创建在hot节点上

# 配置到 Hot节点
PUT /index-2022-05
{
  "settings":{
    "number_of_shards":2,
    "number_of_replicas":0,
    "index.routing.allocation.require.my_node_type":"hot"
  }
}

POST /index-2022-05/_doc
{
  "create_time":"2022-05-27"
}

#查看索引文档的分布
GET _cat/shards/index-2022-05?v

3)旧数据移动到Warm节点
Index.routing.allocation是一个索引级的dynamic setting,可以通过API在后期进行设定

# 配置到 warm 节点
PUT /index-2022-05/_settings
{  
  "index.routing.allocation.require.my_node_type":"warm"
}
GET _cat/shards/index-2022-05?v

2.5 如何对集群的容量进行规划

一个集群总共需要多少个节点?一个索引需要设置几个分片?规划上需要保持一定的余量,当负载出现波动,节点出现丢失时,还能正常运行。做容量规划时,一些需要考虑的因素:

  • 机器的软硬件配置
  • 单条文档的大小│文档的总数据量│索引的总数据量((Time base数据保留的时间)|副本分片数
  • 文档是如何写入的(Bulk的大小)
  • 文档的复杂度,文档是如何进行读取的(怎么样的查询和聚合)

评估业务的性能需求:

  • 数据吞吐及性能需求
    • 数据写入的吞吐量,每秒要求写入多少数据?
    • 查询的吞吐量?
  • 单条查询可接受的最大返回时间?
    • 了解你的数据
    • 数据的格式和数据的Mapping
    • 实际的查询和聚合长的是什么样的

ES集群常见应用场景:

  • 搜索: 固定大小的数据集
    • 搜索的数据集增长相对比较缓慢
  • 日志: 基于时间序列的数据
    • 使用ES存放日志与性能指标。数据每天不断写入,增长速度较快
    • 结合Warm Node 做数据的老化处理

硬件配置:

  • 选择合理的硬件,数据节点尽可能使用SSD
  • 搜索等性能要求高的场景,建议SSD
    • 按照1∶10-20的比例配置内存和硬盘
  • 日志类和查询并发低的场景,可以考虑使用机械硬盘存储
    • 按照1:50的比例配置内存和硬盘
  • 单节点数据建议控制在2TB以内,最大不建议超过5TB
  • JVM配置机器内存的一半,JVM内存配置不建议超过32G
  • 不建议在一台服务器上运行多个节点

内存大小要根据Node 需要存储的数据来进行估算

  • 搜索类的比例建议: 1:16
  • 日志类: 1:48——1:96之间

假设总数据量1T,设置一个副本就是2T总数据量

  • 如果搜索类的项目,每个节点31*16 = 496 G,加上预留空间。所以每个节点最多400G数据,至少需要5个数据节点
  • 如果是日志类项目,每个节点31*50= 1550 GB,2个数据节点即可

部署方式:

  • 按需选择合理的部署方式
  • 如果需要考虑可靠性高可用,建议部署3台单一的Master节点
  • 如果有复杂的查询和聚合,建议设置Coordinating节点

集群扩容:

  • 增加Coordinating / Ingest Node
  • 解决CPU和内存开销的问题
  • 增加数据节点
  • 解决存储的容量的问题
  • 为避免分片分布不均的问题,要提前监控磁盘空间,提前清理数据或增加节点

2.6 如何设计和管理分片

单个分片

  • 7.0开始,新创建一个索引时,默认只有一个主分片。单个分片,查询算分,聚合不准的问题都可以得以避免
  • 单个索引,单个分片时候,集群无法实现水平扩展。即使增加新的节点,无法实现水平扩展

两个分片
集群增加一个节点后,Elasticsearch 会自动进行分片的移动,也叫 Shard Rebalancing
在这里插入图片描述

算分不准的原因
相关性算分在分片之间是相互独立的,每个分片都基于自己的分片上的数据进行相关度计算。这会导致打分偏离的情况,特别是数据量很少时。当文档总数很少的情况下,如果主分片大于1,主分片数越多,相关性算分会越不准
一个示例如下:

PUT /blogs
{
  "settings":{
    "number_of_shards" : "3"
  }
}

POST /blogs/_doc/1?routing=fox
{
 "content":"Cross Cluster elasticsearch Search"
}

POST /blogs/_doc/2?routing=fox2
{
 "content":"elasticsearch Search"
}

POST /blogs/_doc/3?routing=fox3
{
 "content":"elasticsearch"
}

GET /blogs/_search
{
  "query": {
    "match": {
      "content": "elasticsearch"
    }
  }
}

#解决算分不准的问题
GET /blogs/_search?search_type=dfs_query_then_fetch
{
  "query": {
    "match": {
      "content": "elasticsearch"
    }
  }
}

解决算分不准的方法:

  • 数据量不大的时候,可以将主分片数设置为1。当数据量足够大时候,只要保证文档均匀分散在各个分片上,结果一般就不会出现偏差
  • 使用DFS Query Then Fetch
    • 搜索的URL中指定参数“_search?search_type=dfs_query_then_fetch"
    • 到每个分片把各分片的词频和文档频率进行搜集,然后完整的进行一次相关性算分

但是这样耗费更加多的CPU和内存,执行性能低下,一般不建议使用

如何设计分片数
当分片数>节点数时

  • 一旦集群中有新的数据节点加入,分片就可以自动进行分配
  • 分片在重新分配时,系统不会有downtime

多分片的好处: 一个索引如果分布在不同的节点,多个节点可以并行执行

  • 查询可以并行执行
  • 数据写入可以分散到多个机器

分片过多所带来的副作用
Shard是Elasticsearch 实现集群水平扩展的最小单位。过多设置分片数会带来一些潜在的问题:

  • 每个分片是一个Lucene的索引,会使用机器的资源。过多的分片会导致额外的性能开销。
  • 每次搜索的请求,需要从每个分片上获取数据
  • 分片的Meta 信息由Master节点维护。过多,会增加管理的负担。经验值,控制分片总数在10W以内

如何确定主分片数
从存储的物理角度看:

  • 搜索类应用,单个分片不要超过20 GB
  • 日志类应用,单个分片不要大于50 GB

为什么要控制分片存储大小:

  • 提高Update 的性能
  • 进行Merge 时,减少所需的资源
  • 丢失节点后,具备更快的恢复速度
  • 便于分片在集群内 Rebalancing

如何确定副本分片数
副本是主分片的拷贝:

  • 提高系统可用性︰响应查询请求,防止数据丢失
  • 需要占用和主分片一样的资源

对性能的影响:

  • 副本会降低数据的索引速度: 有几份副本就会有几倍的CPU资源消耗在索引上
  • 会减缓对主分片的查询压力,但是会消耗同样的内存资源。如果机器资源充分,提高副本数,可以提高整体的查询QPS

ES的分片策略会尽量保证节点上的分片数大致相同,但是有些场景下会导致分配不均匀:

  • 扩容的新节点没有数据,导致新索引集中在新的节点
  • 热点数据过于集中,可能会产生性能问题

可以通过调整分片总数,避免分配不均衡

  • index.routing.allocation.total_shards_per_node,index级别的,表示这个index每个Node总共允许存在多少个shard,默认值是-1表示无穷多个;
  • cluster.routing.allocation.total_shards_per_node,cluster级别,表示集群范围内每个Node允许存在有多少个shard。默认值是-1表示无穷多个。

如果目标Node的Shard数超过了配置的上限,则不允许分配Shard到该Node上。注意:index级别的配置会覆盖cluster级别的配置

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

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

相关文章

2、k8s 集群安装

1、kubeadm kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。 这个工具能通过两条指令完成一个 kubernetes 集群的部署&#xff1a; # 创建一个 Master 节点 $ kubeadm init # 将一个 Node 节点加入到当前集群中 $ kubeadm join <Master 节点的 IP 和端口…

mipi DPHY学习记录

DPHY的内容很多,而且细节很多,我会一点一点的进行补充记录,今天要记录的是cdphy的LP-MODE数据传输的过程。 1:HS 和LP mode lane status 和 lane上的电压 HS mode时,差分线上的电压摆幅为200mv,LP mode时,差分线上的电压为1.2v 2:HS mode data Transmission start 在…

北大软微2024推免拟录取名单及分析

拟录取名单 直博生 硕士生 分析 北大软微在2023年的推免中共录取直博生17人&#xff0c;硕士生205人&#xff0c;其中硕士生全为专硕电子信息 当然&#xff0c;从录取结果咱们可以看出来&#xff0c;除了985和强势211&#xff0c;中国地质&#xff08;北京&#xf…

STM32-高级定时器

以STM32F407为例。 高级定时器 高级定时器比通用定时器增加了可编程死区互补输出、重复计数器、带刹车&#xff08;断路&#xff09;功能&#xff0c;这些功能都是针对工业电机控制方面。 功能框图 16位向上、向下、向上/向下自动重装载计数器。 16位可编程预分频器&#xff0c…

时间序列预测模型实战案例(八)(Informer)BestPaper论文模型Informer代码实战讲解

论文地址->Informer论文地址PDF点击即可阅读 代码地址-> 论文官方代码地址点击即可跳转下载GIthub链接 本文介绍 本篇博客带大家看的是Informer模型进行时间序列预测的实战案例&#xff0c;它是在2019年被提出并在ICLR 2020上被评为Best Paper&#xff0c;可以说Inform…

JAVA应用中线程池设置多少合适?

目录 1、机器配置&#xff1a; 2、核心线程数 3、最大线程数多少合适&#xff1f; 4、理论基础 5、测试验证 一个线程跑满一个核心的利用率 6个线程 12 个线程&#xff1a;所有核的cpu利用率都跑满 有io操作 6、计算公式 7、决定最大线程数的流程&#xff1a; 1、机器…

HCIA数据通信——路由协议

数据通信——网络层&#xff08;OSPF基础特性&#xff09;_咕噜跳的博客-CSDN博客 数据通信——网络层&#xff08;RIP与BGP&#xff09;_咕噜跳的博客-CSDN博客 上述是之前写的理论知识部分&#xff0c;懒得在实验中再次提及了。这次做RIP协议以及OSPF协议。不过RIP协议不常用…

【Tricks】vscode winscp进行服务器容器连接(含修改初始密码)

1&#xff1a;获取docker的登陆信息 例如节点&#xff08;host&#xff09;、端口&#xff08;port&#xff09;、密码&#xff08;passwd&#xff09;等信息&#xff0c;这个自己找组内的前辈获取即可 2&#xff1a;配置config文件 找到vscode里面ssh处的config文件 人工找…

【unity3D】使用RawImage实现UI上的帧动画

&#x1f4a6;本专栏是我关于游戏开发的笔记 &#x1f236;本篇是一个简短的小知识点 使用RawImage实现帧动画 找一个帧动画连续的图片拖到工程中&#xff0c;将Texture Type改成Sprite&#xff08;2D和UI&#xff09;&#xff0c;点击apply应用上 在工程中新建一个RawImage,将…

Qt QtCreator添加自定义注释

在写代码的时候我们为了规范化&#xff0c;一般会加文件注释、类注释和函数注释&#xff1b;用注释来说明我们的代码&#xff0c;也方便模块化开发&#xff0c;那么我们在写注释的时候经常会写一些重复的内容&#xff0c;我们会复制粘贴。这样一来二去&#xff0c;就显得很繁琐…

循环语句--JAVA

循环语句 for循环结构 范例 执行流程 while循环结构 格式 范例 流程 for和while的区别 条件控制语句所控制的自增变量,在for循环结束后,就不可以继续使用了 条件控制语句所控制的自增变量,在while循环结束后,还可以继续使用了 数据类型 基本数据类型 char byte boolean …

redis 网课笔记

缓存 缓存雪崩 缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库。 解决方案 给不同的key的TTL添加随机值利于Redis集群提高服务的可用性 哨兵模式、集群模式给缓存业务添加降级限流策略 ngxin或spring cloud gateway给业务…

el-tree中展示项换行展示

文章目录 效果如下所示&#xff1a;没有换行展示的效果修改样式换行之后的展示效果 想要了解el-tree使用的详情往下看代码和数据如下所示Vue代码中可能使用到的数据如下Vue的代码如下&#xff1a;没有换行展示的效果换行之后的展示效果样式调试 效果如下所示&#xff1a; 没有…

JSP 学生成绩查询管理系统eclipse开发sql数据库serlvet框架bs模式java编程MVC结构

一、源码特点 JSP 学生成绩查询管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;比较流行的servlet框架系统具有完整的源代码和数据库&#xff0c;eclipse开发系统主要采用B/S模式 开发。 java 学生成绩查询管理系统 代码下载链接…

【MySQL】用户管理权限控制

文章目录 前言一. 用户管理1. 创建用户2. 删除用户3. 修改用户密码 二. 权限控制1. 用户授权2. 查看权限3. 回收权限 结束语 前言 MySQL的数据其实也以文件形式保存&#xff0c;而登录信息同样保存在文件中 MySQL的数据在Linux下默认路径是/var/lib/mysql 登录MySQL同样也可以…

深度学习_9_图片分类数据集

散装代码&#xff1a; import matplotlib.pyplot as plt import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2ld2l.use_svg_display()# 通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式…

Python用RoboBrowser库写一个通用爬虫模版

以下是一个使下载lianjia内容的Python程序&#xff0c;爬虫IP服务器为duoip的8000端口。 from robobrowser import RoboBrowser# 创建一个RoboBrowser对象 browser RoboBrowser(user_agentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) …

【网络协议】聊聊CND如何进行提升系统读性能

我们知道对于京东这种仓储来说&#xff0c;其实并不是在北京有一个仓储中心&#xff0c;而是针对全国主要的地方&#xff0c;北京、上海、广州、杭州&#xff0c;郑州等地方都有自己的仓储中心&#xff0c;当用户下单后&#xff0c;就会根据最近的仓储进行发货&#xff0c;不仅…

消息中间件-RabbitMQ介绍

一、基础知识 1. 什么是RabbitMQ RabbitMQ是2007年发布&#xff0c;是一个在AMQP(高级消息队列协议)基础上完成的&#xff0c;简称MQ全称为Message Queue, 消息队列&#xff08;MQ&#xff09;是一种应用程序对应用程序的通信方法&#xff0c;由Erlang&#xff08;专门针对于大…

perl列表创建、追加、删除

简介 perl 列表追加元素 主要是通过push和unshift函数来实现。其中&#xff0c;push是追加到列表尾&#xff0c;unshift是追加到列表头。 perl列表删除元素 主要是通过pop和shift函数来实现。其中&#xff0c;pop是从列表尾删除一个元素&#xff0c; shift是从列表头删除一…