Elastic Stack
1.安装
xxx.xxx.xxx.249 开发
xxx.xxx.xxx.254 测试
xxx.xxx.xxx.100 预发
useradd elasticsearch
passwd elasticsearch
installing Java version 1.8.0_131 or a later version in the Java 8 release series.
vi /home/elasticsearch/ELK/elasticsearch-6.4.0/bin/elasticsearch-env
JAVA_HOME="/home/elasticsearch/jdk1.8"
Elasticsearch.yml
#集群名称(必须一样)
cluster.name: YOU-elasticsearch
#节点名称(必须不一样)
node.name: aplan-node-1
#本机的IP地址
network.host: xxx.xxx.xxx.254
#服务的端口号(在本地配置多个时,请注意修改为不一样的端口)
http.port: 9200
#集群发现IP集合
discovery.zen.ping.unicast.hosts: ["xxx.xxx.xxx.254", "xxx.xxx.xxx.249","xxx.xxx.xxx.100"]
#脑裂
discovery.zen.minimum_master_nodes: 2
#node.attr.rack: r1
#path.data: /path/to/data
#path.logs: /path/to/logs
#bootstrap.memory_lock: true
#gateway.recover_after_nodes: 3
#action.destructive_requires_name: true
nohup /home/elasticsearch/ELK/elasticsearch-6.4.0/bin/elasticsearch 1>/dev/null 2>&1 &
/home/elasticsearch/cerebro-0.8.1/bin/cerebro
JAVA_HOME="/home/elasticsearch/jdk1.8"
[elasticsearch@localhost bin]$ nohup ./cerebro 1>/dev/null 2>&1 &
http:xxx.xxx.xxx.249:9000
2.ElasticSearch
2.1.Document
2.2.倒排索引与分词
2.2.1.倒排索引
2.2.2.分词
Analyze API
安装中文分词器
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.0/elasticsearch-analysis-ik-6.4.0.zip
测试分词的API接口
直接使用指定的analyzer进行测试
POST _analyze
{
"analyzer": "ik_smart",
"text":"相城区黄埭镇欣阳鲜花店"
}
直接使用索引中的字段测试
POST shop_service_pd_20181009/_analyze
{
"field": "shopName",
"text":"相城区黄埭镇欣阳鲜花店"
}
使用自定义分词器进行测试
POST _analyze
{
“tokenizer”:”standard”,
“filter”:[“lowercase”]
“text”:”hello world”
}
2.3.Mapping 索引结构映射
定义字段名,字段类型,倒排索引相关配置,比如是否索引,记录position等
2.3.1.Mapping自动识别
2.3.2.自定义Mapping
2.3.3.Dynamic-template
2.3.4.Index-template索引模板
2.4.Search API
2.4.1.Match查询
GET shop_service_pd_20181009/_search
{
"query":{
"bool":{
"must":{
"match":{
"shopName":{
"query":"相城区 鲜花 花店",
"operator":"or",
"minimum_should_match":"3"
}
}
}
}
}
}
2.4.2.Match-phrase短语查询
2.4.3.Term查询
2.4.4.range-Query
2.4.5.复合查询
GET shop_service_pd_20181009/_search
{
"query":{
"bool":{
"must":[
{
"match": {
"shopName": "一起玩"}},
{
"term": {
dataType": 10}}
],
"must_not":[
{"match-phranse": {"shopName": "一起去哪里"}},
{"range": {“age": {
“gte”:10}}}
]
}
}
}
2.4.6.相关性算分
2.4.7.分页与遍历
2.5.聚合分析
2.5.1.分桶+聚合
Terms:text不能分桶,需要开启通过API 开启”fielddata”:true
Rang
Rang Date
Historgram
Date Historgram
2.5.2.作用范围
POST-filter使用场景,用户根据job类型,输入查询关键字
Global整体和部分的一个对比,Java平均工资和所有doc的平均工资
2.5.3.Pipeline
2.5.4.精准度问题
2.6.分布式特性
2.6.1.构建集群
2.6.2.副本与分片
分片数与(文档到分片的映射算法)相关,分片数一旦确定不能更改
推迟分片分配。为集群里面的所有的索引使用这个参数
PUT /_all/_settings
{
"settings": {
"index.unassigned.node_left.delayed_timeout": "5m"
}
}
至少 8 个节点(数据节点或者 master 节点)之前进行数据恢复
gateway.recover_after_nodes: 8
等待集群至少存在 8 个节点;等待 5 分钟,或者10 个节点上线后,才进行数据恢复,这取决于哪个条件先达到。
gateway.expected_nodes: 10
gateway.recover_after_time: 5m
这三个设置可以在集群重启的时候避免过多的分片交换。这可能会让数据恢复从数个小时缩短为几秒钟。
2.6.3.Share详解
2.7.管理监控
2.7.1.系统配置
1.Disable swapping(禁用交换):
如果内存交换到磁盘上,一个 100 微秒的操作可能变成 10 毫秒
这样可以暂时禁用sudo swapoff –a
如果需要永久禁用,你可能需要修改 /etc/fstab 文件,注释所有含有swap的行
允许JVM 锁住内存,禁止操作系统交换出去。在你的 elasticsearch.yml 文件中,设置如下:bootstrap.mlockall: true
2.File Descriptors(文件描述符):
Lucene 使用了大量的文件。 同时,Elasticsearch 在节点和 HTTP 客户端之间进行通信也使用了大量的套接字(注:sockets)。 所有这一切都需要足够的文件描述符
set ulimit -n 65536 as root before starting Elasticsearch, or set nofile to 65536 in /etc/security/limits.conf
GET _nodes/stats/process?filter_path=**.max_file_descriptors
{
"nodes": {
"-gkyPDf6TimRTpItLKJsJA": {
"process": {
"max_file_descriptors": 65536
}
},
"S1Wq54jXTZO7ONiXJSIulQ": {
"process": {
"max_file_descriptors": 65536