第五章 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.集群节点职责划分


2.集群脑裂问题
默认情况下,每个节点都是master eligible节点,因此一旦master节 点宕机,其它候选节点会选举-个成为主节点。当主节点与其他节点网络故障时,可能发生脑裂问题。
脑裂发生流程:网络阻塞->主节点宕机->选取新主节点->网络恢复->存在多个主节点
避免脑裂:为了避免脑裂,需要选票超过(eligible节点数量+1)/2才能选取为主节点
ES7.0之前,需要修改对应配置(discovery.zen.minimum_master_nodes),ES7.0之后,已成为默认配置
3.主节点的故障转移
集群的master节点会监控集群中的节点状态,如果发现有节点宕机,会立即将宕机节点的分片数据迁移到其它节点,确保数据安全,这个叫做故障转移
六、分布式操作
1.分布式存储


2.分布式查询

