SpringCloud(十一)ES 进阶 -- ES集群

单机的elasticsearch做数据存储,必然面临两个问题:海量数据存储问题、单点故障问题。

解决方案:

海量数据存储问题:将索引库从逻辑上拆分为N个分片,存储到多个节点。

单点故障问题:将分片数据在不同节点备份。(这样有一个点挂掉,还能保证数据是完整的,如图:比如说node1挂掉了,node1的主数据shard-0在node2上有备份数据,shard-0,shard-1,shard-2组合起来还是完整的数据。)

 

ES集群搭建方法:链接:https://pan.baidu.com/s/1kdJmUz2R5oxSuEihih1Bzw 提取码:73zy

备注:

1、集群名称一样,ES会自动把它们组成集群

2、集群中另两个点的IP地址,正常的话写ip地址(安装教程中用的是docker在一个虚拟机上,所以直接写的节点名称)

3、初始化主节点,候选主节点

4、最小内存,最大内存都配置成了512MB

5、数据卷地址

6、端口映射

 

 

集群状态监控

推荐使用cerebro来监控es集群状态,官方网址:https://github.com/lmenezes/cerebro

cerebro-0.9.4.zip  下载链接:https://pan.baidu.com/s/1Y7oy-8b5Kf0aees24ueURg 提取码:bol3

 

 

 

 

ES集群的分布式存储

version: '2.2'
services:
  es01:
    image: elasticsearch:7.12.1
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: elasticsearch:7.12.1
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - data02:/usr/share/elasticsearch/data
    ports:
      - 9201:9200
    networks:
      - elastic
  es03:
    image: elasticsearch:7.12.1
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic
    ports:
      - 9202:9200
volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local

networks:
  elastic:
    driver: bridge
搭建ES的docker-compose上面有完整的搭建教程

教程中部署ES集群时创建了三个ES,es-01 端口 9200 、es-02 端口 9201 、es-03 端口 9202 

利用kibana在9200插入3条文档,再用kibana查询所有文档信息

查询9200、9201、9202的所有文档信息时会发现在三个端口查询都会查到这三条数据(三个ES查询共享数据)

那插入的三条文档到底存在哪个es里了呢? 在参数中加一个 explain:true, 可显示文档在哪个es分片中

 

ES集群的分布式存储工作流程

 

 

ES集群的分布式查询流程

 

 

 

ES集群的故障转移(ES集群会自动处理)

当某个节点挂掉时(这里举例node1主节点挂掉了)

 当node1节点恢复正常以后,主节点会监控到分片的状态,数据又会迁移会去,但是主节点已经变为node2了不会再变回node1。

 

备注docker命令:

停到某个es节点:docker-compose stop es01

启动某个es节点:docker-compose start es01

 

posted @ 2024-04-25 15:21  一介桃白白  阅读(3)  评论(0编辑  收藏  举报