Elasticsearch
基础
- Elasticsearch 架构解析与最佳实践
- 不适合作为主存储:可能出现数据丢失和污染、无事务、近实时、吃内存、mapping不能修改
- 分片-主分片,可读可写,数量确定后就不能修改,除非reindex
- 分片-副本分片,只可读,数量可以后期修改
- 节点类型:
- Master Eligible Node,候选主节点
- Data Node,数据节点
- Coordinating Node,协调节点,负责路由转发和查询汇总
- 索引的index,相当于数据库的table
- 索引的mapping,相当于表的schema,定义字段的类型
- 索引的setting,定义不同的数据分布
- 索引的routing,路由键字段,可以指定多个值
安装
- bin/elasticsearch.bat -d -Ecluster.name=geektime -Enode.name=node1 -Epath.data=node1_data -Ehttp.port=9201
- bin/elasticsearch.bat -d -Ecluster.name=geektime -Enode.name=node2 -Epath.data=node2_data -Ehttp.port=9202
- bin/elasticsearch.bat -d -Ecluster.name=geektime -Enode.name=node3 -Epath.data=node3_data -Ehttp.port=9203
_cat 命令
- /_cat/health 查看集群整体状态
- /_cat/nodes?v&s=ip:desc 查看节点(负载信息)
- /_cat/nodes?v&h=name,diskUsed,diskTotal 查看磁盘使用
- /_cat/allocation 查看磁盘使用
- /_cat/shards 查看node下的shard分布
- /_cat/indices 查所有索引
- /_cat/segments/* 查看index内存占用
- /_cat/plugins 查看扩展
- /_cat/count 查看文档总数
监控
- 集群级别:GET /_cluster/health?level=nodes,其中level还可以是indices
- 节点级别:GET /_nodes/stats,如果nodes.节点.fielddata_breaker.tripped值很大或者一直增,说明内存不够经常OOM
- 索引级别:GET /{index_name}/_stats,index_name 可以改成 _all
其他
- 查看模板:GET /_template
- 查看设置项:GET /_all/_settings
- 清理缓存:POST /_cache/clear
- 查看当前的task:GET /_tasks
- 查索引的type和mapping:GET /_mapping
- 查mapping的字段类型:GET ngx-access-mobotoolpush-2018.04.12/_mapping/doc
如何组建集群
- 来自于流行病的Gossip协议
- Elasticsearch集群优化笔记
- 路由形式:单播 vs. 组播(多播) vs. 广播
- 一个新节点会通过组播或者文件配置的方式来发现一些种子节点,通讯后让所有节点都知道自己
如何选举
- Elasticsearch选举流程详解
- Elasticsearch的选举机制
- 选举时机:集群刚建、master失联
- 选举前提:需要是候选主节点、节点数要达到minimum_master_nodes
- 选举流程:以节点A为例,采用Bully算法
- 节点A ping集群所有节点得到activeMasters和masterCandidates
- 在activeMasters中投票id最小的(activeMasters正常集群只会有一个,如果出现了脑裂,则会存在多个)
- 如果activeMasters为空,在masterCandidates中投票(集群状态版本编号最大的,id最小的)
- 投票的节点如果是自己,就广播集群状态,否则就加入集群