elasticsearch 跟关系型数据库 MySQL 的对应角色关系
MySQL ElasticSearch
database index
table type
row document
column field schema mapping
查看当前节点的所有 Index:
curl -X GET '
localhost:9200/_cat/indices?v'
新建 Index:
curl -X PUT 'localhost:9200/index_name'
删除 Index:
curl -X DELETE 'localhost:9200/index_name'
查询所有的 index, type:
curl “localhost:9200/_search?pretty“
查询某个index下所有的type:
curl ‘localhost:9200/index_name/_search‘
每个 Index 所包含的 Type:
curl 'localhost:9200/_mapping?pretty=true'
查询某个index 下, 某个 type下所有的记录:
curl “localhost:9200/index_name/type_name/_search?pretty“
cluster: 集群,一个es集群由多个节点(node)组成,每个集群由cluster name作为集群标识
node:节点,一个es实例是一个node,一个机器有多个实例,所以并不能说一台机器就是一个node,但多数情况下一个node运行在一个独立的环境或虚拟机上
index:数据库
shard:分片,每个index有多个shard,index的数据会被分配到各个shard上(分布式搜索);
shard有助于横向拓展,N个分片会尽可能平均的分配在不同的node上(例如有2个节点,4个主分片(不考虑备份),每个节点会分到2个分片,后来增加了2个节点,那么4个节点都有一个分片,这是es感知后自动完成的relocation过程);
分片是独立的,对于每个search request行为,每个分片都会执行这个request;每个分片都是一个Lucene Index,所以一个分片只能存放integer.Max_Max_value-128=2147483519个docs
replica:复制,可以理解为备份分片,相应的有primary shard(主分片);
主分片和备份分片不会出现在同一个节点上(防止单点故障),默认情况下一个索引创建5个分片一个备份(即5+5);
如果只有一个节点,那么5个备份都无法分配,此时cluster status会变成yellow
replica的作用:1、容灭,primary分片丢失,replica就会顶上去成为新的primary分片,同时分局这个新的主分片创建新的replica;2、提高查询性能,replica分片和primary分片的数据是相同的,所以对于一个Querry既可以查主分片有可以查备分片,在核实范围内多个replica性能会更优(但要考虑资源占用也会提升[CPU、disk、heap]),还有,index request 只能发生在主分片上,replica不能执行。
对于一个索引,出给重建索引,否则不能调整分片的数目,但可以随时调整replica数
es集群状态:
green:所有主分片和备分片都准备就绪(分配成功),即使有一个实例挂了,数据都不会丢失,但会变成yellow状态
yellow:所有主分片就绪,但有一个或多个主分片(假设是A)的备份分片没有就绪,此时集群处于警告状态,意味着集群的高可用和容灾能力下降,如果刚好A所在的节点挂了,并且只设置了一个备份(已处于未就绪状态),那么A的数据就会丢失(查询结果不完整),此时,集群进入red状态
red:至少一个主分片没有就绪(直接原因是没有找到一个对应的备份分片成为新的主分片),此时查找的结果会出现数据丢失(不完整)