资讯专栏INFORMATION COLUMN

ES冷热架构

IT那活儿 / 3026人阅读
ES冷热架构

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!



冷热架构介绍
为了保证Elasticsearch的读写性能,官方建议磁盘使用SSD固态硬盘。
然而Elasticsearch要解决的是海量数据的存储和检索问题,海量的数据就意味需要大量的存储空间,如果都使用SSD固态硬盘成本将成为一个很大的问题,这也是制约许多企业和个人使用Elasticsearch的因素之一。为了解决这个问题,Elasticsearch冷热分离架构应运而生。
冷热架构是一项十分强大的功能,能够让将 Elasticsearch 部署划分为“热”数据节点和“冷”数据节点。
热数据节点处理所有新输入的数据,并且存储速度也较快,以便确保快速地采集和检索数据。
冷节点的存储密度则较大,如需在较长保留期限内保留日志数据,不失为一种具有成本效益的方法。
将这两种类型的数据节点结合到一起后,便能够有效地处理输入数据,并将其用于查询,同时还能在节省成本的前提下在较长时间内保留数据。此架构对日志用例来说尤其大有帮助,因为在日志用例中,人们的大部分精力都会专注于近期的日志(例如最近两周),而较早的日志(由于合规性或者其他原因仍需要保留)则可以接受较慢的查询时间。

冷热架构架构图



典型应用场景
一句话:在成本有限的前提下,让客户关注的实时数据和历史数据硬件隔离,最大化解决客户反应的响应时间慢的问题。
业务场景描述:
每日增量6TB日志数据,高峰时段写入及查询频率都较高,集群压力较大,查询ES时,常出现查询缓慢问题。
ES集群的索引写入及查询速度主要依赖于磁盘的IO速度,冷热数据分离的关键为使用SSD磁盘存储热数据,提升查询效率。
若全部使用SSD,成本过高,且存放冷数据较为浪费,因而使用普通SATA磁盘与SSD磁盘混搭,可做到资源充分利用,性能大幅提升的目标。



测试环境配置





冷热分离架构实现
ElasticSearch冷热分离架构是一种思想,其实现原理是使用ElasticSearch的路由完成,在data节点设置对应的路由,然后在创建索引库时指定分布到那些服务器,过一段时间之后,根据业务要求在将这些索引库的数据进行迁移到其他data节点中。
--hot节点参数配置:
cluster.name : es-cluster
node.name : es01
node.master : true
node.data : true
network.host : 192.168.43.137
transport.tcp.port : 9300
http.port : 9200
http.cors.enabled : true
http.cors.allow-origin : "*"
bootstrap.memory_lock : true
path.data : /home/elasticsearch/data
path.logs : /home/elasticsearch/logs
discovery.zen.ping.unicast.hosts : ["192.168.43.137:9300","192.168.43.137:9301", "192.168.43.138:9300", "192.168.43.139:9300", "192.148.43.140:9300"]
discovery.zen.minimum_master_nodes : 1
xpack.security.enabled : true
xpack.security.transport.ssl.enabled : true
xpack.security.transport.ssl.verification_mode: certificate
xpack.ssl.key: elasticsearch-6.8.2/elasticsearch-6.8.2.key
xpack.ssl.certificate: elasticsearch-6.8.2/elasticsearch-6.8.2.crt
xpack.ssl.certificate_authorities: ca/ca.crt
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
node.attr.box_type: hot


cluster.name : es-cluster
node.name : es02
node.master : false
node.data : true
network.host : 192.168.43.138
transport.tcp.port : 9300
http.port : 9200
http.cors.enabled : true
http.cors.allow-origin : "*"
bootstrap.memory_lock : true
path.data : /home/elasticsearch/data
path.logs : /home/elasticsearch/logs
discovery.zen.ping.unicast.hosts : ["192.168.43.137:9300","192.168.43.137:9301", "192.168.43.138:9300", "192.168.43.139:9300", "192.148.43.140:9300"]
discovery.zen.minimum_master_nodes : 1
xpack.security.enabled : true
xpack.security.transport.ssl.enabled : true
xpack.security.transport.ssl.verification_mode: certificate
xpack.ssl.key: elasticsearch-6.8.2/elasticsearch-6.8.2.key
xpack.ssl.certificate: elasticsearch-6.8.2/elasticsearch-6.8.2.crt
xpack.ssl.certificate_authorities: ca/ca.crt
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
node.attr.box_type: hot


cluster.name : es-cluster
node.name : node-2021070702
node.master : false
node.data : true
network.host : 192.168.43.137
transport.tcp.port : 9300
http.port : 9200
http.cors.enabled : true
http.cors.allow-origin : "*"
bootstrap.memory_lock : true
discovery.zen.ping.unicast.hosts : ["192.168.43.137:9300","192.168.43.137:9301", "192.168.43.138:9300", "192.168.43.139:9300", "192.148.43.140:9300"]
discovery.zen.minimum_master_nodes : 1
xpack.security.enabled : true
xpack.security.transport.ssl.enabled : true
xpack.security.transport.ssl.verification_mode: certificate
xpack.ssl.key: elasticsearch-6.8.2/elasticsearch-6.8.2.key
xpack.ssl.certificate: elasticsearch-6.8.2/elasticsearch-6.8.2.crt
xpack.ssl.certificate_authorities: ca/ca.crt
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
node.attr.box_type: hot


cluster.name : es-cluster
node.name : es03
node.master : false
node.data : true
network.host : 192.168.43.139
transport.tcp.port : 9300
http.port : 9200
http.cors.enabled : true
http.cors.allow-origin : "*"
bootstrap.memory_lock : true
path.data : /home/elasticsearch/data
path.logs : /home/elasticsearch/logs
discovery.zen.ping.unicast.hosts : ["192.168.43.137:9300","192.168.43.137:9301", "192.168.43.138:9300", "192.168.43.139:9300", "192.148.43.140:9300"]
discovery.zen.minimum_master_nodes : 1
xpack.security.enabled : true
xpack.security.transport.ssl.enabled : true
xpack.security.transport.ssl.verification_mode: certificate
xpack.ssl.key: elasticsearch-6.8.2/elasticsearch-6.8.2.key
xpack.ssl.certificate: elasticsearch-6.8.2/elasticsearch-6.8.2.crt
xpack.ssl.certificate_authorities: ca/ca.crt
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
node.attr.box_type: cold
--cold节点参数配置:
cluster.name : es-cluster
node.name : es04
node.master : false
node.data : true
network.host : 192.168.43.140
transport.tcp.port : 9300
http.port : 9200
http.cors.enabled : true
http.cors.allow-origin : "*"
bootstrap.memory_lock : true
path.data : /home/elasticsearch/data
path.logs : /home/elasticsearch/logs
discovery.zen.ping.unicast.hosts:["192.168.43.137:9300","192.168.43.137:9301","192.168.43.138:9300", "192.168.43.139:9300", "192.148.43.140:9300"]
discovery.zen.minimum_master_nodes : 1
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.ssl.key: elasticsearch-6.8.2/elasticsearch-6.8.2.key
xpack.ssl.certificate: elasticsearch-6.8.2/elasticsearch-6.8.2.crt
xpack.ssl.certificate_authorities: ca/ca.crt
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
node.attr.box_type: cold




索引库设置
在创建索引库的时候需要指定默认索引库的分片归属,如果没有指定,就会根据ElasticSearch默认进行均匀分布。这里我们将索引库默认创建到hot节点中,满足业务条件之后在使用命令或代码将该索引库设置到冷节点中。
索引示例:
创建索引test_20220125,主分片数5,副本数1,索引刷新时间10s,索引存放至hot节点。
curl -XPUT -H "Content-Type: application/json" http://elastic:qwer123@192.168.43.138:9200/test_20220125 -d
{
  "index":"test_20220125",
  "settings": {
    "number_of_shards" :5,
    "number_of_replicas" : 1,
    "refresh_interval" : "10s",
    "index.routing.allocation.require.box_type":"hot"
  }
}
查看此时该索引的分片分布情况,分片全部分布在hot节点上。
向索引test_20220125中插入数据:
curl -H "Content-Type: application/json" -XPOST -u elastic:qwer123 -s http://192.168.43.139:9200/test_20220125/_doc -d 
{
"name":"dd",
"age":"23",
"profession":"dd"
}
查询索引test_20220125数据:
curl -H "Content-Type: application/json" -XGET -u elastic:qwer123 -s http://192.168.43.138:9200/test_20220125/_search?pretty -d
{
"size" : 1
}



将该索引迁移至cold节点:
curl -XPUT -H "Content-Type: application/json" http://elastic:qwer123@192.168.43.138:9200/test_20220125/_settings -d
{
"index.routing.allocation.require.box_type":"cold"
}
查看此时该索引的分片分布情况,分片全部迁移至cold节点上。
测试此时索引test_20220125是否正常,可以看到索引已正常迁移至cold节点,索引可正常查询写入。
插入一条数据:
curl -H "Content-Type: application/json" -XPOST -u elastic:qwer123 -s http://192.168.43.139:9200/test_20220125/_doc -d 
{
"name":"cc",
"age":"26",
"profession":"cc"
}
查看索引数据:
curl -H "Content-Type: application/json" -XGET -u elastic:qwer123 -s http://192.168.43.138:9200/test_20220125/_search?pretty -d
{
"size" : 2
}


本文作者:刘能

本文来源:IT那活儿(上海新炬王翦团队)


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129559.html

相关文章

  • ES分布式架构及底层原理

    摘要:分布式架构原理设计的理念就是分布式搜索引擎,底层实现还是基于的,核心思想是在多态机器上启动多个进程实例,组成一个集群。 es分布式架构原理 elasticsearch设计的理念就是分布式搜索引擎,底层实现还是基于Lucene的,核心思想是在多态机器上启动多个es进程实例,组成一个es集群。一下是es的几个概念: 接近实时es是一个接近实时的搜索平台,这就意味着,从索引一个文档直到文档...

    Ocean 评论0 收藏0
  • 马蜂窝大交通业务监控报警系统架构设计与实现

    摘要:为了让大交通下的各业务线都能够通过报警尽早发现问题解决问题,进而提升业务系统的服务质量,我们决定构建统一的监控报警系统。本文主要介绍马蜂窝大交通业务监控报警系统的定位整体架构设计,以及我们在落地实践过程中的一些踩坑经验。 部门的业务线越来越多,任何一个线上运行的应用,都可能因为各种各样的原因出现问题:比如业务层面,订单量比上周减少了,流量突然下降了;技术层面的问题,系统出现 ERROR...

    smartlion 评论0 收藏0
  • 一条数据的漫游奇遇记

    摘要:基本逻辑一条数据在结构中的旅程,从写入开始,然后进入,这是整个生命周期的第一处落脚点。每一层数据按排序,层与层之间的会交叠。上面是宏观逻辑结构,如果具体来论读写操作和如何进行,就需要探讨每一层的数据组织方式每个变种的实现各不相同。 阿里妹导读:数据库存储引擎是一个有历史的技术,经过数十年的发展,已经出现很多优秀成熟的产品。阿里巴巴 X-Engine 团队撰写的论文 X-Engine:...

    Godtoy 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<