15

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

 3 years ago
source link: https://kalasearch.cn/blog/chapter2-run-elastic-search-locally/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

发布于 2020年05月24日 | 上次编辑:2020年07月19日

如果一切顺利的话,学完本章大概需要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
用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开始运行
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上安装Elastic Search

由于我手里暂时没有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初探:不需要样例数据

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

Kibana开发者工具
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运行命令
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文件夹结构
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和索引


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK