1、介绍lucene的功能以及建立索引、搜索单词、搜索词语和搜索句子四个示例实现
2、Elasticsearch7.6.1基本介绍、2种部署方式及验证、head插件安装、分词器安装及验证
3、Elasticsearch7.6.1信息搜索示例(索引操作、数据操作-添加、删除、导入等、数据搜索及分页)
4、Elasticsearch7.6.1 Java api操作ES(CRUD、两种分页方式、高亮显示)和Elasticsearch SQL详细示例
5、Elasticsearch7.6.1 filebeat介绍及收集kafka日志到es示例
6、Elasticsearch7.6.1、logstash、kibana介绍及综合示例(ELK、grok插件)
7、Elasticsearch7.6.1收集nginx日志及监测指标示例
8、Elasticsearch7.6.1收集mysql慢查询日志及监控
9、Elasticsearch7.6.1 ES与HDFS相互转存数据-ES-Hadoop
本文介绍了Elasticsearch的功能、应用场景,也介绍了其2种部署方式,同时介绍了head插件和分词器的安装,最后介绍了Elasticsearch的几个核心概念,该概念是后续使用的基础
本文分为5个部分,及基本介绍、两种部署方式、head插件安装、分词器安装和核心概念介绍。
根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
大型分布式集群(数百台规模服务器)
处理PB级数据
小公司也可以进行单机部署
简单易用,操作非常简单
快速部署生产环境
传统关系型数据库不擅长全文检索(MySQL自带的全文索引,与ES性能差距非常大)
传统关系型数据库无法支持搜索排名、海量数据存储、分析等功能
Elasticsearch可以作为传统关系数据库的补充,提供RDBM无法提供的功能
Solr 利用Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能
Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式
Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供
Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于Elasticsearch
此处部署三台es,服务器名称为server1、server2和server3。
ES不能使用root用户来启动,必须使用普通用户来安装启动。
创建一个普通用户以及定义一些常规目录用于存放我们的数据文件以及安装包等。
创建一个es专门的用户(必须)
# 使用root用户在三台机器执行以下命令
useradd alanchan
passwd rootroot
为了让普通用户有更大的操作权限,一般都会给普通用户设置sudo权限,方便普通用户的操作
三台机器使用root用户执行visudo命令然后为es用户添加权限
visudo
# 第100行
alanchan ALL=(ALL) ALL
将es的安装包下载并上传到server1服务器的/usr/local/tools路径下,然后进行解压
使用alanchan用户来执行以下操作,将es安装包上传到server1服务器,并使用es用户执行以下命令解压。
# 解压Elasticsearch
tar -zvxf elasticsearch-7.6.1-linux-x86_64.tar.gz -C /usr/local/bigdata
server1服务器使用alanchan用户来修改配置文件
cd /usr/local/bigdata/elasticsearch-7.6.1/config
mkdir -p /usr/local/bigdata/esdata
rm -rf elasticsearch.yml
vim elasticsearch.yml
cluster.name: alan-application
node.name: server1
path.data: /usr/local/bigdata/esdata
path.logs: /usr/local/bigdata/elasticsearch-7.6.1/log
network.host: server1
http.port: 9200
discovery.seed_hosts: ["server1", "server2", "server3"]
cluster.initial_master_nodes: ["server3", "server2"]
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
http.cors.enabled: true
http.cors.allow-origin: "*"
修改jvm.option配置文件,调整jvm堆内存大小
server1使用alanchan用户执行以下命令调整jvm堆内存大小,每个人根据自己服务器的内存大小来进行调整。
cd /usr/local/bigdata/elasticsearch-7.6.1/config
vim jvm.options
-Xms2g
-Xmx2g
server1使用alanchan用户将安装包分发到其他服务器上面去
cd /usr/local/bigdata
scp -r elasticsearch-7.6.1/ server2:$PWD
scp -r elasticsearch-7.6.1/ server3:$PWD
server2使用alanchan用户执行以下命令修改es配置文件
mkdir -p /usr/local/bigdata/esdata
# 修改配置文件
cd /usr/local/bigdata/elasticsearch-7.6.1/config
vim elasticsearch.yml
node.name: server2
network.host: server2
#server3使用alanchan用户执行以下命令修改配置文件
#创建数据目录
mkdir -p /usr/local/bigdata/esdata
#修改配置文件
cd /usr/local/bigdata/elasticsearch-7.6.1/config
vim elasticsearch.yml
node.name: server3
network.host: server3
由于现在使用普通用户来安装es服务,且es服务对服务器的资源要求比较多,包括内存大小,线程数等。所以需要给普通用户解开资源的束缚
问题错误信息描述:
maxfile descriptors [4096] for elasticsearch process likely too low, increase toat least [65536]
ES因为需要大量的创建索引文件,需要大量的打开系统的文件,所以我们需要解除linux系统当中打开文件最大数目的限制,不然ES启动就会抛错
三台机器使用alanchan用户执行以下命令解除打开文件数据的限制
sudo vi /etc/security/limits.conf
#添加如下内容: 注意*不要去掉了
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
此文件修改后需要重新登录用户,才会生效
问题错误信息描述
maxnumber of threads [1024] for user [es] likely too low, increase to at least[4096]
修改普通用户可以创建的最大线程数
max number ofthreads [1024] for user [es] likely too low, increase to at least [4096]
原因:无法创建本地线程问题,用户最大可创建线程数太小解决方案:修改90-nproc.conf 配置文件。
三台机器使用alanchan用户执行以下命令修改配置文件
Centos6
sudo vi /etc/security/limits.d/90-nproc.conf
Centos7
sudo vi /etc/security/limits.d/20-nproc.conf
#找到如下内容:
* soft nproc 1024
#修改为
* soft nproc 4096
错误信息描述:
maxvirtual memory areas vm.max_map_count [65530] likely too low, increase to atleast [262144]
调大系统的虚拟内存
原因:最大虚拟内存太小
每次启动机器都手动执行下。
三台机器执行以下命令
执行下面命令
sudo sysctl -w vm.max_map_count=262144
#修改配置文件
sudo vim /etc/sysctl.conf
#在最后添加一行
vm.max_map_count=262144
#立即生效
sysctl -p
#查看修改结果
sysctl -a|grep vm.max_map_count
[alanchan@server1 ~]$ sudo sysctl -a|grep vm.max_map_count
vm.max_map_count = 262144
备注:以上三个问题解决完成之后,重新连接secureCRT或者重新连接xshell生效
三台机器使用alanchan用户执行以下命令启动es服务
nohup /usr/local/bigdata/elasticsearch-7.6.1/bin/elasticsearch 2>&1 &
[alanchan@server3 ~]$ jps
3973 Elasticsearch
9975 Jps
启动成功之后jsp即可看到es的服务进程,并且访问页面
http://server1:9200/?pretty
http://server2:9200/?pretty
http://server3:9200/?pretty
能够看到es启动之后的一些信息
elasticsearch-head这个插件是es提供的一个用于图形化界面查看的一个插件工具,可以安装上这个插件之后,通过这个插件来实现通过浏览器查看es当中的数据
安装elasticsearch-head这个插件这里提供两种方式进行安装
第一种方式就是自己下载源码包进行编译,耗时比较长
第二种方式就是直接使用我已经编译好的安装包,进行修改配置即可
要安装elasticsearch-head插件,需要先安装Node.js
Node.js是一个基于Chrome V8 引擎的 JavaScript 运行环境。
Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对ChromeV8引擎进行了封装。Node.js 不是一个JavaScript 框架,不同于CakePHP、Django、Rails。Node.js 更不是浏览器端的库,不能与 jQuery、ExtJS 相提并论。Node.js是一个让 JavaScript 运行在服务端的开发平台,它让JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。
server1机器执行以下命令下载安装包,然后进行解压
cd /usr/local/tools
wget https://npm.taobao.org/mirrors/node/v8.5.0/node-v8.5.0-linux-x64.tar.gz
tar -zxvf node-v8.5.0-linux-x64.tar.gz -C /usr/local/bigdata
server1执行以下命令创建软连接
sudo ln -s /usr/local/bigdata/node-v8.5.0-linux-x64/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm
sudo ln -s /usr/local/bigdata/node-v8.5.0-linux-x64/bin/node /usr/local/bin/node
server1服务器添加环境变量
vim /etc/profile
export NODE_HOME=/usr/local/bigdata/node-v8.5.0-linux-x64
export PATH=:$PATH:$NODE_HOME/bin
修改完环境变量使用source生效
source /etc/profile
server1执行以下命令验证安装生效
node -v
npm -v
[alanchan@server3 bigdata]$ node -v
v8.5.0
[alanchan@server3 bigdata]$ npm -v
5.3.0
这里选择server1进行安装
# 初始化目录
cd /usr/local/bigdata/es
# 安装GCC
sudo yum install -y gcc-c++ make git
cd /usr/local/bigdata
git clone https://github.com/mobz/elasticsearch-head.git
# 进入安装目录
cd /usr/local/bigdata/elasticsearch-head
# intall 才会有 node-modules
npm install
以下进度信息
npm WARN notice [SECURITY] lodash has thefollowing vulnerability: 1 low. Go here for more details:
npm WARN notice [SECURITY] debug has thefollowing vulnerability: 1 low. Go here for more details:https://nodesecurity.io/advisories?search=debug&version=0.7.4 - Run `npm inpm@latest -g` to upgrade your npm version, and then `npm audit` to get moreinfo.
npm ERR! Unexpected end of input at 1:2096
npm ERR!7c1a1bc21c976bb49f3ea","tarball":"https://registry.npmjs.org/safer-bu
npm ERR! ^
npm ERR! A complete log of this run can befound in:
npm ERR! /home/es/.npm/_logs/2018-11-27T14_35_39_453Z-debug.log
以上错误可以不用管。
第一台机器修改Gruntfile.js这个文件
cd /usr/local/bigdata/elasticsearch-head
vim Gruntfile.js
#找到以下代码:
#添加一行: hostname: '192.168.10.41',
connect: {
server: {
options: {
hostname:'192.168.10.41',
port: 9100,
base: '.',
keepalive:travelue
}
}
}
第一台机器修改app.js
cd /usr/local/bigdata/elasticsearch-head/_site
vim app.js
#更改前:
http://localhost:9200
#更改后:
http://server1:9200
将压缩包 elasticsearch-head-compile-after.tar.gz 上传到server1机器的/usr/local/tools路径下面去
server1执行以下命令解压安装包
cd /usr/local/tools
tar -zxvf elasticsearch-head-compile-after.tar.gz -C /usr/local/bigdata
修改Gruntfile.js这个文件
cd /usr/local/bigdata/elasticsearch-head
vim Gruntfile.js
找到代码中的93行:hostname:'192.168.100.100', 修改为:server1
connect: {
server: {
options: {
hostname: 'server1',
port: 9100,
base: '.',
keepalive: true
}
}
}
server1机器修改app.js
cd /usr/local/bigdata/elasticsearch-head/_site
vim app.js
第4354行,http://localhost:9200修改为自己的ip
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://server1:9200";
server1启动elasticsearch-head插件
cd /usr/local/bigdata/elasticsearch-head/node_modules/grunt/bin/
#进程前台启动命令
./grunt server
[alanchan@server1 bin]$ ./grunt server
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://server1:9100
#进程后台启动命令
nohup ./grunt server >/dev/null 2>&1 &
#如何停止:elasticsearch-head进程
#执行以下命令找到elasticsearch-head的插件进程,然后使用kill -9 杀死进程即可
netstat -nltp | grep 9100
kill -98328
打开Google Chrome访问
http://server1:9100
需要使用Elasticsearch来进行中文分词,所以需要单独给Elasticsearch安装IK分词器插件。
以下为具体安装步骤:
https://github.com/medcl/elasticsearch-analysis-ik/releases
切换到alanchan用户,并在bigdata的安装目录下/plugins创建ik
mkdir -p /usr/local/bigdata/elasticsearch-7.6.1/plugins/ik
将下载的ik分词器上传并解压到该目录
cd /usr/local/bigdata/elasticsearch-7.6.1/plugins/ik
sudo rz
unzip elasticsearch-analysis-ik-7.6.1.zip
将plugins下的ik目录分发到每一台服务器
cd /usr/local/bigdata/elasticsearch-7.6.1/plugins
scp -r ik/ server2:$PWD
scp -r ik/ server3:$PWD
关闭进程
kill 进程号
启动
nohup /usr/local/bigdata/elasticsearch-7.6.1/bin/elasticsearch 2>&1 &
本示例用VS code进行测试
post _analyze
{
"analyzer":"standard",
"text":"我爱你中国"
}
post _analyze
{
"analyzer":"ik_max_word",
"text":"我爱你中国"
}
相当于是数据表的字段,对文档数据根据不同属性进行的分类标识
每一个字段都应该有一个对应的类型,例如:Text、Keyword、Byte等
一个文档是一个可被索引的基础信息单元。比如,可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式
一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能
一个集群由一个唯一的名字标识,这个名字默认就是“elasticsearch”
这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群
一个节点是集群中的一个服务器,作为集群的一部分,它存储数据,参与集群的索引和搜索功能
一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中,这意味着,如果在网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做“elasticsearch”的集群中
在一个集群里,可以拥有任意多个节点。而且,如果当前网络中没有运行任何Elasticsearch节点,这时启动一个节点,会默认创建并加入一个叫做“elasticsearch”的集群。
一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些份就叫做分片。
当创建一个索引的时候,可以指定你想要的分片的数量
每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上
分片很重要,主要有两方面的原因
允许水平分割/扩展你的内容容量
允许在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量
至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由Elasticsearch管理的,对于作为用户来说,这些都是透明的
在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch允许创建分片的一份或多份拷贝,这些拷贝叫做副本分片,或者直接叫副本
副本之所以重要,有两个主要原因
以上,介绍了Elasticsearch的功能、应用场景,也介绍了其2种部署方式,同时介绍了head插件和分词器的安装,最后介绍了Elasticsearch的几个核心概念,该概念是后续使用的基础。