`

ES分布式环境说明

 
阅读更多

一、集群规划

搭建一个集群我们需要考虑如下几个问题:

1. 我们需要多大规模的集群?

2. 集群中的节点角色如何分配?

3. 如何避免脑裂问题?

4. 索引应该设置多少个分片?

5. 分片应该设置几个副本?

下面我们就来分析和回答这几个问题

1、我们需要多大规模的集群?

需要从以下两个方面考虑:

1.1 当前的数据量有多大?数据增长情况如何?
1.2 你的机器配置如何?cpu、多大内存、多大硬盘容量?

推算的依据:

ES JVM heap 最大可以设置32G 。
30G heap 大概能处理的数据量 10 T。如果内存很大如128G,可在一台机器上运行多个ES节点实例。

备注:集群规划满足当前数据规模+适量增长规模即可,后续可按需扩展。

两类应用场景:

A. 用于构建业务搜索功能模块,且多是垂直领域的搜索。数据量级几千万到数十亿级别。一般2-4台机器的规模。
B. 用于大规模数据的实时OLAP(联机处理分析),经典的如ELK Stack,数据规模可能达到千亿或更多。几十到上百节点的规模。

2、集群中的节点角色如何分配?

2.1 节点角色:

Master
node.master: true 节点可以作为主节点
DataNode
node.data: true 默认是数据节点。
Coordinate node 协调节点
如果仅担任协调节点,将上两个配置设为false。

说明:

一个节点可以充当一个或多个角色,默认三个角色都有

协调节点:一个节点只作为接收请求、转发请求到其他节点、汇总各个节点返回数据等功能的节点。就叫协调节点

2.2 如何分配:

A. 小规模集群,不需严格区分。
B. 中大规模集群(十个以上节点),应考虑单独的角色充当。特别并发查询量大,查询的合并量大,可以增加独立的协调节点。角色分开的好处是分工分开,不互影响。如不会因协调角色负载过高而影响数据节点的能力。

3、如何避免脑裂问题?

3.1 脑裂问题

一个集群中只有一个A主节点,A主节点因为需要处理的东西太多或者网络过于繁忙,从而导致其他从节点ping不通A主节点,这样其他从节点就会认为A主节点不可用了,就会重新选出一个新的主节点B。过了一会A主节点恢复正常了,这样就出现了两个主节点,导致一部分数据来源于A主节点,另外一部分数据来源于B主节点,出现数据不一致问题,这就是脑裂

3.2 尽量避免脑裂,需要添加最小数量的主节点配置:

discovery.zen.minimum_master_nodes: (有master资格节点数/2) + 1

这个参数控制的是,选举主节点时需要看到最少多少个具有master资格的活节点,才能进行选举。官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量。

3.3 常用做法(中大规模集群):

1. Master 和 dataNode 角色分开,配置奇数个master,如3
2. 单播发现机制,配置master资格节点:

discovery.zen.ping.multicast.enabled: false —— 关闭多播发现机制,默认是关闭的

discovery.zen.ping.unicast.hosts: ["master1", "master2", "master3"] —— 配置单播发现的主节点ip地址,其他从节点要加入进来,就得去询问单播发现机制里面配置的主节点我要加入到集群里面了,主节点同意以后才能加入,然后主节点再通知集群中的其他节点有新节点加入

3. 配置选举发现数,及延长ping master的等待时长

discovery.zen.ping_timeout: 30(默认值是3秒)——其他节点ping主节点多久时间没有响应就认为主节点不可用了
discovery.zen.minimum_master_nodes: 2 —— 选举主节点时需要看到最少多少个具有master资格的活节点,才能进行选举

4、索引应该设置多少个分片?

说明:分片数指定后不可变,除非重索引。

思考:

分片对应的存储实体是什么?

  存储的实体是索引

分片是不是越多越好?

  不是

分片多有什么影响?

  分片多浪费存储空间、占用资源、影响性能

4.1 分片过多的影响:

每个分片本质上就是一个Lucene索引, 因此会消耗相应的文件句柄, 内存和CPU资源。
每个搜索请求会调度到索引的每个分片中. 如果分片分散在不同的节点倒是问题不太. 但当分片开始竞争相同的硬件资源时, 性能便会逐步下降。
ES使用词频统计来计算相关性. 当然这些统计也会分配到各个分片上. 如果在大量分片上只维护了很少的数据, 则将导致最终的文档相关性较差。

4.2 分片设置的可参考原则:

ElasticSearch推荐的最大JVM堆空间是30~32G, 所以把你的分片最大容量限制为30GB, 然后再对分片数量做合理估算. 例如, 你认为你的数据能达到200GB, 推荐你最多分配7到8个分片。
在开始阶段, 一个好的方案是根据你的节点数量按照1.5~3倍的原则来创建分片. 例如,如果你有3个节点, 则推荐你创建的分片数最多不超过9(3x3)个。当性能下降时,增加节点,ES会平衡分片的放置。
对于基于日期的索引需求, 并且对索引数据的搜索场景非常少. 也许这些索引量将达到成百上千, 但每个索引的数据量只有1GB甚至更小. 对于这种类似场景, 建议只需要为索引分配1个分片。如日志管理就是一个日期的索引需求,日期索引会很多,但每个索引存放的日志数据量就很少。

5、分片应该设置几个副本?

说明:副本数是可以随时调整的!

思考:

副本的用途是什么?

  备份数据保证高可用数据不丢失,高并发的时候参与数据查询
针对它的用途,我们该如何设置它的副本数?

  一般一个分片有1-2个副本即可保证高可用
集群规模没变的情况下副本过多会有什么影响?

  副本多浪费存储空间、占用资源、影响性能

5.1 副本设置基本原则:

为保证高可用,副本数设置为2即可。要求集群至少要有3个节点,来分开存放主分片、副本。
如发现并发量大时,查询性能会下降,可增加副本数,来提升并发查询能力。

注意:新增副本时主节点会自动协调,然后拷贝数据到新增的副本节点

二、集群搭建

1. 准备3台虚拟机:

192.168.152.128 、192.168.152.129、192.168.152.130

2. 在3台虚拟机里面都安装好elasticsearch

安装教程参考我之前写的文章的ES的安装和配置部分:

https://www.cnblogs.com/leeSmall/p/9189078.html

3. 修改3台虚拟机下ES的配置,使得它们组成一个集群

进入elasticsearch的config目录,修改elasticsearch.yml的配置

3.1. IP访问限制、默认端口修改9200

这里有两个需要提醒下,第一个就是IP访问限制,第二个就是es实例的默认端口号9200。IP访问限制可以限定具体的IP访问服务器,这有一定的安全过滤作用。

# Set the bind address to a specific IP (IPv4 or IPv6): 
# 
network.host: 192.168.152.128

如果设置成0.0.0.0则是不限制任何IP访问。一般在生产的服务器可能会限定几台IP,通常用于管理使用。

默认的端口9200在一般情况下也有点风险,可以将默认的端口修改成另外一个,这还有一个原因就是怕开发人员误操作,连接上集群。当然,如果你的公司网络隔离做的很好也无所谓。

# 
# Set a custom port for HTTP: 
# 
http.port: 9200 
transport.tcp.port: 9300

这里的9300是集群内部通讯使用的端口,这个也可以修改掉。因为连接集群的方式有两种,通过扮演集群node也是可以进入集群的,所以还是安全起见,修改掉默认的端口。

说明:记得修改安装了ES的3台虚拟机(三个节点)的相同配置,要不然节点之间无法建立连接工作,也会报错。

3.2 集群发现IP列表、node、cluster名称

紧接着修改集群节点IP地址,这样可以让集群在规定的几个节点之间工作。elasticsearch,默认是使用自动发现IP机制。就是在当前网段内,只要能被自动感知到的IP就能自动加入到集群中。这有好处也有坏处。好处就是自动化了,当你的es集群需要云化的时候就会非常方便。但是也会带来一些不稳定的情况,如,master的选举问题、数据复制问题。

导致master选举的因素之一就是集群有节点进入。当数据复制发生的时候也会影响集群,因为要做数据平衡复制和冗余。这里面可以独立master集群,剔除master集群的数据节点能力。

固定列表的IP发现有两种配置方式,一种是互相依赖发现,一种是全量发现。各有优势吧,我是使用的依赖发现来做的。这有个很重要的参考标准,就是你的集群扩展速度有多快。因为这有个问题就是,当全量发现的时候,如果是初始化集群会有很大的问题,就是master全局会很长,然后节点之间的启动速度各不一样。所以我采用了靠谱点的依赖发现。

你需要在192.168.152.128的elasticsearch中配置成:

# --------------------------------- Discovery ---------------------------------- 
# 
# Pass an initial list of hosts to perform discovery when new node is started: 
# The default list of hosts is ["127.0.0.1", "[::1]"] 
# 
discovery.zen.ping.unicast.hosts: [ "192.168.152.129:9300","192.168.152.130:9300" ]

让他去发现129,130的机器,以此内推,完成剩下的129和130机器的配置。

然后你需要配置下集群名称,就是你当前节点所在集群的名称,这有助于你规划你的集群。集群中的所有节点的集群名称必须一样,只有集群名称一样才能组成一个逻辑集群

# ---------------------------------- Cluster ----------------------------------- 
# 
# Use a descriptive name for your cluster: 
# 
cluster.name: mycluster 

配置你当前节点的名称

# 
# ------------------------------------ Node ------------------------------------ 
# 
# Use a descriptive name for the node: 
# 
node.name: node-1

以此类推,完成另外两个节点的配置。cluster.name的名称必须保持一样。然后分别设置node.name。

说明:

这里搭建的是一个简单的集群,没有做集群节点角色的区分,所以3个节点默认的角色有主节点、数据节点、协调节点

选举ES主节点的逻辑:

选举的大概逻辑,它会根据分片的数据的前后新鲜程度来作为选举的一个重要逻辑。(日志、数据、时间都会作为集群master全局的重要指标)

因为考虑到数据一致性问题,当然是用最新的数据节点作为master,然后进行新数据的复制和刷新其他node。

三、集群管理

1. 监控API

http://localhost:9200/_cat

复制代码
GET  /_cat

/_cat/health
/_cat/nodes
/_cat/master
/_cat/indices
/_cat/allocation 
/_cat/shards 
/_cat/shards/{index}
/_cat/thread_pool
/_cat/segments 
/_cat/segments/{index}
复制代码

2. x-pack

为集群提供安全防护、监控、告警、报告等功能的收费组件;
部分免费:https://www.elastic.co/subscriptions
6.3开始已开源,并并入了elasticsearch核心中。

官网安装介绍:

https://www.elastic.co/guide/en/elasticsearch/reference/6.2/installing-xpack-es.html

 

参考文章:

集群搭建一:https://www.cnblogs.com/wangiqngpei557/p/5967377.html

集群搭建二:https://www.cnblogs.com/jstarseven/p/6803054.html 这一篇文章写得比较详细,同时还总结了搭建过程中遇到的问题,搭建ES集群的话强烈推荐

分享到:
评论

相关推荐

    ElasticSearch分布式搜索引擎 v8.12.2.zip

    **Elasticsearch分布式搜索引擎v8.12.2详解** Elasticsearch是一个开源的全文搜索引擎,基于Lucene库,设计为分布式、可扩展且实时的搜索和分析引擎。它的核心特性包括强大的全文搜索、实时分析、高可用性和容错...

    分布式架构说明

    - **组件功能**:为了处理分布式环境下数据一致性的问题,最终一致性组件提供了一系列解决方案,如分布式事务、补偿机制等。 - **应用场景**:在涉及多个微服务交互的业务场景中,确保数据在最终达到一致状态,避免...

    SOA实践者说分布式环境下的系统集成实例源码ch4

    7. **监控与日志**:对于分布式系统,监控和日志是必不可少的,可能讲解Prometheus、Grafana等工具的使用,以及ELK Stack(Elasticsearch, Logstash, Kibana)的日志收集和分析。 8. **容器化与微服务**:可能讨论...

    elasticsearch-开源分布式搜索引擎Elasticsearch的基本概念与操作详解

    内容概要:本文全面介绍了Elasticsearch的基础知识,涵盖了Elasticsearch的概念、架构、应用场景...其他说明:文章内容丰富,覆盖了从入门到进阶的知识点,特别适合希望深入了解Elasticsearch的开发者和技术人员阅读。

    ElasticSearch部署操作说明

    ElasticSearch是一款开源的搜索引擎库,基于Lucene库,提供了一个分布式的搜索引擎服务。下面是ElasticSearch部署操作的详细说明: 一、环境准备 1. 安装JDK环境:ElasticSearch需要JDK 1.8.0_73以上版本,因此...

    bboss-elasticsearch开发环境搭建和开发入门视频教程.

    Elasticsearch 以其分布式、RESTful 风格的 API 而闻名,能够处理大量数据并实现快速检索。它采用 Lucene 库作为其核心搜索引擎,提供了集群、索引、搜索、分析等多种功能,广泛应用于日志分析、监控、物联网数据...

    elasticsearch-bulk-insert-plugin.zip

    Elasticsearch是一种流行且功能强大的分布式搜索引擎,常用于大数据分析、日志分析、全文检索等场景。Kettle,又称Pentaho Data Integration(PDI),是一款开源的数据集成工具,它提供了ETL(提取、转换、加载)...

    elasticsearch 6.2.4 jar

    Elasticsearch 6.2.4 是一个流行的...总结来说,这个压缩包提供了运行Elasticsearch 6.2.4所需的基础Java库,用户可以利用这些库在Java环境中搭建、管理和操作Elasticsearch集群,实现高效的数据搜索、存储和分析功能。

    Elasticsearch API

    Elasticsearch具有分布式特性,能够在多个服务器上运行,提供水平扩展和高可用性。它对外提供RESTful API,支持多种编程语言客户端操作,而Java API是其中之一。Elasticsearch常用于大数据环境下的复杂搜索需求和...

    Elasticsearch_python使用文档

    Elasticsearch 是一个开源的分布式全文搜索引擎,它提供了一个分布式、多用户能力的全文搜索引擎,基于 Lucene 库。Python 客户端库 Elasticsearch-py 则允许开发者轻松地与 Elasticsearch 服务器进行交互。本文档将...

    elasticsearch-7.14.0.zip

    - 打开浏览器,访问`http://localhost:9200`,如果返回类似`{"name":"your_node_name","cluster_name":"my_cluster_name","version":{"number":"7.14.0"}`的信息,说明Elasticsearch已成功启动。 6. **安全性配置*...

    Elasticsearch-2.3.5安装说明

    Elasticsearch 是一款高性能、分布式、全文搜索引擎,常用于大数据分析和实时搜索场景。本文将详细介绍如何安装 Elasticsearch 的 2.3.5 版本。 首先,我们需要了解安装 Elasticsearch 的基本步骤: 1. **系统需求...

    SpringBoot整合Elasticsearch完整源码

    Elasticsearch是一个基于Lucene的开源分布式搜索引擎,具备实时分析、搜索、存储、聚合等功能。它的设计目标是简单易用,同时提供高性能和高可扩展性。Elasticsearch广泛应用于日志分析、监控、推荐系统等领域。 3...

    elasticsearch-sql插件(es2.2.0版本)

    2. **索引设计**: 考虑到Elasticsearch的分布式特性,良好的索引设计对于SQL查询的性能至关重要。确保字段被正确地分析和分词,以便于搜索和过滤。 3. **版本兼容性**: 注意插件版本与Elasticsearch版本之间的兼容...

    elasticsearch rpm离线安装包

    如果返回JSON响应,说明Elasticsearch已经启动并运行。 7. **注意事项**: - 确保目标服务器满足Elasticsearch 6.5.4的系统要求,包括JDK版本、内存大小等。 - 离线安装意味着无法自动获取更新和依赖,需要预先...

    elasticsearch5.X 安装和head插件安装

    Elasticsearch(简称ES)是一款基于Lucene的开源全文搜索引擎,提供分布式、RESTful风格的搜索和数据分析功能。在5.x版本中,它增强了性能,优化了API,并引入了许多新特性。本文将详细介绍如何在本地环境中安装...

    最新版windows elasticsearch-8.2.3-windows-x86_64.zip

    总的来说,Elasticsearch-8.2.3在Windows环境中的应用涉及了分布式搜索、数据分析、日志管理等多个领域,是现代数据基础设施的重要组成部分。通过合理配置和利用其功能,可以帮助企业更好地管理和理解海量数据。

Global site tag (gtag.js) - Google Analytics