13.Elasticsearch集群
2022-03-29 本文已影响0人
大勇任卷舒
13.1 Elasticsearch集群简介
- Elasticsearch用于构建高可用和可扩展的系统。
- 扩展的方式可以是购买更好的服务器(纵向扩展(vertical scale or scaling up))或者购买更多的服务器(横向扩展(horizontal scale orscaling out))。
- Elasticsearch虽然能从更强大的硬件中获得更好的性能,但是纵向扩展有它的局限性。
- 真正的扩展多数是横向的,它通过增加节点来均摊负载和增加可靠性。
13.2 集群的节点(node)
- 一个节点(node)就是一个Elasticsearch实例,而一个集群(cluster)由一个或多个节点组成,它们具有相同的 cluster.name ,它们协同工作,分享数据和负载。
- 当加入新的节点或者删除一个节点时,集群就会感知到并平衡数据。
- 集群中一个节点会被选举为主节点(master),它将临时管理集群级别的一些变更,例如新建或删除索引、增加或移除节点等。
- 主节点不参与文档级别的变更或搜索。
- 做为用户,能够与集群中的任何节点通信,包括主节点。
13.3 Elasticsearch数据存储
- Elasticsearch是一个分布式的文档(document)存储引擎。它可以实时存储并检索复杂数据结构——序列化的JSON文档。
- 在Elasticsearch中,每一个字段的数据都是默认被索引的。
- 每个字段专门有一个反向索引用于快速检索。
- 与其它数据库不同,它可以在同一个查询中利用所有的这些反向索引,以惊人的速度返回结果
13.4 Elasticsearch的分布式
- Elasticsearch致力于隐藏分布式系统的复杂性。以下这些操作都是在底层自动完成的:
- 将你的文档分区到不同的容器或者分片(shards)中,它们可以存在于一个或多个节点中。
- 将分片均匀的分配到各个节点,对索引和搜索做负载均衡。
- 冗余每一个分片,防止硬件故障造成的数据丢失。
- 将集群中任意一个节点上的请求路由到相应数据所在的节点。
- 无论是增加节点,还是移除节点,分片都可以做到无缝的扩展和迁移。
13.5 路由文档到分片
- 当你创建一个新文档,它是如何知道是应该存储在分片1还是分片2上的呢?事实上,它根据一个简单的算法决定:
- shard = hash(routing) % number_of_primary_shards
13.6 索引(index)与分片(shards)
- 索引是一个用来指向一个或多个分片(shards)的“逻辑命名空间(logical namespace)”。
- 一个分片(shard)是一个最小级别“工作单元(worker unit)”,它保存了索引中所有数据的一部分。
- 分片是Elasticsearch在集群中分发数据的关键。把分片想象成数据的容器。文档存储在分片中,然后分片分配到你集群中的节点上。
- 分片可以是主分片(primary shard)或者是复制分片(replica shard)。
13.7 复制分片(replica shard)
- 在集群中创建一个叫做 blogs 的索引
- 默认情况下,一个索引被分配5个主分片,以下示例分配3个主分片和一个复制分片(每个主分片都有一个复制分片):
PUT /blogs
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}}
13.8 启动第二个节点
- 如果我们启动了第二个节点,这个集群看起来就像下图。所有的主分片和复制分片都将被分配:
13.9 节点扩展与负载均衡
- 当集群新增节点时,集群会重新组织自己:
13.10 修改复制分片数
- 复制分片的数量可以在运行中的集群中动态地变更,把复制分片的数量从原来的1 增加到 2 ,代码如下:
PUT /blogs/_settings
{"number_of_replicas" : 2
}
13.11 节点故障
-
我们杀掉的节点Node1,集群的响应如下
13.12 新建、索引和删除文档
- 在主分片和复制分片上成功新建、索引或删除一个文档必要的顺序步骤:
13.13 倒排索引
- 例如,我们有两个文档,每个文档 content 字段包含:
- The quick brown fox jumped over the lazy dog
- Quick brown foxes leap over lazy dogs in summer
- 把所有的唯一词放入列表并排序,结果是这个样子的:
13.14 倒排索引的特性
- 倒排索引的注意事项:
- “Quick” 和 “quick” 被认为是不同的单词;
- "fox" 和 "foxes" 很相似,就像 "dog" 和 "dogs" ——它们都是同根词。
- "jumped" 和 "leap" 不是同根词,但意思相似——它们是同义词。
大数据视频推荐:
腾讯课堂
CSDN
ELK入门精讲
AIOps智能运维实战
ELK7 stack开发运维
大数据语音推荐:
ELK7 stack开发运维
企业级大数据技术应用
大数据机器学习案例之推荐系统
自然语言处理
大数据基础
人工智能:深度学习入门到精通