From 81246b29ce36dae8b4bfc3a4b4455a63712ed506 Mon Sep 17 00:00:00 2001 From: diandian Date: Sun, 2 Jun 2024 00:31:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20'MD=5FNEW/=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E4=B8=AD=E5=BF=83=E9=9B=86=E7=BE=A4-6=E7=89=88?= =?UTF-8?q?=E6=9C=AC.md'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MD_NEW/日志中心集群-6版本.md | 116 ++++++++++++++++++++++++++++++++++- 1 file changed, 115 insertions(+), 1 deletion(-) diff --git a/MD_NEW/日志中心集群-6版本.md b/MD_NEW/日志中心集群-6版本.md index f6eacd0..50eac58 100644 --- a/MD_NEW/日志中心集群-6版本.md +++ b/MD_NEW/日志中心集群-6版本.md @@ -232,4 +232,118 @@ http.cors.allow-origin 允许的源地址。 ![image-20240531101544883](https://diandiange.oss-cn-beijing.aliyuncs.com/image-20240531101544883.png) -![image-20240531101623298](https://diandiange.oss-cn-beijing.aliyuncs.com/image-20240531101623298.png) \ No newline at end of file +![image-20240531101623298](https://diandiange.oss-cn-beijing.aliyuncs.com/image-20240531101623298.png) + +## 二:基本概念 + +#### 1.ES与传统数据的区别 + +​ 一个ES集群可以包含多个索引(数据库),每个索引又包含了很多类型(表),类型中包含了很多文档(行),每个文档使用 JSON 格式存储数据,包含了很多字段(列)。 + +| 关系型数据库 | Elasticsearch | +| :-------------: | :-----------------: | +| 数据库>表>行>列 | 索引>类型>文档>字段 | + +#### 2.基本概念 + +##### 索引(index) + +​ ES将数据存储于一个或多个索引中。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,索引由其名称(必须为全小写字符)进行标识。一个ES集群中可以按需创建任意数目的索引。 + +##### 类型(type) + +​ 类型是索引内部的逻辑分区(category/partition),一个索引内部可定义一个或多个类型(type)。类比传统的关系型数据库领域来说,类型相当于“表”。 + +##### 文档(document) + +​ 文档是索引和搜索的原子单位,它是包含了一个或多个域(Field)的容器,每个域拥有一个名字及一个或多个值,有多个值的域通常称为“多值域”,文档基于JSON格式进行表示。每个文档可以存储不同的域集,但同一类型下的文档至应该有某种程度上的相似之处。类比传统的关系型数据库领域来说,类型相当于“行”。 + +##### 集群(cluster) + +​ 一个或者多个拥有相同cluster.name配置的节点组成, 它们共同承担数据和负载的压力。 + +##### 节点(node) + +​ 一个运行中的 Elasticsearch 实例称为一个节点。es中的节点分为三种类型: + +​ 主节点:负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。 主节点并不需要涉及到文档级别的变更和搜索等操作。可以通过属性`node.master`进行设置。 + +​ 数据节点:存储数据和其对应的倒排索引。默认每一个节点都是数据节点(包括主节点),可以通过`node.data`属性进行设置。 + +​ 协调节点:如果`node.master`和`node.data`属性均为false,则此节点称为协调节点,用来响应客户请求,均衡每个节点的负载。 + +注意: + +​ 使用index和doc_type来组织数据。doc_type中的每条数据称为一个document,是一个JSON Object + +​ ES分布式搜索,传统数据库遍历式搜索 + +案例解释: + +​ 要计算出2.38亿会员中有多少80后的已婚的北京男士: + +​ 传统数据库执行时间: 5个小时左右 + +​ ES执行时间:1分钟 + +![image-20240601232056381](https://xingdian-home.oss-cn-beijing.aliyuncs.com/imagesimage-20240601232056381.png) + +##### 分片(Shards) + +​ 分片是Elasticsearch进行数据分布和扩展的基础。每个索引都可以被分割成多个分片,每个分片其实是一个独立的索引。分片使得Elasticsearch可以把巨大的数据集分散存储在多个节点上,这样可以实现: + +​ 水平扩展:随着数据量的增加,可以通过增加更多的节点来分摊数据和负载,从而提高处理能力 + +​ 提升性能:搜索操作可以并行在多个分片上执行,每个分片处理的速度更快,整体搜索性能得以提升 + +##### 副本(Replicas) + +​ 副本是分片的复制,主要用于提高数据的可用性和搜索查询的并发处理能力。每个分片都可以有一个或多个副本,这些副本分布在不同的节点上,从而提供了: + +​ 数据可用性:当某个节点发生故障时,该节点上的分片如果有副本存在于其他节点上,那么这些副本可以保证数据不会丢失,并且服务还可以继续运行 + +​ 负载均衡:读取操作(如搜索请求)可以在所有副本之间进行负载均衡,这样可以提高查询的吞吐量和响应速度 + +##### 定义分片和副本 + +​ 创建索引时指定分片和副本数 + +​ 当您通过Elasticsearch的REST API创建一个新的索引时,可以在请求体中使用settings部分来指定该索引的分片数(number_of_shards)和副本数(number_of_replicas)。以下是一个具体的示例: + +```json +PUT /my_index +{ + "settings": { + "index": { + "number_of_shards": 3, # 指定该索引将有3个主分片 + "number_of_replicas": 2 # 每个主分片将有2个副本分片 + } + } +} +``` + +​ 这个例子中,PUT /my_index是创建名为my_index的索引的请求。在请求体中,settings部分指出这个索引将被分成3个主分片,并且每个主分片将会有2个副本分片。这意味着,总共会有9个分片(3个主分片 + 6个副本分片)被分布在集群中 + +​ 主分片数量:一旦索引被创建,其主分片的数量就无法更改。因此,在创建时应谨慎选择合适的分片数量。 + +​ 副本数量:与主分片数量不同,副本的数量是可以动态调整的。如果需要更多的数据冗余或查询吞吐量,可以增加副本的数量。 + +​ 伸缩性与性能:选择分片和副本的数量时需要考虑数据量、查询负载和集群的硬件资源。过多的分片可能会增加集群的管理开销,而过少的分片可能会限制数据和查询的伸缩性。 + +**分片数的确定** + +​ 数据量预估:估计索引的总数据量大小。一般来说,每个分片处理20GB到50GB数据是比较理想的。这不是固定规则,但可以作为一个起点。 + +​ 硬件资源:考虑你的硬件资源,尤其是内存和CPU。分片越多,消耗的资源也越多。确保你的Elasticsearch集群有足够的资源来处理这些分片。 + +​ 写入吞吐量:如果你的应用会有大量的写入操作,更多的分片可能有助于提高写入性能,因为可以并行写入多个分片。 + +​ 查询性能:更多的分片意味着查询可以并行于更多的分片上执行,这可能会提高查询性能。但是,如果每个查询都要访问大多数分片,那么管理过多的分片会减慢查询速度。 + +**副本数的确定** + +​ 数据可用性:至少有一个副本可以确保当某个节点失败时,数据不会丢失,并且Elasticsearch服务仍然可用。 + +​ 读取性能:更多的副本意味着更高的读取吞吐量,因为读取请求可以在多个副本之间分配。如果你的应用主要是读取密集型的,增加副本数可以提高查询性能。 + +​ 集群负载:考虑集群的整体负载。增加副本会提高数据冗余和读取性能,但也会增加存储需求和网络流量,因此需要确保你的硬件资源可以支持。 \ No newline at end of file