ElasticSearch-(一)Ubuntu20.04安装ElasticSearch并远程连接

本文最后更新于:February 27, 2022 pm

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎。Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

目录

在 Ubuntu 上安装 Elasticsearch 非常直接。我们将会启用 Docker 软件源,导入 GPG key,并且安装 Elasticsearch。Elasticsearch 软件包和 OpenJDK 一起打包,所以不需要去安装 Java。

安装

首先,升级软件包索引,并且安装必要的依赖软件包,来添加一个新的 Https 软件源:

1
2
sudo apt update
sudo apt install apt-transport-https ca-certificates wget

导入软件源的 GPG key:

1
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

上面的命令应该会输出OK,它意味着 key 已经被成功导入,这个软件源的软件包也被认为是被信任的。

下一步, 添加 Elasticsearch 软件源 到系统, 输入:

1
sudo sh -c 'echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list'

注意:如果你想安装前一个版本的 Elasticsearch,将上面命令中的7.x替换成你需要的版本即可。否则无需改动。

安装Elasticsearch:

1
2
sudo apt update
sudo apt install elasticsearch

Elasticsearch 服务在安装完成后不会自动启动。想要启动服务,并且启用开机启动:

1
sudo systemctl enable --now elasticsearch.service

验证 Elasticsearch 正在运行,使用curl来发送一个 HTTP 请求给端口9200:

1
curl -X GET "localhost:9200/"

能看到类似下面这样,则表示成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"name" : "VM-12-8-ubuntu",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "8qRkaq2SR3mCb_Y9xRF5nA",
"version" : {
"number" : "7.17.0",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "bee8632f705acaa9s6dae2e7140defd4d9ec56bd",
"build_date" : "2022-01-28T08:36:04.875279988Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

如果你看到curl: (7) Failed to connect to localhost port 9200: Connection refused,请稍等几秒钟并且再次尝试。

查看由 Elasticsearch 服务记录的消息,使用下面的命令:

1
sudo journalctl -u elasticsearch

这样,Elasticsearch 已经在 Ubuntu 上安装好了。

查看状态

1
systemctl status elasticsearch.service

配置

Elasticsearch 数据被存储在 /var/lib/elasticsearch 目录。配置文件被定位在/etc/elasticsearch 并且 Java 启动选项可以通过/etc/default/elasticsearch文件来配置。

远程访问

开箱可用的 Elasticsearch,没有实现授权,因此它可以被任何人通过 HTTP API 来访问。

想要允许远程访问你的 Elasticsearch 服务器,你将需要配置你的防火墙,并且打开 TCP 端口 9200。

通常,你将仅仅允许来自指定 IP 或者指定 IP 范围对 服务器的访问。例如,仅仅允许来自192.168.121.0/24子网的访问,你将允许下面的命令:

1
sudo ufw allow proto tcp from 192.168.121.0/24 to any port 9200 

可根据需求,自行更改ip范围,如运行所有网络:

1
sudo ufw allow proto tcp from 0.0.0.0/0 to any port 9200 

配置文件

编辑 Elasticsearch 配置文件,并且允许 Elasticsearch 监听其他的连接。

根据自己熟悉哪种编辑器,选择其一执行:

1
2
sudo vim /etc/elasticsearch/elasticsearch.yml
sudo nano /etc/elasticsearch/elasticsearch.yml

搜索包括network.host的这一行,取消它的注释,并且修改值为0.0.0.0:

1
network.host: 0.0.0.0

搜索包括http.port的这一行,取消它的注释,并且修改远程访问的端口号,如 9200

1
http.port: 9200

重启 Elasticsearch 服务,使得应用生效:

1
sudo systemctl restart elasticsearch

报错处理

在重启时,可能会报错:

1
Job for elasticsearch.service failed because the control process exited with error code.

解决办法

修改配置文件:

1
sudo vim /etc/elasticsearch/elasticsearch.yml

找到:

1
discovery.seed_hosts: ["host1","host2"]

取消注释并将其改为(允许全部网络):

1
discovery.seed_hosts: ["0.0.0.0"]

再重启测试即可

1
2
sudo systemctl restart elasticsearch
curl -X GET "localhost:9200/"

安装IK分词器

https://github.com/medcl/elasticsearch-analysis-ik/releases

下载对应的版本。

下载后将其解压到 /usr/share/elasticsearch/plugins/ik 下面并进行解压。然后再重启elasticsearch。

若报有安全警报 ,可以在elasticsearch.yml 中 添加 xpack.security.enabled: false 命令即可,然后需要重启es。

启动问题

Elasticsearch不允许root用户直接运行,所以要创建新用户。

1
2
3
4
5
useradd loong # 新增loong用户
passwd loong # 为用户loong设置密码

userdel -r loong # 删除用户
chown -R loong:loong /opt/module/es # 文件夹所有者