目录
2.4 Elasticsearch Single-Node Mode部署
2. Elasticsearch Single-Node Mode部署
第3节 ElasticSearch架构图以及基本概念(术语)
Elasticsearch Head插件介绍安装 及 验证主从环境
1 ElasticSearch
第1节 ELK
1.1 集中式日志系统
一个完整的集中式日志系统,是离不开以下几个主要特点的。
- 收集-能够采集多种来源的日志数据
- 传输-能够稳定的把日志数据传输到中央系统
- 存储-如何存储日志数据
- 分析-可以支持 UI 分析
- 警告-能够提供错误报告,监控机制
1.2 ELK 协议栈介绍及体系结构
ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,Elasticsearch(ES),Logstash 和 Kibana。这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,故被简称为 ELK 协议栈。
Elasticsearch
Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。
主要特点
- 实时分析
- 分布式实时文件存储,并将每一个字段都编入索引
- 文档导向,所有的对象全部是文档
- 高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards 和 Replicas)。
- 接口友好,支持 JSON
Logstash
Logstash 是一个具有实时渠道能力的数据收集引擎。使用 JRuby 语言编写。其作者是世界著名的运维工程师乔丹西塞 (JordanSissel)。
主要特点
- 几乎可以访问任何数据
- 可以和多种外部应用结合
- 支持弹性扩展
由三个主要部分组成
- Shipper-发送日志数据
- Broker-收集数据,缺省内置
- Redis Indexer-数据写入
Kibana
Kibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。
1.3 Elk整体架构
1.4 参考文档
ELK官网:https://www.elastic.co/
ELK官网文档:https://www.elastic.co/guide/index.html
ELK中文手册:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
ELK中文社区:https://elasticsearch.cn/
ELK API :https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/travelansport-client.html
第2节 Elasticsearch
2.1 什么是ElasticSearch
Elasticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本 身扩展性很好,可以扩展到上百台服务器,处理PB级别(瓶颈) 的数据。
es也使用Java开发并使用Lucene作为其核心来实现 所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
2.2 ElasticSearch使用案例
- 2013年初,GitHub抛弃了Solr,采取ElasticSearch 来做PB级的搜索。 “GitHub使用ElasticSearch搜索20TB的 数据,包括13亿文件和1300亿行代码”
- 维基百科:启动以elasticsearch为基础的核心搜索架构
- SoundCloud:“SoundCloud使用ElasticSearch为1.8亿用户提供即时而精准的音乐搜索服务”
- 百度:百度目前广泛使用ElasticSearch作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定 义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部20多 个业务线(包括casio、云分析、网盟、预测、文库、直达号、钱包、风控等),单集群最大100台机器,200个 ES节点,每天导入30TB+数据
- 新浪使用ES 分析处理32亿条实时日志
- 阿里使用ES 构建自己的日志采集和分析体系
2.3 ElasticSearch对比Solr
- Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;
- Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;
- Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;
- Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch
2.4 Elasticsearch Single-Node Mode部署
Elasticsearch是一个分布式全文搜索引擎,支持单节点模式(Single-Node Mode)和集群模式(Cluster Mode)部署,一 般来说,小公司的业务场景往往使用Single-Node Mode部署即可。
下载 7.3.0版本 Elasticsearch 地址: https://www.elastic.co/cn/downloads/elasticsearch
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-3-0
A.上传、解压tar.gz文件
cd /opt/lagou/software
tar -zxvf elasticsearch-7.3.0-linux-x86_64.tar.gz -C ../servers
B.重命名
cd ../servers/
mv elasticsearch-7.3.0/ elasticsearch/
C. 配置Elasticsearch
a.编辑 vim /opt/lagou/servers/elasticsearch/config/elasticsearch.yml
vim /opt/lagou/servers/elasticsearch/config/elasticsearch.yml
- 单机安装请取消注释:node.name: node-1,否则无法正常启动。
- 修改网络和端口,取消注释master节点,单机只保留一个node
node.name: node-1
network.host: linux121
#
# Set a custom port for HTTP:
#
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
b.按需修改vim /opt/lagou/servers/elasticsearch/config/jvm.options内存设置
vim /opt/lagou/servers/elasticsearch/config/jvm.options
根据实际情况修改占用内存,默认都是1G,单机1G内存,启动会占用700m+然后在安装kibana后,基本上无 法运行了,运行了一会就挂了报内存不足。 内存设置超出物理内存,也会无法启动,启动报错。
-Xms2g
-Xmx2g
c.添加es用户,es默认root用户无法启动,需要改为其他用户
useradd estest
#修改密码
passwd estest
改变es目录拥有者账号
chown -R estest /opt/lagou/servers/elasticsearch/
d.修改/etc/sysctl.conf
ES因为需要大量的创建索引文件,需要大量的打开系统的文件,所以需要解除linux系统当中打开文件最大数目的限制,不然ES启动就会抛错
修改文件句柄数
vim /etc/sysctl.conf
末尾添加:
vm.max_map_count=655360
执行sysctl -p 让其生效
sysctl -p
e.修改/etc/security/limits.conf
修改linux系统对文件描述符的限制级别
末尾添加:
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
f.启动es
切换刚刚新建的用户
su estest
启动命令
/opt/lagou/servers/elasticsearch/bin/elasticsearch
g.配置完成:浏览器访问测试。 linux121:9200
3.简单使用
创建blog01索引
curl -XPUT http://linux121:9200/blog01/?pretty
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "blog01"
}
插入文档
curl -XPUT http://linux121:9200/blog01/article/1?pretty -d '{"id": "1", "title": "What is lucene"}' -H "Content-Type: application/json"
curl -XPUT http://linux121:9200/blog01/article/2?pretty -d '{"id": "2", "title": "Apache Spark is a unified analytics engine for large-scale data processing"}' -H "Content-Type: application/json"
查询文档
curl -XGET http://linux121:9200/blog01/article/1?pretty -H "Content-Type: application/json"
更新文档
curl -XPUT http://linux121:9200/blog01/article/1?pretty -d '{"id": "1", "title": " What is elasticsearch"}' -H "Content-Type: application/json"
搜索文档
curl -XGET "http://linux121:9200/blog01/article/_search?q=title:'What'&pretty" -H "Content-Type: application/json"
curl -XGET "http://linux121:9200/blog01/article/_search?q=title:'is'&pretty" -H "Content-Type: application/json"
curl -XGET "http://linux121:9200/blog01/article/_search?q=title:'elasticsearch'&pretty" -H "Content-Type: application/json"
curl -XGET "http://linux121:9200/blog01/article/_search?q=title:'unified'&pretty" -H "Content-Type: application/json"
第3节 ElasticSearch架构图以及基本概念(术语)
3.1 概述
Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。
Elasticsearch是基于Lucene的全文检索引擎,本质也是存储和检索数据。ES中的很多概念与MySQL类似 我们可以按照关系型数据库的经验去理解
索引(index)
- 类似的数据放在一个索引,非类似的数据放不同索引, 一个索引也可以理解成一个关系型数据库。
类型(type)
- 代表document属于index中的哪个类别(type)也有一种说法一种type就像是数据库的表,比如dept表,user表。
- 注意ES每个大版本之间区别很大:ES 5.x中一个index可以有多种type。 ES 6.x中一个index只能有一种type。 ES 7.x以后 要逐渐移除type这个概念。
映射(mapping)
- mapping定义了每个字段的类型等信息。相当于关系型数据库中的表结构。
- 常用数据类型:text、keyword、number、array、range、boolean、date、geo_point、ip、nested、object
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html#_multi_fields_2
Elasticsearch比传统关系型数据库如下:
3.2 Elasticsearch核心概念
1 索引 index
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。
2 类型 type
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。
高版本ES中逐渐抛弃了type的概念,会有一个默认的type:_doc
3 字段Field
相当于是数据表的字段,对文档数据根据不同属性进行的分类标识
4 映射 mapping
mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等,这些都是映射里面可以设置的,其它就是处理es里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。
5 文档 document
一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。
在一个index/type里面,你可以存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的type。
6 接近实时 NRT
Elasticsearch是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒以内)
7 cluster
集群(Cluster)
- 一个Elasticsearch集群由多个节点(Node)组成,每个集群都有一个共同的集群名称作为标识
节点(Node)
- 一个Elasticsearch实例即一个Node,一台机器可以有多个实例,正常使用下每个实例都应该会部署在不同的机器上。
- Elasticsearch的配置文件中可以通过node.master、node.data来设置节点类型。
- node.master:表示节点是否具有成为主节点的资格, true代表的是有资格竞选主节点, false代表的是没有资格竞选主节点
- node.data:表示节点是否存储数据
Node节点组合
- 主节点+数据节点(master+data) , 默认, 节点既有成为主节点的资格,又存储数据
node.master: true
node.data: true
- 数据节点(data), 没有成为主节点的资格,不参与选举,只会存储数据
node.master: false
node.data: true
- 客户端节点(client), 不会成为主节点,也不会存储数据,主要是针对海量请求的时候可以进行负载均衡
node.master: false
node.data: false
分片
- 每个索引有1个或多个分片,每个分片存储不同的数据。分片可分为主分片(primary shard)和复制分片(replica shard),复制分片是主分片的拷贝。
- 默认每个主分片有一个复制分片,每个索引的复制分片的数量可以动态地调整,复制分片从不与它的主分片在同一个节点上
副本
- 这里指主分片的副本分片(主分片的拷贝)
提高恢复能力:当主分片挂掉时,某个复制分片可以变成主分片;
提高性能:get 和 search 请求既可以由主分片又可以由复制分片处理;
注意:每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变分片的数量。
默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样的话每个索引总共就有10个分片。
2 Elasticsearch 集群部署
第1节 准备工作
1 创建用户
创建一个es专门的用户(必须),因为es不能用root用户启动
使用root用户在三台机器执行以下命令
useradd es
mkdir -p /opt/lagou/servers/es
mkdir -p /opt/lagou/servers/data/es
mkdir -p /opt/lagou/servers/logs/es
chown -R es /opt/lagou/servers/es
chown -R es /opt/lagou/servers/data/es
chown -R es /opt/lagou/servers/logs/es
passwd es
密码:123456
2 为es用户添加sudo权限
三台机器使用root用户执行visudo然后为es用户添加权限
vim /etc/sudoers
添加如下内容
es ALL=(ALL) ALL
3 分布式安装部署
关闭所有的会话,重新连接,一定要记得使用es的用户来连接服务器
3.1 部署服务器linux121
重新解压
tar -zxvf elasticsearch-7.3.0-linux-x86_64.tar.gz -C ../servers/es
cd /opt/lagou/servers/es
mv elasticsearch-7.3.0/ elasticsearch/
修改配置文件
elasticsearch.yml配置文件说明:
cd /opt/lagou/servers/es/elasticsearch/config
vim elasticsearch.yml
# 集群名字
cluster.name: myes
## 集群中当前的节点
node.name: linux121
## 数据目录
path.data: /opt/lagou/servers/data/es
# # 日志目录
path.logs: /opt/lagou/servers/logs/es
# # 当前主机的ip地址
network.host: linux121
http.port: 9200
#初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["linux121","linux122","linux123"]
#写入候选主节点的设备地址
discovery.seed_hosts: ["linux121", "linux122","linux123"]
http.cors.enabled: true
http.cors.allow-origin: "*"
3.2 安装包分发到其他两台机器上
linux121服务器执行以下命令
cd /opt/lagou/servers/es
scp -r elasticsearch/ linux122:$PWD
scp -r elasticsearch/ linux123:$PWD
3.3 linux122与linux123修改配置文件
linux122服务器修改配置文件
cd /opt/lagou/servers/es/elasticsearch/config/
vim elasticsearch.yml
# 集群名字
cluster.name: myes
## 集群中当前的节点
node.name: linux122
## 数据目录
path.data: /opt/lagou/servers/data/es
# # 日志目录
path.logs: /opt/lagou/servers/logs/es
# # 当前主机的ip地址
network.host: linux122
http.port: 9200
#初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["linux121","linux122","linux123"]
#写入候选主节点的设备地址
discovery.seed_hosts: ["linux121", "linux122","linux123"]
http.cors.enabled: true
http.cors.allow-origin: "*"
linux123服务器修改配置文件
cd /opt/lagou/servers/es/elasticsearch/config/
vim elasticsearch.yml
# 集群名字
cluster.name: myes
## 集群中当前的节点
node.name: linux123
## 数据目录
path.data: /opt/lagou/servers/data/es
# # 日志目录
path.logs: /opt/lagou/servers/logs/es
# # 当前主机的ip地址
network.host: linux123
http.port: 9200
#初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["linux121","linux122","linux123"]
#写入候选主节点的设备地址
discovery.seed_hosts: ["linux121", "linux122","linux123"]
http.cors.enabled: true
http.cors.allow-origin: "*"
三台机器执行以下命令修改jvm内存大小
cd /opt/lagou/servers/es/elasticsearch/config
vi jvm.options
修改内存
-Xms2g
-Xmx2g
3.4 三台机器修改系统配置
linux122,linux123机器重复单节点安装时linux121机器配置修改步骤。
注意切换到root用户执行修改动作并重启服务器!!
第2节 启动es服务
2.1 启动
注意!这里是后台启动,要发现错误的话,去/opt/lagou/servers/logs/es目录下查看。
nohup /opt/lagou/servers/es/elasticsearch/bin/elasticsearch >/dev/null 2>&1 &
2.2 访问es
在Google Chrome浏览器中,访问以下地址
http://linux121:9200/?pretty
pretty:格式化的,漂亮的。
得到以下内容
{
"name": "linux121",
"cluster_name": "myes",
"cluster_uuid": "3nUDlA_hTjaiZQfBqygrLQ",
"version": {
"number": "7.3.0",
"build_flavor": "default",
"build_type": "tar",
"build_hash": "de777fa",
"build_date": "2019-07-24T18:30:11.767338Z",
"build_snapshot": false,
"lucene_version": "8.1.0",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}
同理可以访问linux122,linux123服务器。
http://linux122:9200/?pretty
{
"name": "linux122",
"cluster_name": "myes",
"cluster_uuid": "3nUDlA_hTjaiZQfBqygrLQ",
"version": {
"number": "7.3.0",
"build_flavor": "default",
"build_type": "tar",
"build_hash": "de777fa",
"build_date": "2019-07-24T18:30:11.767338Z",
"build_snapshot": false,
"lucene_version": "8.1.0",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}
http://linux123:9200/?pretty
{
"name": "linux123",
"cluster_name": "myes",
"cluster_uuid": "3nUDlA_hTjaiZQfBqygrLQ",
"version": {
"number": "7.3.0",
"build_flavor": "default",
"build_type": "tar",
"build_hash": "de777fa",
"build_date": "2019-07-24T18:30:11.767338Z",
"build_snapshot": false,
"lucene_version": "8.1.0",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}
2.3 安装elasticsearch-head插件
Elasticsearch Head插件介绍安装 及 验证主从环境
Elasticsearch Head插件介绍
elasticsearch-head是一个界面化的集群操作和管理工具,可以对集群进行傻瓜式操作。你可以通过插件把它集成到ES。
es-head主要有三个方面的操作:
- 显示集群的拓扑 能够快速访问并显示集群的状态,并且能够执行索引和节点级别操作
- 搜索接口能够查询集群中原始json或表格格式的检索数据
- 有一个输入窗口,允许任意调用RESTful API。
官方文档: <https://github.com/mobz/elasticsearch-head>
安装步骤
ealsticsearch只是后端提供各种api,那么怎么直观的使用它呢?elasticsearch-head将是一款专门针对于elasticsearch的客户端工具 elasticsearch-head配置包,下载地址:https://github.com/mobz/elasticsearch-head
elasticsearch-head是一个基于node.js的前端工程。
以下步骤须使用root用户操作!!
1. nodejs安装
#下载
wget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.xz
#解压缩
tar xf node-v10.15.3-linux-x64.tar.xz -C ../servers
#进入解压目录
cd node-v10.15.3-linux-x64/
#执行node命令 查看版本
/bin/node -v
v10.15.3
解压文件的 bin 目录底下包含了 node、npm 等命令,我们可以使用 ln 命令来设置软连接:
ln -s /opt/lagou/servers/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/
ln -s /opt/lagou/servers/node-v10.15.3-linux-x64/bin/node /usr/local/bin/
2. phantomjs安装配置
cd /usr/local
wget https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linuxx86_
64.tar.bz2
#注意安装
yum install -y bzip2
tar -jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
vim /etc/profile
export PATH=$PATH:/usr/local/phantomjs-2.1.1-linux-x86_64/bin
#注意环境变量$Path移动在最前面
source /etc/profile
3. elasticsearch-head安装
npm install -g grunt-cli
npm install grunt
npm install grunt-contrib-clean
npm install grunt-contrib-concat
npm install grunt-contrib-watch
npm install grunt-contrib-connect
yum -y install git
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install -g cnpm --registry=https://registry.npm.taobao.org
4. elasticsearch-head发现主机 并连接 elasticsearch.yml配置文件修改3
如果之前设置过 可以忽略这一步
http.cors.enabled: true
http.cors.allow-origin: "*"
5. 启动
在 elasticsearch-head 中执行命令
npm run start
注意:如果启动出错 则把第三步中的依赖再安装一遍!!
6. 启动完成后,我们用Elasticsearch head查看,主从环境配置正常。
谷歌浏览器插件方式安装
Elasticsearch 5之后则需要将elasticsearch-head服务单独运行,并且支持Chrome的插件方式或者Docker容器运行方式。
Chrome插件安装地址
https://chrome.google.com/webstore/detail/elasticsearch-head/ffmkiejjmecolpfloofpjologoblkegm/
添加完成后可以从以下地方找到扩展程序
2.4 安装配置kibana
1.什么是Kibana
Kibana是一个基于Node.js的Elasticsearch索引库数据统计工具,可以利用Elasticsearch的聚合功能,生成各种图表,如柱形图,线状图,饼图等。
而且还提供了操作Elasticsearch索引数据的控制台,并且提供了一定的API提示,非常有利于我们学习Elasticsearch的语法。
2.安装Kibana
下载Kibana
Kibana与操作系统
安装kibana
root账户下操作!!
上传到linux121服务器
cd /opt/lagou/software/
tar -zxvf kibana-7.3.0-linux-x86_64.tar.gz -C ../servers/
cd ../servers/
mv kibana-7.3.0-linux-x86_64/ kibana/
改变kibana目录拥有者账号
chown -R es /opt/lagou/servers/kibana
还需要设置访问权限
chmod -R 777 /opt/lagou/servers/kibana
修改配置文件
vim /opt/lagou/servers/kibana/config/kibana.yml
修改端口,访问ip,elasticsearch服务器ip
server.port: 5601
server.host: "linux121"
# The URLs of the Elasticsearch instances to use for all your queries.
elasticsearch.hosts: ["http://linux121:9200","http://linux122:9200","http://linux123:9200"]
配置完成启动:
# 切换用户
su es
cd /opt/lagou/servers/kibana/
/bin/kibana
没有error错误启动成功:
访问linux121:5601,即可看到安装成功
已全部安装完成,然后可以接入数据使用了。
3 kidbana使用页面
选择左侧的DevTools菜单,即可进入控制台页面:
在页面右侧,我们就可以输入请求,访问Elasticsearch了。
4 扩展kibana dev tools快捷键
ctrl+enter 提交请求
ctrl+i 自动缩进