一、Elasticsearch介绍
1.什么Elasticsearch
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索搜索、支持分布式可实现高可用、提供API接口,可以处理大规模日志数据,比如Nginx、Tomcat、系统日志等功能。
#可以做存储,但是不能完全替代数据库
1.ES的一些属性不能修改
2.ES没有用户验证功能
2.全文检索和倒排索引
#全文检索之前必须先建立倒排索引
全文检索和倒排索引
1.分词
2.语言处理
3.排序
4.计算命中率
5.再次排序,根据算法给出结果
3.ES功能
1.分布式搜索引擎
2.高亮显示搜索内容
3.全文检索
相当于数据库:select * from database.table;
4.结构化检索
相当于数据库:select * from database.table where 条件1;
5.数据分析(ELK)
相当于数据库:select count(*) from database.table;
6.存储
4.ES特点
1.处理方式灵活:elasticsearch是实时全文索引,具有强大的搜索功能
2.配置相对简单:elasticsearch全部使用JSON 接口,logstash使用模块配置,kibana的配置文件部分更简单。
3.检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。
4.集群线性扩展:elasticsearch和logstash都可以灵活线性扩展
5.前端操作绚丽:kibana的前端设计比较绚丽,而且操作简单
6.高性能,分布式
7.不需要会java语言
5.MySQL与ES对比
MySQL ES
库(database) 索引(index)
表(table) 类型(type)
列(字段) 项(fileter)
真实数据行 文档
二、安装Elasticsearch
1.服务器时间同步
#集群三台机器都执行时间同步 [root@db01 ~]# ntpdate time1.aliyun.com
2.安装java环境
#1.上传java的rpm包 [root@db01 ~]# rz jdk-8u181-linux-x64.rpm #2.安装rpm包 [root@db01 ~]# rpm -ivh jdk-8u181-linux-x64.rpm #3.查看java环境版本 [root@db01 ~]# java -version java version "1.8.0_181" Java(TM) SE Runtime Environment (build 1.8.0_181-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
3.安装ES
#1.上传或下载包 [root@db01 ~]# rz elasticsearch-6.6.0.rpm #或 [root@db01 ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.rpm #2.安装ES [root@db01 ~]# rpm -ivh elasticsearch-6.6.0.rpm #3.根据提示执行 [root@db01 ~]# systemctl daemon-reload [root@db01 ~]# systemctl enable elasticsearch.service [root@db01 ~]# systemctl start elasticsearch.service #4.验证启动 [root@db01 ~]# netstat -lntp tcp6 0 0 127.0.0.1:9200 :::* LISTEN 16115/java tcp6 0 0 ::1:9200 :::* LISTEN 16115/java tcp6 0 0 127.0.0.1:9300 :::* LISTEN 16115/java tcp6 0 0 ::1:9300 :::* LISTEN 16115/java [root@db01 ~]# curl 127.0.0.1:9200 { "name" : "q66CE8W", "cluster_name" : "elasticsearch", "cluster_uuid" : "hiGKtv46TbedMTwKcZm6rg", "version" : { "number" : "6.6.0", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "a9861f4", "build_date" : "2019-01-24T11:27:09.439740Z", "build_snapshot" : false, "lucene_version" : "7.6.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
4.ES相关配置文件
[root@db01 ~]# rpm -qc elasticsearch /etc/elasticsearch/elasticsearch.yml #ES主配置文件 /etc/elasticsearch/jvm.options #虚拟化内存 /etc/elasticsearch/log4j2.properties #日志配置 /etc/init.d/elasticsearch #启动程序 /etc/sysconfig/elasticsearch #系统配置 /usr/lib/sysctl.d/elasticsearch.conf #系统配置 /usr/lib/systemd/system/elasticsearch.service #system启动程序
5.配置ES
[root@db01 ~]# vim /etc/elasticsearch/elasticsearch.yml #集群名称,配置单节点时不要开启 #cluster.name: my-application #当前节点名字 node.name: es01 #ES的数据存放目录 path.data: /server/es/data #ES的日志存放目录 path.logs: /server/es/logs #开启内存锁 bootstrap.memory_lock: true #监听地址 network.host: 10.0.0.51,127.0.0.1 #监听端口 http.port: 9200 #集群配置 #discovery.zen.ping.unicast.hosts: ["host1", "host2"] #查看配置 [root@db01 ~]# grep "^[a-z]" /etc/elasticsearch/elasticsearch.yml node.name: es01 path.data: /server/es/data path.logs: /server/es/logs bootstrap.memory_lock: true network.host: 10.0.0.51,127.0.0.1 http.port: 9200
6.根据配置创建目录
#创建目录 [root@db01 ~]# mkdir /server/es/{data,logs} -p #授权 [root@db01 ~]# chown -R elasticsearch.elasticsearch /server/es
7.重启ES
#重新启动ES [root@db01 ~]# systemctl restart elasticsearch.service #启动失败,查看日志 [root@db01 ~]# less /server/es/logs/elasticsearch.log [1] bootstrap checks failed [1]: memory locking requested for elasticsearch process but memory is not locked #因为启动程序的内存锁没有开启,需要修改启动脚本 [root@db01 ~]# vim /usr/lib/systemd/system/elasticsearch.service [Service] LimitMEMLOCK=infinity #修改内存限制(去掉此行注释) #再次重启 [root@db01 ~]# systemctl daemon-reload [root@db01 ~]# systemctl restart elasticsearch.service
8.验证启动
[root@db01 ~]# netstat -lntp tcp6 0 0 10.0.0.51:9200 :::* LISTEN 18063/java tcp6 0 0 127.0.0.1:9200 :::* LISTEN 18063/java tcp6 0 0 10.0.0.51:9300 :::* LISTEN 18063/java tcp6 0 0 127.0.0.1:9300 :::* LISTEN 18063/java
9.查看页面
#浏览器访问 http://10.0.0.51:9200 { #节点名称 "name" : "es01", #集群名称 "cluster_name" : "elasticsearch", #集群的uuid "cluster_uuid" : "TqWwplyHQPO7j0hVJalhJQ", #版本信息 "version" : { "number" : "6.6.0", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "a9861f4", "build_date" : "2019-01-24T11:27:09.439740Z", "build_snapshot" : false, "lucene_version" : "7.6.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
三、跟ES进行交互
1.使用curl命令
1)特点
1.使用不方便,命令复杂,容易出错
2.不需要安装任何服务,只需要curl命令
2)使用方式
1.创建索引(创建库) [root@db01 ~]# curl -XPUT 'localhost:9200/student?pretty' { "acknowledged" : true, "shards_acknowledged" : true, "index" : "student" } 2.插入数据 [root@db01 ~]# curl -XPUT 'localhost:9200/student/user/1?pretty' -H 'Content-Type: application/json' -d '{"name": "lhd","sex":"man","age":"18","about":"good good study","interests":["chinese","english"]}' { "_index" : "student", "_type" : "user", "_id" : "1", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 } 3.查看数据 [root@db01 ~]# curl -GET 'localhost:9200/student/user/1?pretty' { "_index" : "student", "_type" : "user", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "name" : "lhd", "sex" : "man", "age" : "18", "about" : "good good study", "interests" : [ "chinese", "english" ] } }
2.使用ES-head插件的方式一
插件是为了完成不同的功能,官方提供了一些插件但大部分是收费的,另外也有一些开发爱好者提供的插件,可以实现对elasticsearch集群的状态监控与管理配置等功能,我们现在要安装的是Elasticsearch的head插件,此插件提供elasticsearch的web界面功能。
安装Elasticsearch的head插件时,要安装npm,npm的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载、安装、上传以及管理已经安装的包。
在Elasticsearch 5.x版本以后不再支持直接安装head插件,而是需要通过启动一个服务方式。
1)特点
1.查看数据方便,操作简单
2.需要安装nodejs,安装复杂
2)命令部署方法
#安装npm(只需要在一个节点安装即可,如果前端还有nginx做反向代理可以每个节点都装) [root@elkstack01 ~]# yum install -y nodejs openssl #从GitHub上克隆代码到本地 [root@redis01 ~]# git clone git://github.com/mobz/elasticsearch-head.git #克隆完成后,进入elasticsearch插件目录 [root@redis01 ~]# cd elasticsearch-head/ #清除缓存 [root@redis01 elasticsearch-head]# npm cache clean -f #使用npm安装n模块(不同的项目js脚本所需的node版本可能不同,所以就需要node版本管理工具) [root@redis01 elasticsearch-head]# npm install -g n #安装最新版本n模块 [root@redis01 elasticsearch-head]# n stable #生成grunt [root@redis01 elasticsearch-head]# npm install grunt -save #确认生成grunt文件 [root@redis01 elasticsearch-head]# ll node_modules/grunt #执行安装grunt [root@redis01 elasticsearch-head]# npm install #后台启动head插件(切记,必须在插件目录下执行启动命令) [root@redis01 elasticsearch-head]# npm run start & #验证端口是否启动成功 [root@redis01 elasticsearch-head]# netstat -lntup tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 11293/grunt #启动成功后,修改elasticsearch配置文件 [root@redis01 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml #添加如下两行,开启跨域访问支持(添加在配置文件最后即可) http.cors.enabled: true http.cors.allow-origin: "*" #重启elasticsearch [root@elkstack01 elasticsearch-head]# systemctl restart elasticsearch #浏览器输入10.0.0.51:9100 在es中输入https:10.0.0.51:9200连接,默认是localhost
3.使用ES-head插件的方式二
1.浏览器输入chrome://extensions/打开谷歌浏览器扩展程序
2.将插件拖到扩展程序中
3.点击右上角已经安装的插件即可访问elasticsearch-head界面
4.kibana的方式
1)特点
1.数据展示更好看
2.查询更方便
3.需要安装kibana
2)安装kibana
#1.上传代码包 [root@db01 ~]# rz kibana-6.6.0-x86_64.rpm #2.安装 [root@db01 ~]# rpm -ivh kibana-6.6.0-x86_64.rpm 3)配置kibana [root@db01 ~]# grep "^[a-z]" /etc/kibana/kibana.yml #监听端口 server.port: 5601 #监听地址 server.host: "10.0.0.51" #ES的地址和端口 elasticsearch.hosts: ["http://localhost:9200"] #kibana生成索引名称 kibana.index: ".kibana" 4)启动kibana [root@db01 ~]# systemctl start kibana.service [root@db01 ~]# netstat -lntp tcp 0 0 10.0.0.51:5601 5)访问kibana