一、什么是Elasticsearch?
1、基本概念及特征
(1)天生支持分布式:不需要借助其他组件,比如zookeeper
(2)搜索:重点在搜索与海量数据存储
(3)聚合分析:也支持数据聚合分析
(4)存储引擎:是一个存储引擎
(5)由java开发的,基于Lucene的,开源分布式搜索引擎
2、Elastic Stack技术栈,除了elasticsearch,还有(ELK):
(1)Kibana:图形化界面
(2)Elsticsearch:存储搜索引擎
(3)Logstash:消息采集器
(4)Beats(新出来的,取代了logstah的部分功能),有些老项目依然在用logstash
二、解决哪些业务问题:
1、适合的场景:
(1)海量数据
(2)全文检索
2、不适合的场景:
(1)管理数据:
(2)事务场景:不支持事务
(3)大单页查询:如从100亿查询10亿为一页
(4)数据实时写入和更新:海量数据实时写入有问题
3、引入两个概念:OLAP和OLTP
(1)OLTP:联机事务处理类数据库,具备ACID,属性如mysql,MongoDB(也支持事务)
(2)OLAP:联机分析处理类数据库,es,查询,全文搜索;
(3)各个数据库的技术选型:
创始人:Shay Banon
4、业务场景:
(1)搜索引擎
(2)电商平台
(3)导航、打车、外卖
(4)音频视频软件
(5)github
(6)ELK日志系统
(7)站内搜索
5、技术特性:
java开发,Lucene框架,json格式的数据格式,支持分布式、PB级海量数据、高性能、高可用、易扩展;
三、安装
两种安装模式:开发模式和生产模式
1、开发模式,一般用于非生产环境,windows,非集群;
2、由于ES是基于java语言开发的,因此需要安装与jdk版本匹配的ES版本;
版本兼容:
es6 jdk8
es7.17-7.18 jdk17-
es8.0+ jdk17
es8.5 + jdk18-19
3、安装jdk17,由于版本兼容问题,尽量使用ES7+和jdk17;
(1)jdk17下载地址:
因为本地还有安装jdk8,用于跑其他项目,因此下载的压缩包版本:
(2)配置ES的java环境变量,注意,变量名一定要写ES_JAVA_HOME,因为ES默认会在本地找这个变量名,如果找不到,才会使用自带的jdk;
(3)官网下载windows版本的压缩包,解压后启动即可:
- ES解压目录下双击启动脚本即可:
- 启动第一行日志,忽略JAVA_HOME环境变量,使用ES_JAVA_HOME:
- 查看日志,启动成功,默认单节点启动:
- 输入https://localhost:9200,输入用户名:elastic/****************,即可登录:
- 注意:es默认的账号是elastic,密码会在启动日志里面输出
- 使用浏览器访问,注意必须是https,使用谷歌浏览器,提示不安全链接时,点击高级,继续访问
四、ES多种运行模式:单节点发现、单节点集群、多节点集群
1、单节点发现模式:在配置文件配置:
discovery.type:single-node
特点:选举自己作为主节点并且不允许其他节点加入
2、单节点集群:选举自己作为主节点,但是允许其他节点加入
- 将ES压缩包在本地复制多份:
- 所有节点关闭securety安全检查
- 配置elasticsearch.yml:
cluster.name: elastic_name
node.name: elastic_node_01
xpack.security.enabled: false
- cluster.name: 集群名称,多个节点取一个集群名称即可,默认是elsaticsearch
- node.name: 节点名称,同一个集群内多个节点名称不能重复
- http.port:默认9200,默认递增
- transport.port:节点之间的通讯端口,默认9300,默认递增
- 编写bat启动文件,并双击启动bat文件:
- 浏览器访问:三个节点端口递增,都可以访问
注意:如果之前已经启动过单节点,先删除es安装目录下的data文件夹和config文件夹下的elasticsearch.keystore文件,否则启动报错;
如果启动时,报错:
解决,配置elasticsearch.yml,禁用地图更新:
ingest.geoip.downloader.enabled: false
ES的集群是基于ES的自动发现策略实现的,什么是自动发现策略?即只需要关闭安全检查,在本地,不需要增加任何配置,es会自动组件集群,根据默认端口自增,生成多个节点组成的集群;
这种集群模式的优点:
简单、一劳永逸
缺点:多个节点复制多份,非常浪费磁盘空间
为了解决磁盘空间的问题,也可以使用一份节点文件,通过启动时指定不同的参数来启动多个节点
-Epath.data=data1
-Epath.logs=logs1
-Enode.name=node1
-Ecluster.name=elastic
-Expack.security.enabled=false
-Ehttp.port=9200
指定不同的data和log存放的目录,使用相同的解压文件来启动es
五、ES官方推荐的客户端Kibana
1、下载及安装: