概念理解
node(节点)
: 节点,即1个服务器实例cluster(集群)
: 多个相同集群名的节点的集合index(索引)
: 类似数据库type(类型)
: 类似数据表shard(数据分片)
:- 每个index划分为多个分片,分片按类型可划分为
主分片(primary)
和副本分片(replica)
,通常说shard指的是primary shard。 - 主分片存储索引数据;副本分片主分片的备份存储主分片数,即副本分片起冗余和提供读性能的作用据(类似主从)。
- 主分片与其对应的副本分片不会出现在同一个节点上。集群节点为1时默认一个index含5个主数据分片及1个副本分片(只有一个节点,但是不会分配,冗余没用);集群节点大于1时一个主分片对应一个副本分片。
- 当向索引插入数据时,ES会自动判定应该记录到哪个主分片。
- 同一个index的不同分片会分布于集群的不同node中。
- 每个index划分为多个分片,分片按类型可划分为
document(文档)
: 类似一条数据,document由多个field构成document type(文档类型)
: 类似数据的类型。一个index可能有多种document type。field(字段)
: 类似columnmapping(映射)
: 存储field的映射信息
示例: primary shard(1,2..,5)和 replica(1R,2R…5R)
======初始=============
Node1: 1 2 3 4R 5R
Node2: 1R 2R 3R 4 5
======Node2挂掉=========>
//即使Node2挂掉,Node1仍然有全部的索引数据,与此同时replica会自动升级为primary
Node1: 1 2 3 4 5Node2: 1R 2R 3R 4 5
======Node2修复==========>
//Node2修复好,集群分片重新分配
Node1: 1R R 3 4 5R
Node2: 1 2 3R 4R 5
参考文档:
Shards and replicas in Elasticsearch
常用命令
|
|
elasticsearch
索引
设置
|
|
映射(mapping)
|
|
类型
复杂类型 官方文档
array
object
在es中其实没有明确的array类型,每个字段都可以包含多个同类型的值,比如
[“one”,”two”][1,2,3]
[{“name”:”xiaoming”,”age”:18},{“name”:”xiaohong”,”age”:20}]
索引一旦创建,只可以加字段映射及修改一些搜索字段映射信息
示例
修改映射模板信息
|
|
修改配置模板信息
|
|
集群
集群配置
es配置
|
|
jvm配置
|
|
命令
|
|
性能优化
启动
|
|
分片
该接口对于调查”为什么切片没有分配或还没被移动/平衡至其他结点”很有帮助
对于未分配的分片,该接口会给出为什么分片没有被分配
对于已分配的分片,接口会给出解释为什么分片还在这个node上,而不是移动或重新平衡到其他结点
使用explain接口获取分片情况的解释
GET /_cluster/allocation/explain
7.0临时笔记
|
|
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11:9300
123456789101112131415
基于文件的种子主机提供者 https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-discovery-hosts-providers.html#built-in-hosts-providersdiscovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodesdocker run -d --name elasticsearch --net aa -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.2.0//cat命令//查看所有可以cat的命令http://10.75.30.125:9200/_cat
=^.^=
/_cat/repositories
/_cat/plugins
/_cat/allocation
/_cat/count
/_cat/count/{index}
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/health
/_cat/nodeattrs
/_cat/recovery
/_cat/recovery/{index}
/_cat/indices
/_cat/indices/{index}
/_cat/snapshots/{repository}
/_cat/tasks
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/shards
/_cat/shards/{index}
/_cat/nodes
/_cat/master
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/segments
/_cat/segments/{index}
/_cat/templates
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.75.30.40 23 100 28 12.91 14.71 17.65 mdi * node-10.75.30.40
10.75.32.232 70 100 2 0.89 0.83 0.58 mdi - node-10.75.32.232
10.75.30.125 51 100 32 2.25 2.46 2.25 mdi - mynode-10.75.30.125
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1561710195 08:23:15 elasticsearch yellow 3 3 2216 1176 0 3 118 0 - 94.8%
FAQ
1. logstash出现number_format_exception
的错误信息
查看索引的mapping后 发现mapping中字段类型是long,但是插入的数据类型是字符串,于是导致插入失败
解决方法有两种
1.数据插入时转换字段值为字符串
2.使用映射模板指定字段类型
2. es集群中有一台机器正常运行,但是却没有分配任何分片
cluster.routing.allocation.disk.watermark.low
控制低水平的磁盘使用。它默认为 85% ,这意味着 ES 不会在节点使用超过 85% 的磁盘时将新的分片分配给节点。如果小于配置的可用空间,它也可以设置为绝对字节值 ( 如 500mb ),以防止 ES 分配分片。
cluster.routing.allocation.disk.watermark.high
控制高水印。它默认为 90%,意味着如果节点磁盘使用率高于 90% ,ES 将尝试将分片重新定位到另一个节点。它也可以设置为一个绝对字节值 ( 类似 low watermark ) ,以便将分片重定位一次小于节点上配置的空间量。
调整水位线配置后恢复正常
cluster.routing.allocation.disk.watermark.low: 100gb
cluster.routing.allocation.disk.watermark.high: 50gb
参考文档
Shards and replicas in Elasticsearch
ElasticSearch单机双实例的配置方法
启动检查报错
|
|
解决方法:
https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html
|
|