Skip to content

第五章 ElasticSearch应用 v1.0 ​

一、同步调用 ​

1.示意图 ​

2.优点与问题 ​

优点:实现较为简单

问题:总耗时较高、业务之间耦合度高

二、异步通知 ​

1.示意图 ​

2.优点与问题 ​

优点:耦合度低,性能较高

问题:依赖于MQ的可靠性;引入了中间件,复杂度上升

三、监听binlog ​

1.binlog ​

binlog是MySQL用于记录数据修改的日志文件,文件以二进制格式保存

2.示意图 ​

3.优点与问题 ​

优点:完全不依赖于管理服务,耦合程度最低

问题:需要开启MySQL的binlog功能,对数据库压力较大;要引入新的中间件,实现较为复杂

四、集群搭建 ​

1.单机ES的问题 ​

a.海量数据存储问题 ​

将索引库从逻辑上拆分为N个分片,存储到多个集群节点

b.单点故障问题 ​

将分片数据在不同的备份节点进行备份

2.集群搭建 ​

[Docker Compose 三节点集群配置]
yaml
version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/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
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/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
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/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
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic

volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local

networks:
  elastic:
    driver: bridge

运行:docker-compose up

五、集群职责 ​

1.集群节点职责划分 ​

image.png

image.png

2.集群脑裂问题 ​

默认情况下,每个节点都是master eligible节点,因此一旦master节 点宕机,其它候选节点会选举-个成为主节点。当主节点与其他节点网络故障时,可能发生脑裂问题。

脑裂发生流程:网络阻塞->主节点宕机->选取新主节点->网络恢复->存在多个主节点

避免脑裂:为了避免脑裂,需要选票超过(eligible节点数量+1)/2才能选取为主节点

ES7.0之前,需要修改对应配置(discovery.zen.minimum_master_nodes),ES7.0之后,已成为默认配置

3.主节点的故障转移 ​

集群的master节点会监控集群中的节点状态,如果发现有节点宕机,会立即将宕机节点的分片数据迁移到其它节点,确保数据安全,这个叫做故障转移

六、分布式操作 ​

1.分布式存储 ​

image.png

image.png

2.分布式查询 ​

image.png

image.png