目录
Elasticsearch 是一个实时的分布式搜索分析引擎, 它能让你以一个之前从未有过的速度和规模,去探索你的数据。它可以快速地储存、搜索和分析海量数据,维基百科、Stack Overflow、Github 都采用它:
- Wikipedia 使用 Elasticsearch 提供带有高亮片段的全文搜索,还有 search-as-you-type 和 did-you-mean 的建议;
- 卫报 使用 Elasticsearch 将网络社交数据结合到访客日志中,实时的给它的编辑们提供公众对于新文章的反馈;
- Stack Overflow 将地理位置查询融入全文检索中去,并且使用 more-like-this 接口去查找相关的问题与答案;
- GitHub 使用 Elasticsearch 对1300亿行代码进行查询。
一、简介
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful Web接口,同时Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
- Elastic能够解决的问题主要包括:
- 数据库字段太多,查询太慢,索引没有办法再做优化;
- 数据库一个count就拖死全表;
- mysql的limit翻到几十几百万页后实在是太慢;
- 数据库like实在太慢,每次like整个服务器cpu内存飙高,拖慢整个线上服务;
- 想要对外/内提供db里的数据的全文检索服务;
- 提供日志(程序运行)查询功能。
Elastic是基于java开发的语言,在ElasticSearch 6.5版本开始,支持了Java11的版本。在7.0开始,ElasticSaerch已经内置了java开发环境。
二、下载并运行ElasticSearch
可以从https://www.elastic.co/cn/downloads/上下载对应的ElasticSearch产品,包括:
- Elasticsearch(分布式、RESTful 风格的搜索和分析)
- Kibana(实现数据可视化)
- Logstash(采集、转换、充实,然后输出)
- 其他(APM、App Search等)
三、在Windows上运行ElasticSearch
1.在Windows环境部署ElasticSearch环境较为容易,下载对应的ElasticSearch压缩包,进行解压,对应的目录如下图所示:
2.进入bin环境运行ElasticSearch
3.ElasticSearch插件相关命令:
#查看ElasticSearch已安装的插件
bin\elasticsearch-plugin list
#ElasticSearch安装插件
bin\elasticsearch-plugin install <插件名称>
#移除ElasticSearch安装插件
bin\elasticsearch-plugin remove <插件名称>
4.创建多节点集群时,使用命令:
#创建一个所属集群为geektime,节点名称为node0,节点数据存储路径为data0_data的节点
.\bin\elasticsearch -E node.name=node0 -E cluster.name=geektime -E path.data=data0_data -d
#创建一个所属集群为geektime,节点名称为node1,节点数据存储路径为data1_data的节点
.\bin\elasticsearch -E node.name=node1 -E cluster.name=geektime -E path.data=data1_data -d
#创建一个所属集群为geektime,节点名称为node2,节点数据存储路径为data2_data的节点
.\bin\elasticsearch -E node.name=node2 -E cluster.name=geektime -E path.data=data2_data -d
#创建一个所属集群为geektime,节点名称为node3,节点数据存储路径为data3_data的节点
.\bin\elasticsearch -E node.name=node3 -E cluster.name=geektime -E path.data=data3_data -d
验证集群是否启动
注:大家可以查看_cat下面包含哪些命令,你应该会发现新大陆哦!
现在,楼主在工作中经常接触到docker技术,接下来就看看怎么在docker上部署ElasticSearch集群吧!
四、在docker上运行ElasticSearch
1、ElasticSearch镜像的制作
楼主是在阿里云的服务器上自己搭建的docker工具,具体的搭建过程请参考 配置fabric(超级记账本)时docker安装教程,直接利用docker pull命令拉取docker镜像
注:如果想自己定制化镜像的话,那就得看看源码了,镜像制作的方式以后再写文章吧!
以单节点的形式部署是,命令如下:
docker run --name es-node0 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -d <镜像名称:tag>
以集群的方式启动时,创建docker-compose.yml:
version: '3'
services:
es-node0:
image: elasticsearch:7.6.2
container_name: es-node0
privileged: true
environment:
- cluster.name=elasticsearch-cluster
- node.name=node0
- node.master=true
- node.data=true
#- bootstrap.memory_lock=true
- http.cors.enabled=true
- http.cors.allow-origin=*
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
- "discovery.zen.ping.unicast.hosts=es-node0,es-node1,es-node2"
- "discovery.zen.minimum_master_nodes=2"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./node0/data:/usr/share/elasticsearch/data
- ./node0/logs:/usr/share/elasticsearch/logs
ports:
- 9200:9200
es-node1:
image: elasticsearch:7.6.2
container_name: es-node1
privileged: true
environment:
- cluster.name=elasticsearch-cluster
- node.name=node1
- node.master=true
- node.data=true
- bootstrap.memory_lock=true
- http.cors.enabled=true
- http.cors.allow-origin=*
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.zen.ping.unicast.hosts=es-node0,es-node1,es-node2"
- "discovery.zen.minimum_master_nodes=2"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./node1/data:/usr/share/elasticsearch/data
- ./node1/logs:/usr/share/elasticsearch/logs
ports:
- 9201:9200
es-node2:
image: elasticsearch:7.6.2
container_name: es-node2
privileged: true
environment:
- cluster.name=elasticsearch-cluster
- node.name=node2
- node.master=true
- node.data=true
- bootstrap.memory_lock=true
- http.cors.enabled=true
- http.cors.allow-origin=*
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.zen.ping.unicast.hosts=es-node0,es-node1,es-node2"
- "discovery.zen.minimum_master_nodes=2"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./node2/data:/usr/share/elasticsearch/data
- ./node2/logs:/usr/share/elasticsearch/logs
ports:
- 9202:9200
注:在挂载的时候记得给宿主机挂载目录更改权限哦,chmod -R 777 XXX
访问http://ip:9200/_cat/nodes?v即可查看集群状态