ElasticSearch之分布式架构

361 阅读7分钟

可扩展性和弹性

Elasticsearch运行在一个分布式的环境中,从设计之初就考虑到了这一点。集群内的一个或者多个节点共同存储您的全部数据并在所有节点上都提供联合索引和搜索功能。

不同的集群通过不同的名字来区分,默认名字“elasticsearch”。通过配置文件修改,或者在命令行中 -E cluster.name=geektime进行设定。每个节点的名字,通过配置文件配置,或者启动时候 -E node.name=node1指定,每个节点在启动后都会分配一个UID,保存在data目录下。

高可用性

具有主分片和副本分片,可在节点发生故障时实现故障切换。当主分片发生故障时,副本分片会取而代之。

自动节点恢复

当节点出于任何原因(有意或者其他),主节点会做出以下反应:

  • 将副本分片提升为主分片以替换节点上的任何主分片
  • 分配副本分片以替换丢失的副本(假设有足够的节点)
  • 在其余节点之间均匀地重新均衡分片

这些操作旨在通过每个分片尽快完全复制来保护集群免受数据丢失。

即使我们在节点级别集群级别限制并发恢复,“shard-shuffle”仍然会给集群带来额外压力,如果奔溃的节点很快就恢复了,这可能是没必要的。想象一下这个场景:

  • 节点5丢失网络连接
  • 主节点将节点 5 上的每个主分片的副本分片提升为主分片。
  • 主节点分片新的副本给集群中的其他节点
  • 每个新副本都会跨网络制作主分片的完整副本
  • 更多的分片被移动到不同节点以重新平衡集群
  • 几分钟后节点5返回
  • 主节点通过将分片分配给节点5来重新平衡集群

如果主节点只等了几分钟,然后丢失的分片可以用最少的网络流量重新分配给节点5。对于已自动sync-flushed的空闲分片(未接收到请求的分片)来说,此过程甚至更快。

由于节点离开而变得未分配的副本分片的分配可以使用index.unassigned.node_left.delayed_timeout延迟设置,默认为1m。

此设置可以在实时索引(或所有索引)上更新:

PUT _all/_settings
{
  "settings": {
    "index.unassigned.node_left.delayed_timeout": "5m"
  }
}

<--更多详情见官方文档-->

自动数据再平衡

ElasticSearch集群中的主节点会自动决定将哪个分片分配给哪个节点,以及何时需要在节点间移动分片以重新平衡集群。

分片分配是将分片分配给节点的过程。这可能发生在初始恢复、副本分配、重新平衡或添加或删除节点时。

master的主要角色之一是决定将哪些分片分配给哪些节点,以及何时在节点之间移动分片以重新平衡集群。

有许多设置可用于控制分片分配过程:

除了这些,还有一些其他杂项集群级设置

<--更多详情见官方文档-->

水平可扩展性

当遇到资源不足问题时,只需向集群中再添加一个节点以提高容量和可靠性即可。而且当你向集群中添加更多节点时,集群会自动分配副本分片。

机架意识

您可以将定制节点属性作为意识属性,从而让ElasticSearch在分配分片时将实体空间配置考虑在内。如果ElasticSearch知道哪些节点在同一实体服务器上、同一个机架,或者位于同一区内,ElasticSearch就能相应地分配主分片和副本分片,从而将万一发生故障时丢失所有分片副本的风险降至最低。

跨集群复制

  • 灾难恢复:如果主集群发生故障,备用集群可以作为热备份
  • 地理邻近度:可以在本地满足读取需求,从而降低网络延迟

跨数据中心复制

通过ElasticSearch内的集群复制能力,再也无需依赖其他技术来跨数据中心、跨地区或者跨ElasticSearch集群来复制数据了。

节点

Master-eligible nodes和Master Node节点

  • 每个节点启动后,默认就是一个Master elogible节点
    • 可以设置node.master:false禁止
  • master-elogible节点可以参加选主流程,成为master节点
  • 每个节点上都保存了集群的状态,只有master节点才能修改集群的状态信息
    • 集群状态(cluster state),维护了一个集群中,必要的信息
      • 所有节点的信息
      • 所有的索引和其相关的Mapping与setting信息
      • 分片的路由信息
    • 任意节点都能修改会导致数据的不一致性

Data Node&Coordinating Node&其他节点

  • Data Node
    • 保存数据的节点
  • Coordinating Node
    • 负责接受Client的请求,将请求分发到合适的节点,最终把结果汇集到一起
    • 每个节点默认都起到了Coordinating Node的职责
  • Hot&Warm Node
    • 不同硬件配置的Data Node,用来实现Hot&Warm架构,降低集群部署的成本
  • Machine Learning Node
    • 负责跑机器学习的Job,用来做异常检测

分片

  • 主分片,用以解决数据水平扩展的问题,通过主分片将数据分布到集群内的所有节点之上,主分片数在索引创建时指定,后续不允许修改,除非Reindex
  • 副本,用以解决数据高可用的问题。分片是主分片的拷贝
    • 副本分片可以动态调整
    • 增加副本数,还可以在一定程度上提高服务的可用性(读取性能)

分片的设定

  • 对生产环境中的分片的设定,需要提前做好容量规划
    • 过小,导致后续无法增加节点实现水平扩展,单个分片的数据量太大,导致数据重新分配耗时
  • 过大,影响搜索结果相关性打分,影响统计结果的准确性,单个节点的分片过多会导致资源浪费,同时也会影响性能

查看集群状态

API查看

# 查看集群健康状况
GET _cluster/health

结果:

{
  "cluster_name" : "es-docker-cluster",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 13,
  "active_shards" : 26,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}
# 查看节点
GET _cat/nodes?v

结果:

ip         heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
172.21.0.3           67          94   5    0.31    0.79     0.95 cdfhilmrstw *      es01
172.21.0.2           35          94   5    0.31    0.79     0.95 cdfhilmrstw -      es02
172.21.0.4           30          94   5    0.31    0.79     0.95 cdfhilmrstw -      es03
# 查看分片
GET _cat/shards?v

结果:

index                                                         shard prirep state    docs  store ip         node
.ds-.logs-deprecation.elasticsearch-default-2022.11.12-000001 0     r      STARTED              172.21.0.4 es03
.ds-.logs-deprecation.elasticsearch-default-2022.11.12-000001 0     p      STARTED              172.21.0.3 es01
.geoip_databases                                              0     p      STARTED    41 38.9mb 172.21.0.2 es02
.geoip_databases                                              0     r      STARTED    41 41.6mb 172.21.0.3 es01
.apm-agent-configuration                                      0     r      STARTED     0   226b 172.21.0.2 es02
.apm-agent-configuration                                      0     p      STARTED     0   226b 172.21.0.4 es03
.ds-ilm-history-5-2022.11.12-000001                           0     p      STARTED              172.21.0.4 es03
.ds-ilm-history-5-2022.11.12-000001                           0     r      STARTED              172.21.0.3 es01
.kibana_task_manager_pre7.4.0_001                             0     p      STARTED     2  6.4kb 172.21.0.4 es03
.kibana_task_manager_pre7.4.0_001                             0     r      STARTED     2  6.4kb 172.21.0.3 es01
.kibana-event-log-7.16.2-000001                               0     r      STARTED              172.21.0.2 es02
.kibana-event-log-7.16.2-000001                               0     p      STARTED              172.21.0.3 es01
.apm-custom-link                                              0     p      STARTED     0   226b 172.21.0.2 es02
.apm-custom-link                                              0     r      STARTED     0   226b 172.21.0.4 es03
.kibana_7.16.2_001                                            0     r      STARTED    60  4.7mb 172.21.0.2 es02
.kibana_7.16.2_001                                            0     p      STARTED    60  4.7mb 172.21.0.3 es01
.kibana_task_manager_7.16.2_001                               0     r      STARTED    19  1.9mb 172.21.0.2 es02
.kibana_task_manager_7.16.2_001                               0     p      STARTED    19  1.9mb 172.21.0.4 es03
.kibana_1                                                     0     r      STARTED     4  9.5kb 172.21.0.2 es02
.kibana_1                                                     0     p      STARTED     4  9.5kb 172.21.0.3 es01
.ds-.logs-deprecation.elasticsearch-default-2022.11.27-000002 0     p      STARTED              172.21.0.2 es02
.ds-.logs-deprecation.elasticsearch-default-2022.11.27-000002 0     r      STARTED              172.21.0.4 es03
.tasks                                                        0     r      STARTED     9 61.7kb 172.21.0.2 es02
.tasks                                                        0     p      STARTED     9 61.7kb 172.21.0.4 es03
movies                                                        0     r      STARTED 62424  7.3mb 172.21.0.4 es03
movies                                                        0     p      STARTED 62424  7.1mb 172.21.0.3 es01

cerebro查看

image.png

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天,点击查看活动详情