1 文章概述
1.1 ES基本概念
(1) 索引(Index)
类比关系型数据库概念:数据库(database)
(2) 类型(Type)
类比关系型数据库概念:表(table),类型这个概念已经逐步被官方弱化,7.X不再支持自定义类型,默认类型是_doc,在类型弱化之后也可以把索引(Index)类比为表
(3) 文档(Document)
类比关系型数据库概念:行(row)
(4) 分片(Shard)
类比于关系型数据库分库后数据分片,当一个索引数据量过大时,可以将一个索引拆分为多个数据集合,每一个数据集合只有一部分数据,这种数据集合称为分片
(5) 副本(Replica)
主分片可以有一个或多个副分片,副本有两个作用:第一可以承担读流量,提高系统吞吐量。第二可以提高可用性,如果主分片出现问题,副分片可以晋升为主分片
(6) 集群(Cluster)
一个节点资源是有限的,当数据量和流量达到超过单节点负载时,可以将多个节点组成一个集群,共同承担流量
1.2 两个问题
根据上述概念提出两个问题:
- 一个集群有三个节点,订单索引有三个分片,每个分片有两个副本,这些分片如何分布在集群
- 当请求访问ES集群,怎么确定数据在哪一个节点,哪一个分片
2 环境搭建
为了回答上述问题我们首先搭建实验环境,本次实验使用windows环境,ES 7.11版本。
2.1 集群搭建
ES官网下载64位版本并分别解压到文件夹:
- es-node-1
- es-node-2
- es-node-3
编辑文件
es-node1/config/elasticsearch.yml
# 集群信息
cluster.name: java-front-cluster
# 节点信息
node.name: es-node-1
node.master: true
node.dat