ElasticSearch 7.10.1 集群搭建

操作系统: centos7

准备: 4台主机(虚拟机,我使用 VirtualBox6.1)

主机名IP
noed1192.168.0.127
noed2192.168.0.128
noed3192.168.0.129
noed4192.168.0.130

准备

主机上的基础配置

为了简化配置我们把主机上的防火墙关闭

systemctl stop firewalld
systemctl disable firewalld

下载ElasticSearch RPM版本安装包

 curl -O https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/7.10.1/elasticsearch-7.10.1-x86_64.rpm

这里使用清华的镜像,用来加速下载,也可以直接使用官方的。

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.1-x86_64.rpm

你也可以直接本地下载完了之后再上传到服务器上(我用迅雷下载还是挺快的)

如果不想用IP在主机间访问那么,建议配置hosts映射

sudo cat << EOF >> /etc/hosts
192.168.0.127 node1
192.168.0.128 node2
192.168.0.129 node3
192.168.0.130 node4
EOF

cat /etc/hosts

可以重启一下网络服务 systemctl restart network

安装

通过RPM方式安装,就是离线安装,整个过程不需要互联网。

安装RPM

sudo rpm -ivh elasticsearch-7.10.1-x86_64.rpm

在这里插入图片描述
安装完成后默认es是不会启动,它提示我们需要重新加载systemd 和 启动 es,在这之前我们先调整下Systemd Service的参数,让操作系统不限制锁内存。

如果不调整,在es启用了bootstrap.memory_lock: true参数后会提供

ERROR: bootstrap checks failed memory locking requested for elasticsearch process but memory is not locked
无法启动

编辑服务配置文件

sudo vi /usr/lib/systemd/system/elasticsearch.service

[Service] 栏目下增加一个配置,如下

LimitMEMLOCK=infinity

在这里插入图片描述
重新加载Systemd配置

sudo systemctl daemon-reload

配置

在启动之前,想对集群进行配置,通过RPM安装的ES配置文件位于/etc/elasticsearch/elasticsearch.yml

/etc/elasticsearch/
├── elasticsearch.keystore
├── elasticsearch.yml
├── jvm.options
├── jvm.options.d
├── log4j2.properties
├── role_mapping.yml
├── roles.yml
├── users
└── users_roles

编辑配置搭建集群

vi /etc/elasticsearch/elasticsearch.yml

配置的参数可以参考

# 
# 集群名称
#
cluster.name: kkk
#
# ------------------------------------ Node ------------------------------------
#
# 结点名称
#
node.name: node1

#
# ----------------------------------- Paths ------------------------------------
#
# ES数据存储位置:
#
path.data: /var/lib/elasticsearch
#
# 日志文件存储位置:
#
path.logs: /var/log/elasticsearch
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
bootstrap.memory_lock: true
#
# ---------------------------------- Network -----------------------------------
#
# 设置ES绑定的IP,0.0.0.0 表示由系统指定
# 注意在安装有docker之类的地方,此处必需手动指定主机的IP地址
# 否则会发生注册之后,无法连接的问题。
#
network.host: 0.0.0.0
#
#http.port: 9200
#
# --------------------------------- Discovery ----------------------------------
#
# 主机发现,这里配置其他的节点主机名称或者IP
# 这个项目中不需要配置自己这台主机的IP,只需要提供其他节点的IP或主机名
# 
# 例如: discovery.seed_hosts: ["192.168.0.128", "192.168.0.129", "192.168.0.130"]
#
discovery.seed_hosts: ["node2", "node3", "node4"]
#
# 可选选举为主节点的节点主机名
# 这里需要填入所有主机名称,这里填入了所有的节点
# 表示集群中任何一个节点都可以选举称为主节点
#
cluster.initial_master_nodes: ["node1", "node2", "node3", "node4"]
#
# For more information, consult the discovery and cluster formation module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true

启动

在每个节点上都执行下面命令,我们先以node1节点上的命令为例:

设置开机自启动

sudo systemctl enable elasticsearch

启动ES

sudo systemctl start elasticsearch

注意首次启动可能会花费比较长的事件,请耐心等待

查看ES启动状态

 systemctl status elasticsearch

在这里插入图片描述

RPM安装的启动日志位于/var/log/elasticsearch
在这里插入图片描述
日志文件与配置文件中设置的集群名称有关系,这里我设置的集群名称为kkk,所以日志也就是kkk.log

跟踪并查看ES的日志(如果启动失败就到这里来看日志查找原因

tail -f /var/log/elasticsearch/集群名称.log

在我的例子里: tail -f /var/log/elasticsearch/kkk.log

在这里插入图片描述
如果出现了上图的问题,很有可能是 cluster.initial_master_nodes 等问题。

如果出现了ElasticsearchException: failed to bind service 那么请参考 《错误处理》章节

我们可以从其他主机上访问9200的端口来尝试看看ES是否启动成功,我们到node2上

curl node1:92000

如果有如下返回说明启动已经成功

在这里插入图片描述
这样在到其他节点中启动ES,node2、node3、node4

sudo systemctl enable elasticsearch

sudo systemctl start elasticsearch

systemctl status elasticsearch

验证

我们通过ES的RESTful接口来查看集群的状态,我们到node1节点上运行

curl node1:9200/_cat/nodes

如果返回结果中有4个节点说明我们的集群已经搭建完成
在这里插入图片描述

图中*的节点就是通过选举之后的主节点。

为了更加直观的验证和管理集群,这里推荐使用 cerebro 工具。

下面是cerebro的安装和使用的说明

下载cerebro https://github.com/lmenezes/cerebro

在这里插入图片描述

在这里插入图片描述
下载后在本机解压,我的操作使用的电脑是windows, 解压后目录结构如下:

在这里插入图片描述
我们切换目录到cerebro目录下,打开cmd运行,执行bin\目录下的启动脚本

.\bin\cerebro.bat

在这里插入图片描述
接下来我们打开浏览器访问本地localhost:9000端口
在这里插入图片描述

输入节点的IP和端口,这里输入了node1 192.168.0.127:9200
在这里插入图片描述
然后 Connect

界面如下

在这里插入图片描述

接下来我们将主节点node3关闭(关闭网络服务或关机都可以)

再次查看节点状态,这时候由于主节点丢失,会有段时间无法访问到页面,我们需要等待集群内重新完成选举

等待一会后我们重新刷新页面

在这里插入图片描述
可以发现 node1 选举为主节点了,这时候我们再把之前关闭的node3启动

在这里插入图片描述
过一会之后我们发现原来的node3主节点作为候选节点加入了集群中。

总结

通过RPM安装省去我们很多步骤

  • 创建ES专用的用户
  • 配置最大文件打开数量等
  • 系统服务制作

在RPM安装完之后会自动创建Systemd的服务

通过RPM安装的一些目录位置如下

  • 主程序位置: /usr/share/elasticsearch
  • 配置文件位置:/etc/elasticsearch
  • 进程ID文件位置:/var/run/elasticsearch
  • 日志文件位置: /var/log/elasticsearch

这些配置你可以在 /usr/lib/systemd/system/elasticsearch.service文件中找到

如果需要修改,请在修改后systemctl daemon-reload 然后重启服务systemctl restart elasticsearch 生效

插件安装

如果需要为ES安装插件,那么插件目录位于

/usr/share/elasticsearch/plugins

如果要安装插件,在上面的目录内创建相应插件的目录,然后解压进来,重启服务即可。

例如:

以IK分词器为例演示如何安装。

在插件项目中找到对应Release版本的插件包(例如 7.10.1),下载 zip 安装包

在这里插入图片描述

将安装包,解压至/usr/share/elasticsearch/plugins/ik

unzip -d /usr/share/elasticsearch/plugins/ik elasticsearch-analysis-ik-7.10.1.zip

在这里插入图片描述

调用API检查插件安装情况。

/usr/share/elasticsearch/bin/elasticsearch-plugin list

在这里插入图片描述

重启ES

sudo systemctl restart elasticsearch

官方文档 plugin-management

错误处理

ElasticsearchException: failed to bind service

在启动ES时出现该问题: ** java.nio.file.AccessDeniedException: /data/elasticsearch/nodes**

[2021-04-12T13:54:34,763][ERROR][o.e.b.Bootstrap          ] [node-2] Exception
org.elasticsearch.ElasticsearchException: failed to bind service
        at org.elasticsearch.node.Node.<init>(Node.java:729) ~[elasticsearch-7.10.1.jar:7.10.1]
        at org.elasticsearch.node.Node.<init>(Node.java:289) ~[elasticsearch-7.10.1.jar:7.10.1]
        at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:227) ~[elasticsearch-7.10.1.jar:7.10.1]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:227) ~[elasticsearch-7.10.1.jar:7.10.1]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:393) [elasticsearch-7.10.1.jar:7.10.1]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170) [elasticsearch-7.10.1.jar:7.10.1]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:161) [elasticsearch-7.10.1.jar:7.10.1]
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) [elasticsearch-7.10.1.jar:7.10.1]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:127) [elasticsearch-cli-7.10.1.jar:7.10.1]
        at org.elasticsearch.cli.Command.main(Command.java:90) [elasticsearch-cli-7.10.1.jar:7.10.1]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:126) [elasticsearch-7.10.1.jar:7.10.1]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) [elasticsearch-7.10.1.jar:7.10.1]
Caused by: java.nio.file.AccessDeniedException: /data/elasticsearch/nodes
        at sun.nio.fs.UnixException.translateToIOException(UnixException.java:90) ~[?:?]
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106) ~[?:?]
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) ~[?:?]
        at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:388) ~[?:?]
        at java.nio.file.Files.createDirectory(Files.java:694) ~[?:?]
        at java.nio.file.Files.createAndCheckIsDirectory(Files.java:801) ~[?:?]
        at java.nio.file.Files.createDirectories(Files.java:787) ~[?:?]
        at org.elasticsearch.env.NodeEnvironment.lambda$new$0(NodeEnvironment.java:275) ~[elasticsearch-7.10.1.jar:7.10.1]
        at org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:212) ~[elasticsearch-7.10.1.jar:7.10.1]
        at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:272) ~[elasticsearch-7.10.1.jar:7.10.1]
        at org.elasticsearch.node.Node.<init>(Node.java:362) ~[elasticsearch-7.10.1.jar:7.10.1]
        ... 11 more

说明ES的用户也就是 /lib/systemd/system/elasticsearch.service 中描述的用户组下的用户不具有存储目录/data/elasticsearch的访问权限。

在这里插入图片描述

解决办法就是将目录授予给ES用户:

sudo chown elasticsearch:elasticsearch /data/elasticsearch/

/data/elasticsearch/ 路径在 /etc/elasticsearch/ealsticsearch.yml中配置

  • path.data: /data/elasticsearch

参考文献

[1]. Install Elasticsearch with Docker . elastic . 2020 . https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html
[2]. elasticsearch不能使用root启动问题解决. 博客园 . 秋寻草 . 2019.01 . https://www.cnblogs.com/gcgc/p/10297563.html
[3]. 解决:max file descriptors [65535] for elasticsearch process is too low . csdn . 春风化作秋雨 . 2019.05 . https://blog.csdn.net/jiahao1186/article/details/90235771
[4]. ELK搭建过程中出现的问题与解决方法汇总 . 博客园 . Hellxz博客 . 2019-06 . https://www.cnblogs.com/hellxz/p/11057234.html
[5]. 【已解决】ERROR: bootstrap checks failed memory locking requested for elasticsearch process but memory is not locked
. 博客园 . Hellxz博客 . 2019-06 . https://www.cnblogs.com/hellxz/p/11009634.html

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch7.9.0是一个开源的分布式搜索和分析引擎,用于构建高效、可扩展的实时搜索解决方案。要搭建Elasticsearch7.9.0集群,需要按照以下步骤进行操作: 1. 下载和安装Elasticsearch7.9.0:从官方网站上下载Elasticsearch7.9.0压缩包,并解压到合适的目录下。 2. 配置Elasticsearch集群参数:在每个节点上的elasticsearch.yml配置文件中,设置集群名称、节点名称、绑定IP地址等参数。确保每个节点的配置文件相同,以便节点可以识别彼此。 3. 修改JVM配置:根据服务器的硬件配置和需求,修改jvm.options文件中的内存分配参数,以确保Elasticsearch能够充分利用可用的系统资源。 4. 启动Elasticsearch节点:在每个节点的终端或命令行中,切换到Elasticsearch的安装目录,并运行./bin/elasticsearch命令来启动节点。确保每个节点都能正常启动。 5. 集群发现和节点自动加入:在elasticsearch.yml配置文件中,配置集群发现机制,如使用单播或多播,以及设置初始主节点。这将使得新的节点能够自动连接到现有的Elasticsearch集群。 6. 验证集群状态:使用curl或其他HTTP客户端发送请求到任意一个节点的IP地址和端口号,查看集群的状态信息。确保所有的节点都连接到集群,并且状态正常。 7. 索引和搜索数据:使用Elasticsearch的REST API或Java客户端,可以索引和搜索数据。通过创建索引、定义映射、增删改查操作可以实现灵活和高效的搜索和分析功能。 8. 监控集群健康和性能:使用Elasticsearch提供的监控工具或第三方插件,可以实时监控集群的健康状态、性能指标和查询性能。这有助于及时发现和解决潜在的问题。 总结:以上是搭建Elasticsearch7.9.0集群的基本步骤。搭建集群后,可以实现数据的高可用性、可扩展性和分布式计算,为企业提供全文搜索、日志分析等功能。通过合理的集群配置、优化和监控,可以提高集群的性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值