ELK 性能(2) — 如何在大业务量下保持 Elasticsearch 集群的稳定
ELK 性能(2) — 如何在大业务量下保持 Elasticsearch 集群的稳定
介绍
如何在大业务量下保持 Elasticsearch 集群的稳定?
内容
当我们使用 Elasticsearch 时,期望获得的是
- 集群的问题
- 快速的搜索
设想我们有一个论坛的数据需要索引存储到 Elasticsearch 里
- 每个用户的个人信息
- 讨论与评论
- 以及用户形成的组与圈子
| Server 1 | Server 2 | Server 3 |
|---|---|---|
![]() |
![]() |
![]() |
| C-D-(M) | C-D-M* | C-D-(M) |
对于以上每个服务器 1、2、3:
| CPU: | 10 phyical cores @ 2.80GHz |
|---|---|
| RAM: | 256GB or more ... |
| Disques: | SSD 300GB or more ... |
C = Client
D = Data
M* = Elected Master
M = Eligible as Master
峰值出现在下午 5 点,有 75% 的用户同时在线,操作包括:
- 发布与评论
- 搜索讨论与文件
- 个人信息的更新
- 创建与加入新的组或圈子
- 加入感兴趣的话题并讨论
下午 5 点发生了什么?
- 堆内存骤然升高
- 由于 CPU 的占用提升,GC 增加
为了解决这样类似的问题,我们需要改变底层的架构以及请求方式。
多米诺效应
| Server 1 | Server 2 | Server 3 |
|---|---|---|
![]() |
![]() |
![]() |
| C-D-(M) | C-D-M* (不可用) | C-D-(M) |
如果当前节点是主节点,当 JVM 在几秒内无法响应时,会发生新的选举。而相同的问题在新的主节点选举完成后立即会发生,这会导致集群不稳定。
** 即使宕机的不是主节点,再平衡也需要花时间,同时也会给集群带来压力
解决方案
分而治之
容量大的堆在进行垃圾回收时需要的时间更长,这个缺点也是导致集群不稳定的原因
虚拟化
- 不要为堆分配
- 设置
cluster.routing.allocation.same_shard.host
如何组织这些节点?
主节点:
- 主节点管理并反映一个集群的真实状态。
客户端节点:(只为客户端节点开放 HTTP)
客户端节点将数据节点保护在防火墙之后,只有客户端节点可以被外部访问。
客户端节点知道数据存储的位置,并且可以查询正确的片(shard)归并结果并返回。
数据节点:
- 只有数据节点存储数据,用它们来索引并搜索。
** 不要使用主节点作为客户端,因为在大量聚合、排序以及需要大量计算的脚本执行时,会导致节点的状态不稳定。
小技巧
- 将最小节点的数量(minimum number of eligible nodes)设置为 2 ,这样当节点丢失一个主节点时,整个集群还可以正常工作。
- 为了让 Elasticsearch 能够平滑的运作,不要将所有的系统内存都分配给 JVM :需要可用的内存让文件系统缓存使用,这样磁盘存取会更快。
- 为特定的主节点分配较小的堆(例如,1GB 可能就足够了),这样它们就不会因为 GC 的停顿受到很大影响。
如何计算分片(shard)大小?
由场景决定。
保持分片(shard)的平衡
在以上的场景中,我们会保持每个分片(shard)大小在 1 到 4GB ,这样查询速度会比较快,在重启或者节点宕掉的时候分片重排也会比较快。
分片必须足够小,让硬件可以有能力处理。分片本身的大小并不受技术的限制,它受硬件的限制。
当分片增长到很大时,我么可以选择为 Elasticsearch 重建整个索引并设置更多的分片,可以进行横向扩展,或者根据(时间段,用户)拆分索引。
注意,一旦需要处理很多分片,需要在数据分布与协调各个分片的代价中做权衡。
参考
参考来源:
2016.4 Camilo Sierra - How to get a stable Elasticsearch cluster in high traffic website
结束
ELK 性能(2) — 如何在大业务量下保持 Elasticsearch 集群的稳定的更多相关文章
- centos7下部署elasticSearch集群
OS:Centos7x虚拟机 1H2Gjdk:1.8elasticsearch:5.6.0 单节点配置请参考:centos7下elasticSearch安装配置 配置master节点 # 在配置文件的 ...
- 在centos7使用docker下搭建elasticsearch集群
一 .docker的安装 https://www.cnblogs.com/ghostdot/p/12410242.html 二.创建相关映射文件 cd /home/ mkdir node cd nod ...
- Windows下搭建elasticsearch集群案例
https://blog.csdn.net/u014236259/article/details/64129918
- ELK 性能(4) — 大规模 Elasticsearch 集群性能的最佳实践
ELK 性能(4) - 大规模 Elasticsearch 集群性能的最佳实践 介绍 集群规模 集群数:6 整体集群规模: 300 Elasticsearch 实例 141 物理服务器 4200 CP ...
- ELK 性能(3) — 在 Docker 上运行高性能容错的 Elasticsearch 集群
ELK 性能(3) - 在 Docker 上运行高性能容错的 Elasticsearch 集群 介绍 在 Docker 上运行高性能容错的 Elasticsearch 集群 内容 通常熟悉的开发流程是 ...
- 大流量下的 ElasticSearch 搜索演进
这是泥瓦匠(bysocket.com)的第27篇精华分享 ES (ElasticSearch)是分布式搜索引擎.引擎太晦涩,其实类似一个 MySQL ,一个存储.方便提供下面功能: 近实时搜索 全文检 ...
- Elasticsearch学习总结 (Centos7下Elasticsearch集群部署记录)
一. ElasticSearch简单介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticse ...
- 【ELK】【docker】6.Elasticsearch 集群启动多节点 + 解决ES节点集群状态为yellow
本章其实是ELK第二章的插入章节. 本章ES集群的多节点是docker启动在同一个虚拟机上 ====================================================== ...
- linux下配置tomcat集群的负载均衡
linux下配置tomcat集群的负载均衡 一.首先了解下与集群相关的几个概念集群:集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台.在客户端看来,一个集群就象是一个服 ...
随机推荐
- Redis系列九:redis集群高可用
Redis集群的概念: RedisCluster是redis的分布式解决方案,在3.0版本后推出的方案,有效地解决了Redis分布式的需求,当一个服务挂了可以快速的切换到另外一个服务,当遇到单机内存. ...
- OpenCV——图像的深度与通道数讲解
矩阵数据类型: – CV_(S|U|F)C S = 符号整型 U = 无符号整型 F = 浮点型 E.g.: CV_8UC1 是指一个8位无符号整型单通道矩阵, CV_32FC2是指一个32位浮点型双 ...
- 几个简单易懂的排序算法php
几个简单易懂的排序算法.排序算法,在应用到解决实际问题的时候(由于不一定总是数字排序),重点要分析出什么时候该交换位置. <?php // 冒泡排序 function bubble_sort(a ...
- Linux 网络监控工具 ss
ss命令用来显示处于活动状态的套接字信息.功能和netstat类似,但比netstat更快更高效. ss -h Usage: ss [ OPTIONS ] ss [ OPTIONS ] [ FILTE ...
- 使用Fortify进行代码静态分析(系列文章)
BUG级别:低 Code Correctness(代码正确性) 1.Class does not Implement Equals(类未能实现Equals方法) Dead Code(死亡代码) 1.U ...
- Dynamics 365 支持使用Web Api 通过名称来检索元数据
关键检索元数据我在之前的一篇博文中稍有提及,当时是为了取实体的picklist字段的属性,但当时的版本只支持通过metadataid检索,而在365中又增加了名称的检索,方便了很多. 本篇依旧用之前博 ...
- 阿里云Redis外网转发访问
1.前提条件 如果您需要从本地 PC 端访问 Redis 实例进行数据操作,可以通过在 ECS 上配置端口映射或者端口转发实现.但必须符合以下前提条件: 若 Redis 实例属于专有网络(VPC),E ...
- libgdx学习记录17——照相机Camera
照相机在libgdx中的地位举足轻重,贯穿于整个游戏开发过程的始终.一般我们都通过Stage封装而间接使用Camera,同时我们也可以单独使用Camera以完成背景的移动.元素的放大.旋转等操作. C ...
- Ing_制作在线QQ
制作在线QQ的具体步骤 1.首先登录到http://is.qq.com/webpresence/code.shtml 网站2.选择风格3.填写相关数据4.生成网页代码5.复制代码到“写字板”,另存文件 ...
- VS2010带不出System.Data.OracleClient这个引用的解决方案
在使用VS2010的时候有时会带不出System.Data.OracleClient这个引用,可以使用以下解决方法: 右击项目的属性,在弹出窗口中有一个“目标框架”下拉框选项,默认会是.NET FRA ...

