1. 引言

Elasticsearch是一个基于Lucene库的分布式、RESTful风格的搜索和数据分析引擎,它能够解决不断涌现出的各种用例。作为Elastic Stack核心组件之一,Elasticsearch集中存储您的数据,实现闪电般的搜索、精细的相关性分析以及强大的可扩展性。本教程将详细介绍在CentOS系统下安装和配置Elasticsearch的完整过程,帮助您从零开始搭建一个强大、安全的搜索引擎平台。

2. 环境准备

在安装Elasticsearch之前,我们需要确保系统环境满足其运行要求。

2.1 系统要求

Elasticsearch对系统有以下基本要求:

  • 操作系统:CentOS 7或更高版本(本教程以CentOS 7为例)
  • 内存:至少4GB RAM(推荐8GB以上)
  • CPU:2核以上
  • 磁盘空间:至少10GB可用空间(根据数据量调整)
  • Java环境:Elasticsearch 7.x及以上版本内置了OpenJDK,但也可以单独安装Java

2.2 检查系统版本

首先,检查您的CentOS系统版本:

cat /etc/centos-release 

2.3 更新系统

确保系统已更新到最新状态:

sudo yum update -y 

2.4 安装必要的工具包

安装一些必要的工具包,方便后续操作:

sudo yum install -y wget curl vim unzip 

2.5 配置主机名和hosts文件

为了便于集群管理,建议配置主机名:

sudo hostnamectl set-hostname elasticsearch-server 

编辑/etc/hosts文件,添加主机名映射:

sudo vim /etc/hosts 

在文件中添加以下内容(根据您的实际IP地址修改):

192.168.1.100 elasticsearch-server 

2.6 配置防火墙和SELinux

如果启用了防火墙,需要开放Elasticsearch使用的端口(默认9200和9300):

sudo firewall-cmd --permanent --add-port={9200/tcp,9300/tcp} sudo firewall-cmd --reload 

对于SELinux,可以临时设置为宽松模式或永久禁用(生产环境建议配置SELinux规则而非禁用):

# 临时设置 sudo setenforce 0 # 永久禁用(需要重启) sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 

3. Java环境安装

Elasticsearch是基于Java开发的,需要Java环境支持。虽然Elasticsearch 7.x及以上版本自带了OpenJDK,但为了更好的兼容性和控制,我们建议单独安装Java。

3.1 安装OpenJDK

使用yum安装OpenJDK 11(Elasticsearch 7.x推荐使用Java 11):

sudo yum install -y java-11-openjdk java-11-openjdk-devel 

3.2 验证Java安装

验证Java是否安装成功:

java -version 

预期输出类似如下:

openjdk version "11.0.11" 2021-04-20 LTS OpenJDK Runtime Environment 18.9 (build 11.0.11+9-LTS) OpenJDK 64-Bit Server VM 18.9 (build 11.0.11+9-LTS, mixed mode, sharing) 

3.3 设置JAVA_HOME环境变量

编辑/etc/profile文件,添加JAVA_HOME环境变量:

sudo vim /etc/profile 

在文件末尾添加以下内容:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk export PATH=$PATH:$JAVA_HOME/bin 

使配置立即生效:

source /etc/profile 

验证JAVA_HOME是否设置成功:

echo $JAVA_HOME 

4. 安装Elasticsearch

4.1 导入Elasticsearch GPG密钥

首先,导入Elasticsearch的GPG密钥:

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 

4.2 添加Elasticsearch YUM仓库

创建Elasticsearch的YUM仓库文件:

sudo vim /etc/yum.repos.d/elasticsearch.repo 

添加以下内容:

[elasticsearch] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=0 autorefresh=1 type=rpm-md 

4.3 安装Elasticsearch

使用yum安装Elasticsearch:

sudo yum install --enablerepo=elasticsearch elasticsearch -y 

4.4 验证安装

验证Elasticsearch是否安装成功:

rpm -qa | grep elasticsearch 

预期输出:

elasticsearch-7.x.x-x.noarch 

5. 配置Elasticsearch

Elasticsearch的主要配置文件位于/etc/elasticsearch/elasticsearch.yml。我们需要根据实际需求修改这个文件。

5.1 备份原始配置文件

在修改配置文件之前,先备份原始文件:

sudo cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak 

5.2 编辑配置文件

使用vim编辑配置文件:

sudo vim /etc/elasticsearch/elasticsearch.yml 

5.3 基本配置

以下是一些基本配置项的说明和设置:

# 集群名称,同一个集群中的节点必须设置相同的名称 cluster.name: my-application # 节点名称,每个节点在集群中应该有唯一的名称 node.name: node-1 # 数据存储路径 path.data: /var/lib/elasticsearch # 日志存储路径 path.logs: /var/log/elasticsearch # 网络主机设置,0.0.0.0表示允许所有IP访问,生产环境应设置为具体IP network.host: 0.0.0.0 # HTTP端口 http.port: 9200 # 发现设置,单节点模式可以设置为以下内容 discovery.seed_hosts: ["127.0.0.1"] cluster.initial_master_nodes: ["node-1"] # 内存锁定,防止内存交换到磁盘 bootstrap.memory_lock: true 

5.4 JVM配置

Elasticsearch的JVM配置文件位于/etc/elasticsearch/jvm.options。根据服务器内存大小调整JVM堆内存大小,一般设置为系统内存的50%,但不超过32GB。

编辑JVM配置文件:

sudo vim /etc/elasticsearch/jvm.options 

修改以下配置(假设服务器有16GB内存):

-Xms8g -Xmx8g 

5.5 系统限制配置

Elasticsearch对系统资源有一定要求,需要调整系统限制。

编辑/etc/security/limits.conf文件:

sudo vim /etc/security/limits.conf 

在文件末尾添加以下内容:

# Elasticsearch limits elasticsearch soft nofile 65536 elasticsearch hard nofile 65536 elasticsearch soft nproc 4096 elasticsearch hard nproc 4096 elasticsearch soft memlock unlimited elasticsearch hard memlock unlimited 

编辑/etc/systemd/system.conf文件:

sudo vim /etc/systemd/system.conf 

取消并修改以下行:

DefaultLimitNOFILE=65536 DefaultLimitNPROC=4096 DefaultLimitMEMLOCK=infinity 

编辑/etc/systemd/system/elasticsearch.service文件:

sudo vim /etc/systemd/system/elasticsearch.service 

[Service]部分添加以下内容:

LimitMEMLOCK=infinity 

重新加载systemd配置:

sudo systemctl daemon-reload 

5.6 创建数据目录并设置权限

如果自定义了数据目录,需要创建并设置正确的权限:

sudo mkdir -p /var/lib/elasticsearch sudo chown -R elasticsearch:elasticsearch /var/lib/elasticsearch sudo chmod -R 755 /var/lib/elasticsearch 

6. 启动Elasticsearch服务

6.1 启动Elasticsearch服务

使用systemd启动Elasticsearch服务:

sudo systemctl start elasticsearch 

6.2 设置开机自启

设置Elasticsearch服务开机自启:

sudo systemctl enable elasticsearch 

6.3 检查服务状态

检查Elasticsearch服务状态:

sudo systemctl status elasticsearch 

如果服务正常运行,输出中应包含active (running)字样。

6.4 查看服务日志

如果服务启动失败,可以查看日志排查问题:

sudo journalctl -u elasticsearch -f 

或者查看Elasticsearch日志文件:

sudo tail -f /var/log/elasticsearch/my-application.log 

6.5 验证Elasticsearch是否正常运行

使用curl命令验证Elasticsearch是否正常运行:

curl -X GET "localhost:9200/?pretty" 

如果Elasticsearch正常运行,将返回类似以下的JSON响应:

{ "name" : "node-1", "cluster_name" : "my-application", "cluster_uuid" : "xxxxxxxxxxxxxxxxxxxx", "version" : { "number" : "7.15.0", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "xxxxxxxxxxxxxxxxxxxxxxxx", "build_date" : "2021-09-14T14:55:33.515324022Z", "build_snapshot" : false, "lucene_version" : "8.9.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" } 

7. Elasticsearch安全设置

在生产环境中,安全设置非常重要。Elasticsearch提供了多种安全功能,包括认证、授权、加密通信等。

7.1 启用基本安全功能

Elasticsearch 7.x及以上版本默认包含了基本安全功能,但需要手动启用。

7.1.1 生成证书

在Elasticsearch安装目录下运行以下命令生成CA证书:

cd /usr/share/elasticsearch/ sudo bin/elasticsearch-certutil ca 

根据提示输入输出文件名,如elastic-stack-ca.p12

然后使用生成的CA证书为节点生成证书:

sudo bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 

根据提示输入输出文件名,如elastic-certificates.p12

7.1.2 配置证书

创建证书目录并复制证书:

sudo mkdir -p /etc/elasticsearch/certs sudo cp elastic-certificates.p12 /etc/elasticsearch/certs/ sudo chown -R elasticsearch:elasticsearch /etc/elasticsearch/certs/ 

7.1.3 修改配置文件启用安全功能

编辑/etc/elasticsearch/elasticsearch.yml文件,添加以下配置:

# 启用安全功能 xpack.security.enabled: true # 配置TLS/SSL xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.certificate: certs/elastic-certificates.p12 xpack.security.transport.ssl.certificate_password: your_password # 配置HTTP层SSL(可选) xpack.security.http.ssl.enabled: true xpack.security.http.ssl.certificate: certs/elastic-certificates.p12 xpack.security.http.ssl.certificate_password: your_password 

7.1.4 重启Elasticsearch服务

sudo systemctl restart elasticsearch 

7.1.5 设置内置用户密码

Elasticsearch提供了多个内置用户,如elastic、apm_system、kibana、logstash_system、beats_system、remote_monitoring_user等。我们需要为这些用户设置密码。

运行以下命令设置密码:

cd /usr/share/elasticsearch/ sudo bin/elasticsearch-setup-passwords auto 

或者使用interactive模式手动设置每个用户的密码:

sudo bin/elasticsearch-setup-passwords interactive 

7.2 配置访问认证

现在,访问Elasticsearch需要提供用户名和密码。例如,使用curl访问:

curl -u elastic:your_password -X GET "https://localhost:9200/?pretty" --insecure 

7.3 使用Kibana进行安全管理

安装Kibana后,可以通过Kibana的Web界面进行更详细的安全管理,包括角色创建、权限分配等。

8. 常见问题及解决方案

8.1 内存不足问题

如果服务器内存不足,Elasticsearch可能无法启动。可以通过调整JVM堆内存大小解决:

sudo vim /etc/elasticsearch/jvm.options 

修改以下配置:

-Xms1g -Xmx1g 

8.2 最大文件描述符限制

如果遇到”max file descriptors [4096] for elasticsearch process is too low”错误,需要增加文件描述符限制:

sudo vim /etc/security/limits.conf 

添加或修改以下内容:

elasticsearch soft nofile 65536 elasticsearch hard nofile 65536 

8.3 虚拟内存不足

如果遇到”max virtual memory areas vm.max_map_count [65530] is too low”错误,需要增加虚拟内存:

sudo sysctl -w vm.max_map_count=262144 

要永久生效,编辑/etc/sysctl.conf文件:

sudo vim /etc/sysctl.conf 

添加以下内容:

vm.max_map_count=262144 

8.4 端口被占用

如果9200或9300端口被占用,可以修改Elasticsearch的端口配置:

sudo vim /etc/elasticsearch/elasticsearch.yml 

修改以下配置:

http.port: 9201 transport.tcp.port: 9301 

8.5 集群发现失败

如果节点无法发现集群,检查以下配置:

discovery.seed_hosts: ["host1", "host2"] cluster.initial_master_nodes: ["node-1", "node-2"] 

确保网络设置正确,防火墙已开放端口。

9. 总结

本教程详细介绍了在CentOS系统下安装和配置Elasticsearch的完整过程,包括环境准备、Java环境安装、Elasticsearch安装、配置文件修改、服务启动和安全设置等步骤。通过本教程,您应该能够成功搭建一个功能完整、安全可靠的Elasticsearch搜索引擎平台。

在实际生产环境中,还需要考虑集群配置、数据备份、性能优化等方面的问题。同时,建议结合使用Kibana、Logstash和Beats等其他Elastic Stack组件,构建完整的数据处理和分析平台。

希望本教程对您有所帮助,祝您使用Elasticsearch愉快!