掘金 后端 ( ) • 2024-05-16 13:21

摘要: Elasticsearch(简称ES)是一个基于Lucene的开源搜索引擎,它提供了全文搜索、结构化搜索以及分析功能。为了支持大规模数据处理和高效查询,ES支持集群部署。本文将详细介绍如何配置ES集群,包括es安装、节点配置、集群发现、JVM参数调优等。

一、相关概念

集群(Cluster):一个或多个节点组成的集合,共同提供数据存储和搜索服务。

节点(Node):ES实例运行在一个JVM进程中,称为一个节点。

索引(Index):文档的集合,类似于数据库中的表。

分片(Shard):索引可以被分为多个分片,每个分片是一个Lucene实例,用于存储数据。

副本(Replica):为了提高查询性能和容错性,可以为每个分片创建多个副本。

二、安装ES

1.下载

https://www.elastic.co/cn/downloads/past-releases/

或者使用命令:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.1-linux-x86_64.tar.gz
解压:
tar -zxvf elasticsearch-7.7.1-linux-x86_64.tar.gz

2.添加用户

ES不能使用root启动,需创建普通用户

#创建新用户elasticsearch ,设置用户组为elasticsearch ,密码123456
useradd elasticsearch -g elasticsearch -p 123456

3.配置集群

# 新增es目录
mkdir /data/elasticsearch/data /data/elasticsearch/logs

# 修改文件拥有者
chown -R elasticsearch:elasticsearch /data/elasticsearch

# 到es目录的config目录下修改配置文件
vim ./config/elasticsearch.yml

elasticsearch.yml配置

# 集群名称
cluster.name: my-application

# 节点名称
node.name: node-1

# 是否有资格被选举为master,ES默认集群中第一台机器为主节点
# node.master: true

# 是否存储数据,默认情况下,所有的节点都被认为是数据节点
# node.data: true

# 数据目录
path.data: /data/elasticsearch/data

# 日志目录
path.logs: /data/elasticsearch/logs

# 0.0.0.0,表示对外开放,如对特定ip开放则改为指定ip
network.host: 0.0.0.0

# 对外服务http端口,默认为9200
http.port: 9200

# 内部节点之间沟通端⼝
transport.tcp.port: 9300

# 集群中 node 节点发现列表
discovery.seed_hosts: ["172.16.130.138", "172.16.130.168", "172.16.130.243"]

# 集群初始化那些节点可以被选举为 master
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]

# 解决跨域问题,该配置在elasticsearch-head的时候会用到
http.cors.enabled: true
http.cors.allow-origin: "*"

在其它节点的配置文件中你只需要修改:

node.name: node-1

最后修改权限

chown -R elasticsearch:elasticsearch /usr/share/elasticsearch-7.7.1

4.打开防火墙

sudo firewall-cmd --zone=public --add-port=9200/tcp --permanent
sudo firewall-cmd --zone=public --add-port=9300/tcp --permanent
sudo firewall-cmd --reload

5.启动

#切换到elasticsearch用户
su elasticsearch

#启动
./elasticsearch-7.7.1/bin/elasticsearch

#加参数 -d 表示后台启动:
./elasticsearch-7.7.1/bin/elasticsearch -d

#查看elasticsearch进程
ps aux|grep elasticsearch

6.解决报错

[1]:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

ES因为需要大量的创建索引文件,需要大量的打开系统的文件,所以我们需要解除linux系统当中打开文件最大数目的限制,不然ES启动就会抛错

sudo vim /etc/security/limits.conf
elasticsearch soft nofile 65535
elasticsearch hard nofile 65535

#修改后重启Linux生效
reboot

[2]:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
最大虚拟内存太小,调大系统的虚拟内存

vim /etc/sysctl.conf
vm.max_map_count=655360

#执行以下命令生效
sysctl -p

7.其他

查看集群中各个节点的基本情况
http://172.16.130.168:9200/_cat/nodes

查看集群健康状态:
http://172.16.130.168:9200/_cluster/health

调整JVM参数:根据硬件配置和工作负载,调整Elasticsearch的JVM参数以优化性能。
sudo vim ./config/jvm.options
-Xms31g
-Xmx31g

三、注意事项

所有节点集群名称必须一致: cluster.name

每个节点必须有一个唯一名字: node.name

开启每个节点远程连接: network.host: 0.0.0.0

指定集群中所有节点通信列表:

discovery.seed_hosts: ["172.16.130.138", "172.16.130.168", "172.16.130.243"]

集群初始化那些节点可以被选举为 master:

cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]