安装

Elasticsearch 是用 Java 开发的,所以首先要安装 Java。

安装 Java

主流的 Java 发行版本有官方版 Oracle JDK 和社区版 OpenJDK,两者的区别是 Oracle JDK 商业版收费,个人版免费,并且提供打包好的安装版本,下载页面 选择对应的平台安装包,点击安装就行了。而 OpenJDK 则是完全开源免费,推荐使用 OpenJDK。

安装开源的 Java 版本管理工具 jabba

macOS / Linux 平台,在终端执行:

curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh

Windows 平台,在 powershell 中执行:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-Expression (
  Invoke-WebRequest https://github.com/shyiko/jabba/raw/master/install.ps1 -UseBasicParsing
).Content

执行安装命令:

jabba install openjdk@1.14.0-1

验证:

java --version

如果返回如下信息,就表示安装成功:

openjdk 14.0.1 2020-04-14
OpenJDK Runtime Environment (build 14.0.1+7)
OpenJDK 64-Bit Server VM (build 14.0.1+7, mixed mode, sharing)

安装 Elasticsearch

进入 Elasticsearch 官方下载地址 选在平台对应的版本。

解压缩:

Linux:

tar -xvf elasticsearch-7.7.1-linux-x86_64.tar.gz

Mac:

tar -xvf elasticsearch-7.7.1-darwin-x86_64.tar.gz

Windows PowerShell:

Expand-Archive elasticsearch-7.7.1-windows-x86_64.zip
运行:

Linux/Mac:

cd elasticsearch-7.7.1/
./bin/elasticsearch

Windows

cd elasticsearch-7.7.1\
.\bin\elasticsearch.bat

现在有一个单节点的 Elasticsearch 启动运行。

注意查看运行中的日志:

$ using [1] data paths, mounts [[/System/Volumes/Data (/dev/disk1s1)]], net usable_space [32.1gb], net total_space [112.8gb], types [apfs]
$ heap size [990.7mb], compressed ordinary object pointers [true]
$ node name [MacBook-Pro.local], node ID [CIbFj6fpR9SptxKZERm3rg], cluster name [elasticsearch]
$ version[7.7.1], pid[75525], build[default/tar/ad56dce891c901a492bb1ee393f12dfff473a423/2020-05-28T16:30:01.040088Z], OS[Mac OS X/10.15.4/x86_64], JVM[Oracle Corporation/OpenJDK 64-Bit Server VM/11.0.7/11.0.7+10]
$ ...
$ using discovery type [zen] and seed hosts providers [settings]
$ initialized
$ starting ...
$ publish_address {127.0.0.1:9300}, bound_addresses {[::1]:9300}, {127.0.0.1:9300}
$ the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
$ cluster UUID [zTr3Oy4XQqKfumywlDkBOA]
$ publish_address {127.0.0.1:9200}, bound_addresses {[::1]:9200}, {127.0.0.1:9200}
$ started

Elasticsearch 先是检测了磁盘空间、内存等硬件信息,然后检测了版本等信息,之后完成初始化,绑定 9300 和 9200 端口。端口 9300 用于集群中的节点相互通信,如果这个端口没有打开,节点将无法形成一个集群。端口 9200 用于客户端通信,完成数据请求。

尽管 7.7 版本 声称降低内存占用,但是,单节点 Elasticsearch 启动就占用了 990.7MB 堆空间,而且 Elasticsearch 会索引所有字段,所以建议在内存不小于 2GB 的电脑上运行。

另外,由于绑定的地址是 127.0.0.1:9200 只能在本机访问,如果需要远程访问,需要更改配置文件。在文件 config/elasticsearch.yml 中找到含有 network.host 的行,删除注释,在后面添加 0.0.0.0。也可以更改 http.port 来更改端口。 如下:

network.host: 0.0.0.0
http.port: 9201

由于 Elasticsearch 未设置密码导致的数据泄漏问题时有发生,建议使用 Elasticsearch 时一定要设置密码。在配置文件 config/elasticsearch.yml 后面加上 xpack.security.enabled: true,重启 Elasticsearch 之后,在新的终端输入如下命令:

bin/elasticsearch-setup-passwords interactive

根据提示分别输入 elastic、apm_system、kibana、logstash_system、beats_system、remote_monitoring_user 的密码,

Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y

Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:

也可以直接使用 Elasticsearch 生成的随机密码:

bin/elasticsearch-setup-passwords  auto 

测试

如果没有设置密码,打开浏览器输入 http://127.0.0.1:9200/ ,或者用命令行运行

curl http://127.0.0.1:9200/

如果得到如下信息就表示系统启动正常。

{
  "name" : "MacBook-Pro.local",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "zTr3Oy4XQqKfumywlDkBOA",
  "version" : {
    "number" : "7.7.1",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "ad56dce891c901a492bb1ee393f12dfff473a423",
    "build_date" : "2020-05-28T16:30:01.040088Z",
    "build_snapshot" : false,
    "lucene_version" : "8.5.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

浏览器输入 http://127.0.0.1:9200/_cat/health ,会返回集群的健康状况:

1591412704 03:05:04 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%

其中,green 表示 健康;yellow 表示 所有的主分片都完成分配,但是某些副分片可能有问题,需要修复;red 表示 一个或者多个主分片没有分配,因此某些数据不可用。

如果已经设置密码,使用浏览器访问 http://127.0.0.1:9200/ 会提示用户输入用户名密码,根据提示输入信息。

firefox require password
请输入密码

curl 直接访问会返回 401 错误,我们需要在访问时,带上用户信息。注意把 <password> 改成刚才设置的密码。

curl --user elastic:<password> http://127.0.0.1:9200/

会返回同样的信息。