elasticsearch初学终极教程 - 第二章: 把Elastic Search在本地跑起来

卡拉先生
发布于 2020年05月23日 | 上次编辑:2020年05月26日

本章目录

如果一切顺利的话,学完本章大概需要20-30分钟左右。如果你被卡住或者需要视频讲解,请关注我的公众号 HiXieke,并回复ES(大写)。有问题的话,也请将问题发至 kalasearch at gmail.com 或是公众号后台。

在本章中,我们先将Elastic Search在你的本地跑起来,然后用Kibana来让我们的“成果”能显示出来。接着,我们看一下Elastic是怎么存储数据的,这有利于帮助我们之后理解搜索怎么组织数据。

最后,我们聊一聊Elastic Search的服务架构,也就是在Elastic内部的服务(部件)之间,是怎么设计的,你在搜索时,这些服务又是怎样协同,来完成一次搜索的。

另外,由于安装Elastic的流程时常变动(比如更新版本之类),我会将本章开源出来放至github上,欢迎在各种环境中的小伙伴们为这篇教程添砖加瓦。

在Mac上安装Elastic Search + Kibana

我们一步一步地来在Mac上安装Elastic Search和Kibana。之所以要安装Kibana,是因为在后面的教程中,为了方便展示,我会用Kibana来请求Elastic并截图。

这里我们有两个选择,用Homebrew(mac下有名的安装器)安装,或直接下载Elastic文件来安装。如果你从来没用听过,用过brew这个命令,那不用纠结,直接跳到选项二就好,不会有差别。

撇开安装Elastic Search不谈,我个人强烈推荐你学习一下Homebrew这个安装工具,投资一两个小时但长远看可以帮你省下非常多的时间

选项一:用Homebrew安装Elastic Search和Kibana

如果需要确认你的本地是否有安装Homebrew的话,请在terminal里面执行

which brew

如果你有安装brew的话,它会告诉你brew的执行路径。否则它会告诉你找不到brew命令。如果没有brew命令的话,你可以尝试安装Homebrew,或者直接跳到下文用选项二来安装。

然后告诉brew你要添加elastic search的tap,最后开始安装elastic search。复制以下命令到terminal中,每行我加了注释你理解,不影响命令执行。

注意,你执行以下命令的当前路径无所谓,因为brew会把elastic装到一个默认的路径。

brew tap elastic/tap # 告诉brew你要添加elastic的安装源
brew install elastic/tap/elasticsearch-full # 开始安装elastic search

执行以上命令的期望输出应该类似下图。

用Homebrew安装elasticsearch

安装完后,它会提示你,刚才的brew命令把elastic search安装到了哪里。 上面的例子中,数据被存放至/usr/local/var/lib/elasticsearch/elasticsearch_eddiexie/

Elastic Search产生的日志会被放至 /usr/local/var/log/elasticsearch/elasticsearch_eddiexie.log

Elastic Search用的插件在/usr/local/var/elasticsearch/plugins/ (先不用管什么是Elastic插件,之后的章节会讲到)

Elastic Search的配置文件会被放在/usr/local/etc/elasticsearch/

请注意,你在你本地运行的路径跟这里肯定不会完全一致,比如如果你的Mac的登录名是xiaoming的话,那你的日志文件名更可能是elasticsearch_xiaoming.log

安装完毕后,重启terminal,然后在命令行用命令elasticsearch并回车,你应该可以看到elastic启动。

安装Kibana的步骤几乎一模一样,在terminal一个新窗口里执行以下brew命令即可

brew install elastic/tap/kibana-full

Kibana是一个与Elastic Search几乎独立的项目。可以把Kibana理解为一个专门用来操作和监控Elastic Search的看板,但是即使你不安装Kibana,你的Elastic Search应该也可以完全无碍地运行。

在Elastic Search已经在另一个terminal运行的前提下,新开一个terminal窗口,运行kibana。此时打开你的浏览器,并到Kibana的默认地址: http://localhost:5601 ,应该可以看到Kibana开始运行了

Kibana开始运行

注意如果此处发现打不开页面,请先检查elasticsearch命令是不是在一个窗口运行,否则Kibana会无法连接上。同时检查kibana命令是不是在另一个窗口运行。总之,需要保证按照上文顺序,先在一个窗口中成功启动elasticsearch,再在另一个窗口中启动kibana

选项二:直接安装

另一个适用于Unix/Linux和Mac的安装方法是跳过Homebrew,直接下载安装Elastic Search。

先确认你本地有安装好wgettar,可以运行

which wget
which tar

如果你有安装这两个工具的话,which命令会输出它们对应的路径,否则会输出找不到命令。如果出现找不到命令的话,你需要先安装好wgettar

用以下命令下载和解压elastic

注意,这会把elastic search文件放在你执行以下命令的当前目录。因此我建议你到类似~/workspace/之类的地方执行。如果没有~/workplace文件夹的话,请先创建。

mkdir -p ~/workplace # 创建工作区文件夹,可选但建议;方便下文解释路径
cd ~/workplace

然后执行以下命令

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.0-darwin-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.0-darwin-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.7.0-darwin-x86_64.tar.gz.sha512 
tar -xzf elasticsearch-7.7.0-darwin-x86_64.tar.gz
cd elasticsearch-7.7.0/ 

这里,我们先用wget下载elastic本身,再下载由Elastic提供的sha512。接着我们用shasum检查下载的文件是不是符合它应有的值(确保文件完整性)。

最后我们解压下载的压缩包,并进入elasticsearch-7.7.0文件夹。

在这个文件夹里,bin文件夹中放的是可执行文件。如果你执行

./bin/elasticsearch

则应该会看到Elastic Search开始运行。这与选项一中的安装方式不同,Elastic存放数据的路径会变为当前路径下的data文件夹。如果你按我的建议把elastic-search放到了~/workplace中的话,那么数据应该在以下路径

~/workplace/elasticsearch-7.7.0/data

由于我手里暂时没有windows系统,先跳过本节。

用Kibana来可视化Elastic Search的操作

安装好Elastic Search和Kibana之后,我们可以来尝试一下使用Kibana与Elastic Search进行交互。

Elastic Search和Kibana是什么关系呢?

简单讲,Elastic Search本身是搜索服务器,与这个服务器交互唯一的方式是通过HTTP请求。然而很多情况下,用户不仅需要用HTTP请求把数据放入Elastic服务器,或用HTTP请求进行搜索。同时用户希望简化操作,或者将数据可视化。

而Kibana就是这样一个工具。有了Kibana之后,数据请求就不用在命令行或HTTP客户端发送HTTP请求了,而可以到Kibana的页面,以更用户友好的方式来使用Elastic Search。

再通俗点,Elastic是核心,Kibana是外面那层方便你使用的壳。

为什么在这个教程里需要Kibana

这个教程面向的当然都是聪明的程序员们,那为什么需要一个Kibana呢?

原因有3个

  1. 方便我教学 - 在教学时有一个图形界面会大大简化我教学时的指示,而让读者也更容易跟着尝试
  2. 方便你在学完Elastic Search之后,在生产环境监控和日常维护
  3. 方便你与不熟悉程序的同事交流和沟通时

需要澄清的是,我不会在这个教程中把重心放在Kibana上,而会继续着重剖析Elastic Search本身。

Kibana初探

在安装好Kibana之后,我们可以用它带的Console来向Elastic Search发送请求。当然如果你使用cURL、postman或者其它HTTP client更熟练的话,直接用它们也可以。

我们在浏览器中敲入Kibana运行的默认本地地址

http://localhost:5601/

在7.3以上版本,第一次打开Kibana时,它会问你需不需要一些演示数据。这里我们点右边不需要即可。

Kibana初探:不需要样例数据

然后我们进入Kibana的首页。在左边侧边栏倒数第三个图标,你会看到有一个Dev Tools-开发者工具,这是我们主要用Kibana与Elastic Search打交道的地方。

Kibana开发者工具

你也可以直接通过URL进入,这个页面的URL是http://localhost:5601/app/kibana#/dev_tools/console

那么从这里开始,以后的教程我都会假设你可以顺利进入开发者模式。如果有问题的话,请在公众号HiXieke里找到我。

在Kibana Console(操控台)里,我们可以开始向Elastic Search发出请求。那么我们来向Elastic Search发出第一个请求吧!

向Elastic Search发出第一条请求

前面的铺垫其实已经很多了,走到这里估计已经吓退了80%只是想试试Elastic Search的同学。这也是我们做卡拉搜索的初衷,让搜索不要这么难用——当然这是后话,我们继续Elastic Search的征程。

在Kibana的控制台里,我们敲入第一条请求

GET _cluster/health

然后点右边的运行图标即可。这条请求要求Elastic返回集群的健康状态,但什么是集群或者这条命令的具体意义目前不重要,请先忽视。

Kibana运行命令

运行后,右边的结果中会显示运行的结果。可以看到,集群的健康状态(status)为green,也就是状态健康。而当前集群中有number_of_nodes即一个结点。这个集群的名字叫elasticsearch,这是elastic默认给的集群名字。这些之后的教程都会详述,这里先跳过。

看看Elastic文件夹里都有些什么

到此为止,我们已经向Elastic成功发出了第一条指令。

那么你有没有一点好奇:Elastic的文件夹里到底有些什么?有一些什么工具、配置?我的数据又放在了哪?

我们现在就来探索一下它的文件夹结构。知道这些文件夹和数据的存在,对于你稍候开始深入学习Elastic Search会有非常大的帮助。举个例子,当你的数据跑起来后,发现需要调整一下日志路径,那么熟知Elastic的文件夹结构,就可以帮你快速找到需要更改的地方。

再高级一点的应用,比如你需要更改Elastic的JVM选项,用多少内存等等,也需要知道去哪里配置。如果你需要备份Elastic Search的数据,则需要知道怎么找到data文件夹。

文件夹路径

前面我们提到了两种安装模式。如果你用的是选项一,即用Homebrewbrew命令安装的Elastic Search,那么你的Elastic文件夹会在/usr/local/var/lib/elasticsearch/elasticsearch_你的用户名/

比如在我的Mac上,数据文件夹就在/usr/local/var/lib/elasticsearch/elasticsearch_eddiexie/。而Elastic主文件夹会被放在/usr/local/Cellar/elasticsearch-full/7.7.0/bin

Elastic Search文件夹内的文件结构

这里我们以选项二为例,即直接用wget下载解压包。在下载解压之后(我们假设你解压到了~/workspace),用任意编辑器打开文件夹,文件结构如下

ElasticSearch文件夹结构

这里的几个重要的文件夹:

  • data: 你的索引数据,即你存放具体用来搜索数据的地方
  • config: elastic-search的全局设置和你的具体设置,如果你需要更改JVM,数据路径,日志路径等,就需要改这里。同时端口设置等也都在这里
  • bin: 可执行文件。我们用来启动elasticsearch的脚本就在这里面(回忆一下,上文中我们用./bin/elasticsearch启动的elastic search)
  • jdk.app:自带的JDK,不重要可忽略
  • plugins: 放置插件的地方,比如第三方的分词器等
  • modules: elastic search自带的一些模块,不可删除。比如x-pack模块等(对我们学习不重要,可忽略)

我鼓励你到处点点看看,看看这些文件夹里都有一些什么文件。久而久之也许会对你之后遇到问题时解决问题提供思路。

Elastic Search的源文件在哪里

请注意,如果你是需要找Elastic Search本身的源代码,比如说你想要给elastic贡献代码,或是单纯想要学习的话,需要找的ElasticSearch的git repo。而你上文中提到的解压后的Elastic文件夹中,是只含编译后的可运行文件的(fat-jar)。

如果你对阅读源码感兴趣,我之后会写一些更深入的源码阅读文章,欢迎关注(公众号HiXieke)

本章总结

恭喜你!

到这里,你已经能顺利地让Elastic Search跑起来,并在Kibana中向Elastic Search服务器发送了第一个请求。同时我们还一起探索了Elastic Search的文件夹结构,为之后的深入学习打下了扎实的基础。

请务必喝一杯茶或咖啡犒劳一下自己。接下来我们要一起,走入Elastic Search的心脏——第三章:Elastic Search和索引

© 2020, 卡拉搜索, Built with ❤️ in San Francisco + Beijing

京ICP备15049164号-3