elasticsearch 冷热分离集群搭建——筑梦之路

冷热分离架构介绍

冷热分离是目前ES非常火的一个架构,它充分的利用的集群机器的优劣来实现资源的调度分配。ES集群的索引写入及查询速度主要依赖于磁盘的IO速度,冷热数据分离的关键点为使用固态磁盘存储数据。若全部使用固态,成本过高,且存放冷数据较为浪费,因而使用普通机械磁盘与固态磁盘混搭,可做到资源充分利用,性能大幅提升的目标。因此我们可以将实时数据(5天内)存储到热节点中,历史数据(5天前)的存储到冷节点中,并且可以利用ES自身的特性,根据时间将热节点的数据迁移到冷节点中,这里因为我们是按天建立索引库,因此数据迁移会更加的方便。

elasticsearch 冷热分离集群搭建——筑梦之路_第1张图片

案例:

使用冷热分离的时候,我们需要将索引库建立在热节点中,等到一定的时间时间在将该索引库迁移冷节点中。因此这里我们需要更加热节点的量来进行设置分片数。
比如,我们拥有6个热节点,9个冷节点,索引库的主分片的数据量500G左右,那么该索引库建立18个分片并且都在在热节点中,此时该索引库的分片的分布是,热节点:18,冷节点0;等到该数据不是热数据之后,将该索引库的分片全部迁移到冷节点中,索引库的分片的分布是, 热节点:0,冷节点18。

ElasticSearch冷热分离架构实现

 ElasticSearch冷热分离架构是一种思想,其实现原理是使用ElasticSearch的路由完成,在data节点(master data两种类型的节点)设置对应的路由,然后在创建索引库时指定分布到那些服务器,过一段时间之后,根据业务要求在将这些索引库的数据进行迁移到其他data节点中

节点名称

节点端口映射

(宿主机:容器)

标签

 备注

es01

9200:9200

9300:9300

hot
es02

9201:9200

9301:9300

hot
es03

9202:9200

9302:9300

hot
es04

9203:9200

9303:9300

cold
es05

9204:9200

9304:9300

cold
es06

9205:9200

9305:9300

cold
kibana 5601:5601 图形化管理工具
cerebro 9000:9000 监控工具
eshead 9100:9100 eshead工具

#docker-compose.yml

version: '3.7'
services:
  es01:
    image: elasticsearch:7.17.3-ik
    container_name: es01
    #restart: always
    environment:
      - node.name=es01
      - network.publish_host=es01
      - cluster.name=es-docker-cluster
      - cluster.initial_master_nodes=es01,es02,es03,es04,es05,es06
      - "discovery.seed_hosts=es02,es03,es04,es05,es06"
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms256M -Xmx256M"
      - node.attr.box_type=hot
    ulimits:
      nproc: 65535
      memlock:
        soft: -1
        hard: -1
    volumes: 
      - /data/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /data/es1:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
      - 9300:9300
 
  es02:
    image: elasticsearch:7.17.3-ik
    container_name: es02
    #restart: always
    environment:
      - node.name=es02
      - network.publish_host=es02
      - cluster.name=es-docker-cluster
      - cluster.initial_master_nodes=es01,es02,es03,es04,es05,es06
      - "discovery.seed_hosts=es01,es03,es04,es05,es06"
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms256M -Xmx256M"
      - node.attr.box_type=hot
    ulimits:
      nproc: 65535
      memlock:
        soft: -1
        hard: -1
    volumes: 
      - /data/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /data/es2:/usr/share/elasticsearch/data
    ports:
      - 9201:9200
      - 9301:9300
 
  es03:
    image: elasticsearch:7.17.3-ik
    container_name: es03
    #restart: always
    environment:
      - node.name=es03
      - network.publish_host=es03
      - cluster.name=es-docker-cluster
      - cluster.initial_master_nodes=es01,es02,es03,es04,es05,es06
      - "discovery.seed_hosts=es01,es02,es04,es05,es06"
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms256M -Xmx256M" 
      - node.attr.box_type=hot
    ulimits:
      nproc: 65535
      memlock:
        soft: -1
        hard: -1
    volumes: 
      - /data/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /data/es3:/usr/share/elasticsearch/data
    ports:
      - 9202:9200
      - 9302:9300
 
  es04:
    image: elasticsearch:7.17.3-ik
    container_name: es04
    #restart: always
    environment:
      - node.name=es04
      - network.publish_host=es04
      - cluster.name=es-docker-cluster
      - cluster.initial_master_nodes=es01,es02,es03,es04,es05,es06
      - "discovery.seed_hosts=es01,es02,es03,es05,es06"
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms256M -Xmx256M"
      - node.attr.box_type=cold
    ulimits:
      nproc: 65535
      memlock:
        soft: -1
        hard: -1
    volumes: 
      - /data/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /data/es4:/usr/share/elasticsearch/data
    ports:
      - 9203:9200
      - 9303:9300

  es05:
    image: elasticsearch:7.17.3-ik
    container_name: es05
    #restart: always
    environment:
      - node.name=es05
      - network.publish_host=es05
      - cluster.name=es-docker-cluster
      - cluster.initial_master_nodes=es01,es02,es03,es04,es05,es06
      - "discovery.seed_hosts=es01,es02,es04,es03,es06"
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms256M -Xmx256M"
      - node.attr.box_type=cold
    ulimits:
      nproc: 65535
      memlock:
        soft: -1
        hard: -1
    volumes: 
      - /data/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /data/es5:/usr/share/elasticsearch/data
    ports:
      - 9204:9200
      - 9304:9300

  es06:
    image: elasticsearch:7.17.3-ik
    container_name: es06
    environment:
      - node.name=es06
      - cluster.initial_master_nodes=es01,es02,es03,es04,es05,es06
      - "discovery.seed_hosts=es01,es02,es04,es03,es05"
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms256M -Xmx256M"
      - node.attr.box_type=cold
    ulimits:
      nproc: 65535
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /data/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /data/es6:/usr/share/elasticsearch/data
    ports:
      - 9205:9200
      - 9305:9300

  kibana:
    image: kibana:7.17.3
    container_name: kibana
    #restart: always
    environment:
      - SERVER_NAME=192.168.80.100
      - I18N_LOCALE=zh-CN
    ports:
      - 5601:5601
    ulimits:
      nproc: 65535
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /data/config/kibana.yml:/usr/share/kibana/config/kibana.yml
  
  eshead:    
    image: mobz/elasticsearch-head:5-alpine
    container_name: eshead
    ports:
      - 9100:9100

  cerebro:
    image: lmenezes/cerebro:latest
    container_name: cerebro
    ports:
        - 9000:9000
    command:
        - -Dhosts.0.host=http://es01:9200

#elasticsearch.yml 配置文件

cluster.name: "es-docker-cluster"
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.minimum_master_nodes: 3
node.max_local_storage_nodes: 5


#kibana.yml配置文件

server.host: "0.0.0.0"
server.shutdownTimeout: "10s"
elasticsearch.hosts: ["http://192.168.80.100:9200","http://192.168.80.100:9201"]
monitoring.ui.container.elasticsearch.enabled: true

#创建目录
mkidr -p /data/config /data/es{1..6}

chmod -R 777 /data/es* /data/config

启动集群

#启动es集群验证
docker-compose up -d

#查看所有输出日志
docker-compose logs -f

#查看指定容器的日志
docker-compose logs -f es03

#查看集群状态

curl -XGET http://192.168.80.100:9200/_cluster/health

curl -XGET http://192.168.80.100:9200/_cat/health

#查看集群节点冷热分布
curl -XGET http://192.168.80.100:9200/_cat/nodeattrs

#查看集群节点状态
curl -XGET http://192.168.80.100:9200/_cat/nodes

#查看所有索引
curl -XGET http://192.168.80.100:9200/ _cat/indices?pertty

#防火墙端口开发
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9100/tcp --permanent
firewall-cmd --zone=public --add-port=9200-9205/tcp --permanent
firewall-cmd --zone=public --add-port=9300-9305/tcp --permanent
firewall-cmd --reload

#web访问监控
http://192.168.80.100:9000

#web访问head工具
http://192.168.80.100:9100

#谷歌浏览器插件elasticsearch-head比较好用,可自行去谷歌的应用商店添加扩展

elasticsearch 冷热分离集群搭建——筑梦之路_第2张图片 

elasticsearch 冷热分离集群搭建——筑梦之路_第3张图片 

 

 

docker镜像【已添加中文分词插件】:es:7.17.3-ik.tar.gz-Java文档类资源-CSDN下载

--------------------------------------------------------------------------------------------------------------------------------

对Elasticsearch生命周期的思考 - 走看看

学习一下这篇博客

生命周期

配置索引生命周期管理(ILM)策略,以根据您的性能、弹性和保留需求自动管理索引。比如当索引达到一定大小或文档数量时,旋转新索引,每天、每周或每月创建一个新索引,并归档以前的索引,删除过时的索引以执行数据保留标准。可以通过API配置和kibana配置进行生命周期的管理。

ES索引生命周期管理分为4个阶段:hot、warm、cold、delete,其中hot主要负责对索引进行rollover操作,warm、cold、delete分别对rollover后的数据进一步处理(前提是配置了hot)

elasticsearch 冷热分离集群搭建——筑梦之路_第4张图片

那这些索引是根据什么条件去从一个阶段转到另一个阶段的呢?比如可以根据时间呀,文档数据呀,索引大小呀作为判断条件转到下一个阶段。

1、当索引达到50GB时,将鼠标移至新索引。
2、将旧索引移至热阶段,将其标记为只读,然后将其缩小为单个碎片。
3、7天后,将索引移至冷阶段,然后将其移至较便宜的硬件上。
4、达到所需的30天保留期后,删除索引

那我们在索引的每一个阶段可以做什么样的操作呢,比如增加索引的设置,修改副本数量等

elasticsearch 冷热分离集群搭建——筑梦之路_第5张图片

 我们知道索引生命的周期的阶段,也知道根据什么条件从一个周期跳转到另一个阶段,也知道在每一个阶段可以做什么操作了,那么就成了呀,更具自己的业务场景设计索引的生命周期吧!!!接下来就看看什么实用呢?

Configure a lifecycle policy | Elasticsearch Guide [7.17] | Elastic

Tutorial: Automate rollover with ILM | Elasticsearch Guide [7.17] | Elastic

elasticsearch 冷热分离集群搭建——筑梦之路_第6张图片

摘抄的博客部分原文

--------------------------------------------------------------------------------------------------------------------------------

参考资料:

ILM: Manage the index lifecycle | Elasticsearch Guide [7.17] | Elastic

Index lifecycle actions | Elasticsearch Guide [7.17] | Elastic

你可能感兴趣的:(linux系统运维,数据库技术,虚拟化,elasticsearch,big,data,分布式)