Elasticsearch的分布式处理对用户来说是完全透明,你可以不关心它具体的实现就可以使用它,本章节中将对它进行大致的介绍
三个概念
- 集群(cluster):ES服务器的部署集群,一个集群由一个或多个节点构成
- 节点(node):具有相同cluster.name的ES服务组成一个节点
- 分片(shard):存储索引数据的空间,一个节点可以存在一个或多个分片
集群健康
集群健康是用来监控整个ES集群的健康状态,可以通过/_cluster/health?pretty请求查看
{ "cluster_name" : "es-local", // 集群名称 "status" : "green", // 状态值,green:所有主要分片和复制分片都可用,yellow:所有主要分片可用,但不是所有复制分片都可用,red:不是所有的主要分片都可用 "timed_out" : false, "number_of_nodes" : 2,//节点数 "number_of_data_nodes" : 2, "active_primary_shards" : 176, "active_shards" : 352, "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 }
分片
分片可以是主分片(primary shard)或者是复制分片(replica shard)。你索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。
横向扩展
假设现在的ES集群中有两个节点,每个节点含有3个分片,如下图:
现在我们扩展一个节点,扩展后ES会自动转移部分分片数到新的节点,达到负载均衡,如下:
Node3包含了分别来自Node 1和Node 2的一个分片,这样每个节点就有两个分片,和之前相比少了一个,这意味着每个节点上的分片将获得更多的硬件资源(CPU、RAM、I/O)。
在集群系统中深度分页
为了理解为什么深度分页是有问题的,让我们假设在一个有5个主分片的索引中搜索。当我们请求结果的第一页(结果1到10)时,每个分片产生自己最顶端10个结果然后返回它们给请求节点(requesting node),它再排序这所有的50个结果以选出顶端的10个结果。
你可以看到在分布式系统中,排序结果的花费随着分页的深入而成倍增长。这也是为什么网络搜索引擎中不提供跳页或者限制最大页数的原因。
Elasticsearch默认的最大查询页数是第10000页,如果需求中一定要有查10000页后的数据,可以通过下面的语句进行修改,但首先你最好尝试说服产品经理不要这么干:
curl -XPUT 'http://192.168.23.163:9200/console/_settings' -d '{ "index" : { "max_result_window" : 100000000}}'
两次查询数据不一致的问题
之前遇到同一个sql查询两次,一次有结果、一次没结果的问题。引起这个问题的原因是因为我们创建索引时设置了副本(es默认副本数为1,即同样的数据会在副本里也保存一份),副本和主分片中数据不一致,再由于es负载均衡每次查的不一定是同一个分片,所以引起了这样的问题。
解决办法:强制刷新es,http://192.168.23.163:9200/test_console/_flush?force
ES管理界面
http://192.168.23.163:9200/_plugin/head/
相关推荐
### Spark Standalone 分布式集群搭建详解 #### Spark Standalone 运行模式概述 Spark Standalone 是 Apache Spark 提供的一种自带的集群管理模式,主要用于管理 Spark 应用程序的执行环境。这种模式简单易用,适合...
为了解决这些问题,本文提出了一种基于Hadoop的分布式集群大数据动态存储系统的设计方案。 首先,需要明确Hadoop在大数据处理中的地位和作用。Hadoop是一个开源的分布式存储和计算平台,它提供了一套完整的生态系统...
分布式集群系统架构设计及应用部署 分布式集群系统架构设计及应用部署是指在高并发访问量和海量数据环境下,通过部署分布式集群环境系统来解决由于瞬间并发访问量过大造成网站崩溃、服务暂停的问题。该系统架构设计...
本人搭建hadoop完全分布式集群时,写的文档,内有详细步骤,
activemq分布式集群视频教程,activemq分布式集群视频教程,activemq分布式集群视频教程,activemq分布式集群视频教程,activemq分布式集群视频教程
尤其是在军事信息系统中,大数据分析和数据安全的需求推动了分布式集群平台的发展,而国产化软硬件在其中扮演着举足轻重的角色。基于Hadoop架构的国产化分布式集群平台的构建,不仅是一种技术上的革新,更是适应...
分布式集群存储是一种将多个独立的存储设备通过网络连接起来,使其工作起来像单一的、功能更强大的存储系统的技术。这种架构能够提供高可靠性和扩展性,并能处理大规模数据。它为当前存储系统从传统架构向更新的集群...
【MSSQL 】SQLServer分布式集群Python自动故障转移脚本 #安装依赖 pip install pymssql #windows打包 pyinstaller -w -F mssqlScript.py ######or pyinstaller -F mssqlScript.py #windows运行 ./mssqlScript.exe ...
Redis分布式集群配置文档 Redis是一种基于内存的NoSQL数据库,它支持数据持久化、事务、LUA脚本、管道、发布/订阅、消息队列等功能。为了提高Redis的可靠性和可扩展性,需要对其进行分布式集群配置。本文档将详细...
MySQL大型分布式集群 MySQL大型分布式集群 MySQL大型分布式集群
本资源“龙果MySQL大型分布式集群完整视频”提供了一套全面的教程,旨在帮助学习者掌握MySQL在大规模分布式环境中的应用。 在大型分布式集群中,MySQL的主要知识点包括: 1. **主从复制**:这是MySQL实现数据冗余...
本篇将详细讲解基于提供的文件名所涵盖的三个关键知识点:MySQL双机集群、MySQL AB Cluster以及MySQL分布式集群部署。 1. MySQL双机集群: 双机集群,也称为主备复制,是一种常见的高可用性解决方案。在这个配置中...
MySQL大型分布式集群
MySQL分布式集群是大型系统中常见的解决方案,以应对高并发、大数据量的挑战。MyCAT,全称MetaCat,是一款开源的数据库中间件,它能够将单一的MySQL数据库扩展为分布式数据库系统,支持分库分表,实现数据的水平扩展...
为了搭建Hadoop平台学习,前期搭建dubbo+Zookeeper集群,这里有详细介绍zookeeeper伪集群和分布式集群, dubbo在tomcat下安装等过程。相关jdk、war、jar等也在百度云...
Hadoop-0.21.0分布式集群配置.doc
分布式集群电商平台搭建方案 在构建大型的电商平台时,分布式集群技术是不可或缺的组成部分。它能够提高系统的可扩展性、容错性和性能,确保在高并发访问下也能稳定运行。本方案将详细介绍如何使用Java实现一个...
HBase 完全分布式集群搭建 HBase 是一个基于 Hadoop 的分布式 Nosql 数据库,可以提供高性能、可靠的数据存储和查询服务。为了搭建一个完全分布式的 HBase 集群,我们需要了解 HBase 的架构、组件和配置。 一、...
"Redis分布式集群部署安装及细节" 一、Redis集群介绍 Redis集群是一种分布式的NoSQL数据库解决方案,它可以将多个Redis节点组合成一个集群,以提高数据存储和检索的性能和可用性。Redis集群支持自动发现节点、...