摘要: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"]