更新 'MD_NEW/日志中心集群-6版本.md'
This commit is contained in:
parent
26e7c89198
commit
81246b29ce
|
@ -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服务仍然可用。
|
||||
|
||||
读取性能:更多的副本意味着更高的读取吞吐量,因为读取请求可以在多个副本之间分配。如果你的应用主要是读取密集型的,增加副本数可以提高查询性能。
|
||||
|
||||
集群负载:考虑集群的整体负载。增加副本会提高数据冗余和读取性能,但也会增加存储需求和网络流量,因此需要确保你的硬件资源可以支持。
|
Loading…
Reference in New Issue