在树莓派4上搭建EK-部署elasticsearch

elasticsearch由java开发,鉴于java跨平台的特性,运行在树莓派上也是没有问题的,但官网给的下载地址却只有x86平台的软件包。
不过经过我测试,除了xpack的机器学习功能无法在树莓派上运行,其他都很顺利。

(准确的说在树莓派4 2GB内存以上的版本才能运行elasticsearch, 1GB版的树莓派由于内存不足根本跑不起来7.x版本的elasticsearch)

环境

树莓派4 4GB版 debian buster aarch64 x 3
信息如下:

name IP
RPi-4B-1 192.168.1.101
RPi-4B-2 192.168.1.102
RPi-4B-3 192.168.1.103

elasticsearch Linux x86_64 v7.4.0 下载地址
java 1.8.0

解压&配置

下载之后,分别解压至三台树莓派的/opt目录,统一重命名为elasticsearch-7.4.0, 更改目录所有者为pi用户

1
2
3
sudo tar zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz -C /opt
sudo mv /opt/elasticsearch-7.4.0-linux-x86_64 /opt/elasticsearch-7.4.0
sudo chown -R pi:pi /opt/elasticsearch-7.4.0

配置文件位于elasticsearch-7.4.0/config/elasticsearch.yml
我的es集群配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cluster.name: RPi-ES
node.name: RPi-4B-1
node.master: true
node.data: true
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
network.host: 192.168.1.101
http.port: 9200
discovery.seed_hosts: ["192.168.1.101", "192.168.1.102", "192.168.1.103"]
cluster.initial_master_nodes: ["RPi-4B-1","RPi-4B-2","RPi-4B-3"]
xpack.ml.enabled: false
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.zen.minimum_master_nodes: 2

需要根据每个节点的具体信息分别更改node.name、network.host等配置,其他配置根据需求自行更改.
xpack.ml.enabled需要设置为false,否则会运行会报错,
http.cors.enabled和http.cors.allow-origin 开启跨域访问,否则无法使用es-head连接到es集群
discovery.zen.minimum_master_nodes: 2 防止发生脑裂, 数值为:(matser节点数/2)+1

elasticsearch自带的java在树莓派上是运行不起来的,需要在启动脚本里指定JAVA_HOME:
编辑文件config/elasticsearch-env,在如下位置添加一行(根据自己的java_home位置更改):

1
export JAVA_HOME=/opt/jdk1.8.0_221

关于config/jvm.options中的-Xms1g和-Xmx1g,默认就行,不需要更改了,4GB内存的树莓派4可以改为-Xms2g和-Xmx2g,为物理内存的一半

如果只是单机运行:可参考以下配置:

1
2
3
network.host: 192.168.1.101
http.port: 9200
xpack.ml.enabled: false

运行

在每台机器上运行

1
/opt/elasticsearch-7.4.0/bin/elasticsearch -d

稍等片刻,整个ES集群就运行起来了,在chrome上安装ElasticSearch-head的插件,可可视化访问es集群: