更新 'MD_NEW/日志中心集群-6版本.md'

This commit is contained in:
diandian 2024-06-02 00:31:18 +08:00
parent 26e7c89198
commit 81246b29ce
1 changed files with 115 additions and 1 deletions

View File

@ -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)
![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服务仍然可用。
读取性能:更多的副本意味着更高的读取吞吐量,因为读取请求可以在多个副本之间分配。如果你的应用主要是读取密集型的,增加副本数可以提高查询性能。
集群负载:考虑集群的整体负载。增加副本会提高数据冗余和读取性能,但也会增加存储需求和网络流量,因此需要确保你的硬件资源可以支持。