一、安装部署
1.1 安装Elasticsearch
1、下载并解压安装包
# es官网:https://www.elastic.co/cn/downloads/elasticsearch
# 下载
# wget -c https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-linux-x86_64.tar.gz
# 解压
# tar xf elasticsearch-7.4.0-linux-x86_64.tar.gz
2、修改系统文件
# 修改limits.conf文件
# vi /etc/security/limits.conf
work soft nofile 65536
work soft nproc 4096
work hard nofile 131072
work hard nproc 4096
soft nofile 65536
soft nproc 4096
hard nofile 131072
hard nproc 4096
# 修改sysctl.conf文件
# vi /etc/sysctl.conf
vm.max_map_count=655360
# 使配置文件生效
# sysctl -p
3、修改es配置文件
# cd /opt/Elasticsearch7.4/elasticsearch-7.4.0
# vi ./config/elasticsearch.yml
#es集群名
cluster.name: sansi-es
#当前节点名
node.name: node-1
node.attr.rack: r1
#节点数据、日志目录
path.data: /data/es7_1/data
path.logs: /data/es7_1/logs
#开放地址
network.host: 0.0.0.0
#http访问端口,默认9200
http.port: 9200
#集群初始化时master-eligible节点
#本次测试环境只启动了一个node,所以该参数只配置了node-1
cluster.initial_master_nodes: ["node-1"]
4、创建es用户以及目录授权
# useradd es
# password es
# id es
uid=1001(es) gid=1002(es) 组=1002(es)
# 创建es节点对应的数据、日志目录,并进行授权
# mkdir -p /data/es7_1/{data,logs}
# chown -R es:es /data/es7_1/
5、启动es
1)单机单节点启动
es启动使用root用户会报错,必须使用我们之前为es单独创建的用户下启动es程序。
单机单节点启动时,只需要到该es安装目录下直接启动就好,es会根据配置文件启动相应的进程,-d表示后台启动。
# su es
# ./bin/elasticsearch -d
2)单机多节点启动
若开发测试环境需要单机启动多个节点,启动es时特别指定以下具体参数即可
# su es
# ./bin/elasticsearch -E node.name=node-1 -E cluster.name=sansi-es -E path.data=/data/es7_1/data/ -E http.port=9200 -d
# ./bin/elasticsearch -E node.name=node-2 -E cluster.name=sansi-es -E path.data=/data/es7_2/data/ -E http.port=9202 -d
6、检查是否启动成功
1)端口检查
# netstat -tlnp | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 4668/java
2)url访问检查
使用浏览器访问:http://${your_ip}:9200/
获取当前es集群中的节点信息,使用浏览器访问:http://${your_ip}:9200/_cat/nodes
1.2 安装 Kibana
1、下载并解压安装包
#官网:https://www.elastic.co/cn/kibana
#下载:wget -c https://www.elastic.co/cn/downloads/kibana
2、修改kibana配置文件
# cat ./config/kibana.yml | egrep -v "^#|^$"
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://${your_ip}:9200"]
kibana.index: ".kibana"
i18n.locale: "zh-CN"
3、启动kibana
# cd /opt/Elasticsearch7.4/kibana-7.4.0-linux-x86_64
# 安装Sense插件
# ./bin/kibana plugin --install elastic/sense
# 启动kibana
# ./bin/kibana
4、检查是否启动成功
浏览器访问:http://124.70.209.222:5601/app/kibana
二、基本概念
2.1 文档
es是面向文档的,文档是可搜索的最小单位。每个文档以json的格式进行存储,json的对象就是该文档的每个字段。每个字段有各自的数据类型。
每个文档都有一个unique id保证每条文档记录唯一,可自己定义也可以由es自动生成。
GET users/_doc/1 //查看索引内id=1的文档信息
{
"_index" : "users", //索引名称
"_type" : "_doc", //索引类型,7.0以后默认都是_doc
"_id" : "1", //文档id
"_version" : 12, //版本号
"_seq_no" : 28,
"_primary_term" : 1,
"found" : true,
"_source" : { //文档内原始数据
"name" : "aa",
"auto_inc" : "11"
}
}
2.2 索引
索引其实就是文档的一个集合。一个索引主要包含以下几部分信息:
别名 : 索引的别名
mapping : 用来定义包含的文档的字段名和字段类型
setting : 用来定义索引的数据分布(shard,物理空间上的分片)
GET kibana_sample_data_logs //查看索引信息
{
"kibana_sample_data_logs" : {
"aliases" : { }, //别名
"mappings" : { //索引内包含的字段信息,字段名以及对应的数据类型
"properties" : {
"@timestamp" : {
"type" : "alias",
"path" : "timestamp"
},
"agent" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
......
"utc_time" : {
"type" : "date"
}
}
},
"settings" : { //索引的数据分布,分片设置
"index" : {
"number_of_shards" : "1",
"auto_expand_replicas" : "0-1",
"provided_name" : "kibana_sample_data_logs",
"creation_date" : "1595066904424",
"number_of_replicas" : "0",
"uuid" : "hbYnWf1DTF2g15kQpEFXSA",
"version" : {
"created" : "7040099"
}
}
}
}
}
索引相关信息查询的命令:
#_cat indices APi
#查看index
GET /_cat/indices/kibana*?v&s=index
#查看状态为绿色的,以为indices开头的索引
GET /_cat/indices?v&health=green
#按照文档个数排序
GET /_cat/indices?v&s=docs.count:desc
#查看具体字段
GET /_cat/indices/kibana*?pri&v&h=helth,index,pri,rep,docs.count,mt
#索引内存占用
GET /_cat/indices?v&h=i,tm&s=tm:desc
2.3 节点
在es中,每个节点其实本质上就是一个java进程,节点本身也有较多的角色分类,每类节点对应不同的功能与业务场景。生产环境建议1台机器启动一个节点,每台机器的节点仅负责对应的工作,避免多节点之间的资源争用。
每个节点默认就是一个master eligible节点,master-eligible可以参与选主流程,成为master节点。每个节点上都存储了集群的状态信息,只有在master中才能修改集群的状态信息
(node.master=true)
节点/角色 | 介绍 |
---|---|
data node | 负责保存数据的节点,设置node.data=true |
coordinating node | 负责接收客户端请求,并将请求分发到对应的节点,最终汇总数据将接回返回给客户端。每个节点都是一个coordinating node的职责 |
hot node | 存储热数据的节点,查询频繁的数据可以放在hot node上 |
warm node | 其设备相对hot node可以相对较差,主要存储一些历史数据,查询不频繁的数据 |
machine learning node | 负责跑机器学习的job,用来做异常检测。设置node.ml=true, 需要enable x-pack |
get _cat/nodes //查看当前集群的所有节点信息,若加?v表示显示每个字段含义
192.168.0.4 46 90 1 0.00 0.01 0.05 dilm * node-1
GET /_nodes/node-1 //查看指定节点信息
GET /_cat/nodes?v //查看当前集群的所有节点信息
GET /_cat/nodes?v&h=id,ip,port,v,m //查看指定节点的指定信息
2.4 分片
1、主分片(primary shard)
负责客户端的查询请求和索引请求
通过指定索引的主分片数,可以将数据分布到集群的多个节点上,从而达到了水平扩展的能力
每个索引的主分片数需要在创建索引时指定,且后续不允许修改,除非reindex。7.0开始每个索引的主分片数默认为1,若实际业务中索引的数据量较大,建议在创建索引时提前预估设置好主分片数。
2、副本(replica shard)
可以承担客户端的查询请求,不支持索引请求
副本分片其实就是主分片的数据备份,当某个节点某个分片损坏或丢失时可以从副本中恢复,一定程度上达到了ES高可用的能力
副本分片数可以动态调整,增加副本分片一定程度上提高额系统的可用性
3、分片数的设置
7.0开始,主分片数默认设置为1,一定程度上解决了over-sharding的问题。索引主分片数需要合理设计,过大或者过小都有一定的缺陷。
- 主分片数过小:
无法充分利用到多个node的资源,且后续无法动态水平扩展。
若单分片数据量过大,reindex时将非常耗时
- 主分片数过大:(over-sharding)
影响搜索结果的相关性打分
影响统计结果的准确性
当节点上存在过多分片,也会导致资源浪费,影响性能
get _cat/shards //查看各个索引的数据分布的分片信息
.kibana_task_manager_1 0 p STARTED 2 13.1kb 192.168.0.4 node-1
.kibana_sansi_1 0 p STARTED 0 283b 192.168.0.4 node-1
users 0 p STARTED 8 26.5kb 192.168.0.4 node-1
users 0 r UNASSIGNED
.apm-agent-configuration 0 p STARTED 0 283b 192.168.0.4 node-1
.kibana_1 0 p STARTED 45 86.1kb 192.168.0.4 node-1
kibana_sample_data_logs 0 p STARTED 14074 11.2mb 192.168.0.4 node-1
test 0 p STARTED 2 4.6kb 192.168.0.4 node-1
test 0 r UNASSIGNED
2.5 es集群
ES集群的特点:
- 数据水平扩展(数据通过shard分布在多个节点上)
- 高可用(默认2副本,通过副本分片实现)
GET _cluster/health //查看集群状态
{
"cluster_name" : "sansi-es",
"status" : "yellow",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 7,
"active_shards" : 7,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 2,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 77.77777777777779
}
green表示主分片和副本分片分配均正常
yellow表示主分片分配正常,副本分片未正常分配
red表示主分片和副本分片均未正常分配