1、术语解析
1.1、集群术语
1.1.1、集群(Cluster)
集群是由一个或多个节点(服务器)作为一个整体来存储数据,并提供在所有节点联合索引和搜索功能的集合。一个集群是由唯一的一个名称(cluster.name)来确定,默认为elasticsearch,相同集群名称的
节点主机会组成一个集群;在使用过程中,同一网段的多个环境要确保集群名称必须唯一,否则节点会加入到错误的集群当中。
1.1.2、节点(Node)
节点是集群的组成部分,存储数据并参与数据的索引和搜索功能;在集群中,节点通过配置文件中指定的节点名作为标识。
节点通过配置的cluster.name发现并加入集群,启动多个相同cluster.name的节点,假设节点之间可以互相发现,则多个节点将自动组成一个集群;在一个单一的集群中,你可以增加多个节点,如果网络上没
有其他启动的节点,则该节点将作为一个单节点集群。
1.2、存储术语
1.2.1、索引(idnex)
索引是具有类似特征的文档的集合,索引是由一个名字标识(必须是全部小写),该名字用来进行索引、搜索、更新、删除操作指定操作那个索引。在一个集群中,可以根据需求定义多个索引。
ElasticSearch把数据存放到一个或者多个索引(indices)中。索引存放和读取的基本单元是文档(Document)。
1.2.2、类型(type)
在一个索引中,你可以指定多个类型;一个类型为具有一组共同的字段的文档中定义;
每个文档在ElasticSearch中都必须设定它的类型。文档类型使得同一个索引中在存储结构不同文档时,只需要依据文档类型就可以找到对应的参数映射(Mapping)信息,方便文档的存取。
例如:博客平台,可以将所有数据存储在一个索引里面,用户信息、博客信息可以用不通的类型来区分。
1.2.3、文档(document)
在ElasticSearch中,文档(Document)是主要的存在实体。所有的ElasticSearch应用需求到最后都可以统一建模成一个检索模型:检索相关文档。文档(Document)由一个或者多个域(Field)组成,每个域
(Field)由一个域名和一个或者多个值组成(有多个值的值称为多值域(multi-valued))。
在ElasticSeach中,每个文档(Document)都可能会有不同的域(Field)集合;也就是说文档(Document)是没有固定的模式和统一的结构。
1.2.4、分片(shards)
索引可以存储大量数据,可以超过单个节点的硬件限制,即使可以存储在单个节点上,也会导致搜索请求太慢。
为了解决上述问题,Elasticsearch会自动将索引切分为多个分片(shards),当你创建索引时,你可以指定分片数量,每个分片是独立并且全功能的,可以存储在集群中任何数据节点上;散布这些分配的过程叫做分片处理(sharding)
需要分片的原因:
- 允许你水平分割/扩展您的内容量;
- 允许你分发和并行跨分片操作(可能在多个节点),从而提高性能/吞吐量;
分片在集群中的分布及搜索时文档的聚合返回完全由Elasticsearch管理,整个过程对用户透明; 尽管索引分片这个过程是自动的,但是在应用中需要事先调整好参数。因为集群中分片的数量需要在索引创建前配置好,而且服务器启动后是无法修改的,至少目前无法修改。
1.2.5、副本(Replicas)
通过索引分片机制(Sharding)可以向ElasticSearch集群中导入超过单机容量的数据,客户端操作任意一个节点即可实现对集群数据的读写操作。当集群负载增长,用户搜索请求阻塞在单个节点上时,通过索引副本(Replica)机制就可以解决这个问题。
索引副本(Replica)机制的的思路很简单:为索引分片创建一份新的拷贝,它可以像原来的主分片一样处理用户搜索请求。同时也顺便保证了数据的安全性。即使主分片数据丢失(主分片所在主机宕机),ElasticSearch通过索引副本使得数据不丢失。
索引副本可以随时添加或者删除,所以用户可以在需要的时候动态调整其数量。
需要副本的原因:
- 保证了集群的高可用,为此,副本的存储均不会分配在同一个节点上;
- 可以提高搜索量/吞吐量,因为搜索可以并行操作所有副本
2、配置解析
2.1、配置组成部分简介
root@es:~# grep -i "\-\-" /etc/elasticsearch/elasticsearch.yml | awk -F' ' '{print $3}'
Cluster *
Node *
Paths *
Memory
Network *
Discovery *
Various
Security
elasticsearch.yml作为elasticsearch的主配置文件,主要有8部分组成:Cluster、Node、Paths、Memory、Network、Discovery、Gateway、Various。
而我们一般重点关注的是:Cluster、Node、Paths、Network、Discovery 这5项,有时候,我们会关注索引相关的配置,一般会体现在 Various 里面
2.2、详细配置简介
root@es:~# grep -iE "\-\-|^[a-Z]" /etc/elasticsearch/elasticsearch.yml
# ---------------------------------- Cluster -----------------------------------
cluster.name: first.es.com
# ------------------------------------ Node ------------------------------------
node.name: 192.168.10.25
# ----------------------------------- Paths ------------------------------------
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
# ----------------------------------- Memory -----------------------------------
# ---------------------------------- Network -----------------------------------
network.host: 0.0.0.0
http.port: 9200
# --------------------------------- Discovery ----------------------------------
discovery.seed_hosts: ["192.168.10.25", "192.168.10.21"]
cluster.initial_master_nodes: ["192.168.10.25"]
# ---------------------------------- Various -----------------------------------
# ---------------------------------- Security ----------------------------------
http.cors.enabled: true
http.cors.allow-origin: "*"
2.3、分片配置
2.3.1、设置默认分片或副本数量
# 默认情况下,elasticsearch将分片相关的配置从配置文件中的属性移除了,我们可以借助于一个默认的模板接口将索引的分片属性更改成我们想要的分片效果。
curl -XPUT 'http://192.168.10.25:9200/_template/template_http_request_record' -H 'Content-Type: application/json' -d '{"index_patterns": ["*"],"settings": {"number_of_shards": 5,"number_of_replicas": 1}}'
属性解析:
接口地址:_template/template_http_request_record
索引类型:index_patterns
分片数量:number_of_shards
副本数量:number_of_replicas
2.3.2、创建索引
curl -XPUT 192.168.10.25:9200/test_index
2.3.3、查看索引信息
root@es-bak:~# curl -XGET 192.168.10.25:9200/test_index?pretty
{
"test_index" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index" : {
"routing" : {
"allocation" : {
"include" : {
"_tier_preference" : "data_content"
}
}
},
"number_of_shards" : "5", # 这个是就分片数
"provided_name" : "test_index",
"creation_date" : "1686104329756",
"number_of_replicas" : "1",
"uuid" : "goOA-pRESdCLmK7XZdOfYQ",
"version" : {
"created" : "7171099"
}
}
}
}
}
2.3.4、浏览器查看