Elasticsearch5.5冷热数据读写分离

前言

冷数据索引:查询频率低,基本无写入,一般为当天或最近2天以前的数据索引

热数据索引:查询频率高,写入压力大,一般为当天数据索引

当前系统日志每日写入量约为6T左右,日志数据供全线业务系统查询使用。

查询问题:

高峰时段写入及查询频率都较高,集群压力较大,查询ES时,常出现查询缓慢问题。

写入问题:

索引峰值写入量约为12w/s,且无副本。加上副本将导致索引写入速度减半、磁盘使用量加倍;不使用副本,若一个节点宕掉,整个集群无法写入,后果严重。

一、冷热数据分离

ES集群的索引写入及查询速度主要依赖于磁盘的IO速度,冷热数据分离的关键为使用SSD磁盘存储数据。

若全部使用SSD,成本过高,且存放冷数据较为浪费,因而使用普通SATA磁盘与SSD磁盘混搭,可做到资源充分利用,性能大幅提升的目标。

几个ES关键配置解读:

节点属性(后续索引及集群路由分布策略均依据此属性)

node.attr.box_type

node.attr.zone

...

elasticsearch.yml中可增加自定义配置,配置前缀为node.attr,后续属性及值可自定义,如:box_type、zone,即为当前es节点增加标签,亦可在启动命令时设置:bin/elasticsearch -d -Enode.attr.box_type=hot

索引路由分布策略

"index.routing.allocation.require.box_type": "hot"

可在索引模板setting中设置,也可通过rest api动态更新。意义为索引依据哪个属性标签,对分片、副本进行路由分布。

如我们对使用SSD作为存储介质的ES节点增加属性标签node.attr.box_type: hot,对其他SATA类ES节点增加属性标签node.attr.box_type: cool,将使当前索引的分片数据都落在SSD上。

后续对其索引配置更新为

"index.routing.allocation.require.box_type": "cool"

将使索引分片从SSD磁盘上路由至SATA磁盘上,达到冷热数据分离的效果。

集群路由分布策略(此策略比索引级路由策略权重高)

目的:不将鸡蛋放进一个篮子中。

"cluster.routing.allocation.awareness.attributes": "box_type"

如上配置,新建索引时,索引分片及副本只会分配到含有node.attr.box_type属性的节点上。(该值可以为多个,如"box_type,zone")

若集群中的节点box_type值只有一个,如只有hot,索引分片及副本会落在hot标签的节点上;若box_type值包括hot、cool,则同一个分片与其副本将尽可能不在相同的box_type节点上。

此种场景使用于:同一个物理机含有多个ES节点,若这多个节点标签相同,使用此路由分布策略将尽可能保证相同物理机上不会存放同一个分片及其副本。

"cluster.routing.allocation.awareness.force.box_type.values": "hot,cool"

强制使分片与副本分离。若只有hot标签的节点,索引只有分片可以写入,副本无法分配;若有hot、cool两种标签节点,相同分片与其副本绝不在相同标签节点上。

二、数据读写分离

几点结论:

若使当天索引及副本都写在SSD磁盘上,SSD磁盘使用量需20T以上,代价可能过高。(读写效率最高,但由于SSD节点肯定较少,读写都在相同节点上,节点压力会非常大)

现有的方式,只使用普通的SATA磁盘存储,代价最低。(读写效率最低,即为当前运行状况)

使用集群路由分配策略,SSD与SATA各存放1份数据,SSD磁盘需分配10T以上。(读写效率折中,均有较大提升)

若使用折中方案,另一个问题考虑:

SSD节点即有读操作,也有写操作,节点较少,压力还是较大,怎么实现mysql的主从模式,达到读写分离的效果?

目标:使主分片分配在SSD磁盘上,副本落在SATA磁盘上,读取时优先从副本中查询数据,SSD节点只负责写入数据。

实现步骤:

修改集群路由分配策略配置

增加集群路由配置

"allocation.awareness.attributes": "box_type",

"allocation.awareness.force.box_type.values": "hot,cool"

提前创建索引

提前创建下一天的索引,索引配置如下(可写入模板中):

PUT log4x_trace_2018_08_11

{

"settings": {

"index.routing.allocation.require.box_type": "hot",

"number_of_replicas": 0

}

}

此操作可使索引所有分片都分配在SSD磁盘中。

修改索引路由分配策略配置

索引创建好后,动态修改索引配置

PUT log4x_trace_2018_08_11/_settings

{

"index.routing.allocation.require.box_type": null,

"number_of_replicas": 1

}

转为冷数据

动态修改索引配置,并取消副本数

PUT log4x_trace_2018_08_11/_settings

{

"index.routing.allocation.require.box_type": "cool",

"number_of_replicas": 0

}

mysql 冷热数据分离_elasticsearch冷热数据读写分离相关推荐

  1. mysql读写分离_Mysql数据库09MySQL读写分离

    Mysql数据库09-MySQL读写分离 一.读写分离应用案例分析 在企业用户中,在大量的数据请求下,单台数据库将无法承担所有读写操作.解决方法:配置多台数据库服务器以实现主从复制+读写分离. 二.读 ...

  2. mysql主从与读写分离_MySQL主从复制与读写分离

    MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中, ...

  3. MySQL使用Mycat实现分库分表-读写分离

    MySQL使用Mycat实现分库分表-读写分离 Mycat Mycat介绍 什么是Mycat? Mycat架构 Mycat核心概念 MyCat主要解决的问题 MyCat对多数据库的支持 Mycat分片 ...

  4. 【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡

    文章目录 一.MHA+ProxySQL架构 二.快速搭建MHA环境 2.1 下载MHA镜像 2.2 编辑yml文件,创建MHA相关容器 2.3 安装docker-compose软件(若已安装,可忽略) ...

  5. MySQL读写分离(二)——Atlas实现读写分离

           [引言]        Atlas是希腊神话被罚作苦役的大力神,在希腊神话中当巨人族首领泰坦反叛奥林匹斯众神战败后支持他的大多数都被打入地狱的黑暗深渊,而Atlas则被罚去西方站在地母盖 ...

  6. jedis 读写分离_Redis实现数据库读写分离

    Redis是一种NoSQL的文档数据库,通过key-value的结构存储在内存中,Redis读的速度是110000次/s,写的速度是81000次/s,性能很高,使用范围也很广. 下面用一个实例实现re ...

  7. mysql防止从节点可写数据_mysql主从复制及mycat读写分离

    登录#.#.190.163的服务器,在服务器上配置: vim /etc/my.cnf [mysqld] 在此添加如下配置,其中163为服务器的ip最后一位 server_id=163 需要复制的数据库 ...

  8. EF通用数据层封装类(支持读写分离,一主多从)

    浅谈orm 记得四年前在学校第一次接触到 Ling to Sql,那时候瞬间发现不用手写sql语句是多么的方便,后面慢慢的接触了许多orm框架,像 EF,Dapper,Hibernate,Servic ...

  9. mysql双机热备 读写分离_MySQL——主从复制与读写分离

    什么是主从复制 主从复制是用来建立一个和主数据库完全一样的数据库环境,称为从数据库:主数据库一般是准实时的业务数据库. 主从复制的作用 1.做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到 ...

最新文章

  1. Apriori算法、FP-Growth算法、顺序分析、PrefixSpan算法
  2. fatal error: Python.h: No such file or directory 解决
  3. Linux-Load Average解析
  4. rabbitmq集群报错
  5. 18春东师计算机应用基础,东师计算机应用基础18春在线作业31.docx
  6. win32汇编指令汇总
  7. 微服务升级_SpringCloud Alibaba工作笔记0005---spring gateway非阻塞异步模型
  8. Spring Session + Redis 实现 Session 共享,附带 Nginx 集群
  9. Java实习 oneday
  10. 遥感数据产品分级体系
  11. 软件测试行业用mac好还是win好,为了在Mac上也能用好Windows,我做了这些调整
  12. 使用虚拟鼠标驱动解决Surface go以及寨板win10 win11 win8平台 甚至win arm手机 在运行某些GalGame 当不插入鼠标或者连接蓝牙鼠标时候出现的错误
  13. 01 - Python 调用outlook发送邮件
  14. 机器学习 ❀ 数据投毒攻击(数据投毒 / 模型投毒) 隐私攻击(数据隐私 / 模型隐私)
  15. ROS错误:摄像头数据格式错误 wants topic /image/compressed to have datatype/md5sum
  16. 项目管理过程之进度控制
  17. 对u盘的分区进行删除和格式化
  18. k8s调度之亲和/反亲和
  19. 目标检测之one-stage和two-stage网络的区别
  20. c罗python可视化分析_梅西、内马尔谁是全能的五边形战士?教你用BI做出可视化能力图...

热门文章

  1. 将assembly包添加到自己的maven仓库
  2. python语言函数库_Python 的标准库,从0到1学Python
  3. vscode开发python使用教程_在VS Code上搭建Python开发环境的方法
  4. 疯狂android讲义(kotlin版) 源码 pan_每周一书《疯狂Python讲义》分享
  5. 申报成功后怎样修改_【小白教程】12月第3期《申报成功后,如何更正,快快收藏!》...
  6. Paddle网络结构中的层和模型
  7. 会开了一天,赛题有结果了吗?
  8. 无电路板的微型电路制作
  9. 智能车竞赛中视觉AI组别的打把问题
  10. 无线电能接收初步测试