【基础篇】第2章 Elasticsearch安装与配置

2.1 环境准备

2.1.1 操作系统选择

Elasticsearch作为一个跨平台的搜索引擎,理论上支持所有能运行Java虚拟机的操作系统,包括但不限于Linux、macOS和Windows。Linux是生产环境中最为推荐的选择,因为它提供了更好的性能和稳定性。macOS适合开发和测试环境,而Windows虽然支持,但在企业级部署中较为少见。

2.1.2 JDK安装

Elasticsearch需要Java Development Kit (JDK) 11或更高版本来运行。首先,访问Oracle JDKAdoptium下载合适的版本并安装。安装后,确保将JAVA_HOME环境变量设置正确。例如,在Linux系统中,编辑.bashrc.profile文件,加入以下行:

bash 复制代码
export JAVA_HOME=/path/to/jdk
export PATH=$JAVA_HOME/bin:$PATH

重启终端后,通过java -version命令验证安装是否成功。

2.1.3 系统需求说明

Elasticsearch对内存有较高要求,最低建议分配2GBJVM堆空间,但针对生产环境,至少8GB或更多内存更为合适。此外,磁盘空间应考虑数据的增长需求,至少预留足够的空间存放索引和日志文件。系统还应具备足够的CPU核心数,以支持并发操作。

2.2 安装指南

2.2.1 单节点安装

对于初次尝试或测试环境,单节点安装是最简单的方式。首先,从Elastic官方网站下载最新版本的Elasticsearch。解压下载的文件,进入bin目录,直接运行./elasticsearch(Linux/macOS)或elasticsearch.bat(Windows)即可启动Elasticsearch。

2.2.2 集群模式安装

在生产环境中,Elasticsearch通常以集群模式部署,以提高可用性和扩展性。每个节点需要独立的机器或虚拟机,并配置相同的cluster.name以加入同一集群。此外,还需配置node.name以区分不同节点。

2.2.3 Docker容器部署

Docker提供了一种轻量级的虚拟化方式,使得部署Elasticsearch变得极为便捷。通过以下命令,可以快速启动一个Elasticsearch容器:

bash 复制代码
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.17.6

这将启动最新版本(示例中为7.17.6)的Elasticsearch,映射端口9200和9300,并以单节点模式运行。对于生产集群,需调整配置以支持多节点发现。

2.3 基本配置

2.3.1 elasticsearch.yml关键参数

Elasticsearch的主要配置文件是elasticsearch.yml,位于安装目录的config子目录下。

  • 网络设置:

    yaml 复制代码
    network.host: 0.0.0.0 # 允许所有IP访问
    http.port: 9200 # HTTP服务端口
    transport.tcp.port: 9300 # 集群内部通信端口
  • 路径配置:

    yaml 复制代码
    path.data: /var/lib/elasticsearch # 数据存储路径
    path.logs: /var/log/elasticsearch # 日志文件路径
  • 集群配置:

    yaml 复制代码
    cluster.name: my-application # 集群名称
    node.name: node-1 # 节点名称
    discovery.seed_hosts: ["host1", "host2"] # 初始发现节点列表
    cluster.initial_master_nodes: ["node-1", "node-2"] # 初始主节点列表

2.4 高级配置(深入)

2.4.1 高级网络配置

除了基本的网络端口配置,Elasticsearch还支持一系列高级网络设置,以适应不同的部署环境和安全需求。

  • 绑定主机与发布主机:

    yaml 复制代码
    network.bind_host: 192.168.1.10 # 绑定特定IP接收请求
    network.publish_host: _global_ # 自动发布所有绑定地址(集群内通信)
  • HTTPS与SSL/TLS加密:

    yaml 复制代码
    xpack.security.http.ssl.enabled: true
    xpack.security.http.ssl.key: /path/to/ssl/key.pem
    xpack.security.http.ssl.certificate: /path/to/ssl/cert.pem
    xpack.security.http.ssl.certificate_authorities: ["/path/to/ca.crt"]
  • 跨域资源共享(CORS):

    开启CORS以允许来自不同源的AJAX请求:

    yaml 复制代码
    http.cors.enabled: true
    http.cors.allow-origin: "*" # 允许所有源,生产中应具体指定
2.4.2 节点角色与职责

通过配置节点角色,可以细粒度地控制节点在集群中的职责,提升集群的效率和稳定性。

  • 节点类型配置:

    yaml 复制代码
    node.master: true # 允许该节点成为主节点
    node.data: true # 允许该节点存储数据
    node.ingest: true # 启用数据预处理管道
  • 专用协调节点:

    对于大型集群,建议设置专门的协调节点,不存储数据也不参与选举,仅负责路由请求:

    yaml 复制代码
    node.master: true
    node.data: false
2.4.3 高级集群配置

为了增强集群的稳定性和容错性,以下配置项值得深入探讨:

  • 分片与副本策略:

    通过合理配置索引的主分片数和副本数,可以平衡存储、查询速度与故障恢复能力:

    yaml 复制代码
    index.number_of_shards: 5 # 主分片数量
    index.number_of_replicas: 1 # 副本数量
  • 自定义发现机制:

    在云环境或复杂网络配置下,可能需要自定义节点发现方式:

    yaml 复制代码
    discovery.seed_providers: file
    discovery.seed_hosts: ["file:///etc/elasticsearch/discovery-seed-hosts.txt"]
  • 集群健康检查与恢复策略:

    通过配置 gateway.recover_after_nodes 和 cluster.routing.allocation.node_initial_primaries_recoveries 等参数,可以优化集群在节点故障后的恢复流程。

2.4.4 性能与资源限制

为了确保Elasticsearch在各种负载下都能稳定运行,合理的资源限制和性能调优同样重要。

  • 堆内存设置:

    通过-Xms和-Xmx参数调整JVM堆内存大小,推荐总内存的50%作为上限,避免频繁的GC操作影响性能。

    bash 复制代码
    ES_JAVA_OPTS="-Xms4g -Xmx4g"
  • 线程池配置:

    thread_pool部分,可根据实际工作负载调整各类线程池的大小,如index, search, bulk等。

  • 磁盘水位线:

    配置cluster.routing.allocation.disk.threshold_enabled和相关水位线参数,避免磁盘空间不足导致的服务中断。

综上所述,Elasticsearch的配置不仅涉及基本的服务启动设置,还深入到网络、节点角色、集群管理、性能优化等多个层面。通过精细化配置,可以极大地提升系统的稳定性和效率,满足不同规模和场景的需求。接下来的章节,我们将进一步探讨Elasticsearch的核心功能------索引与文档操作,这是数据管理和检索的基础。

小结

本章详细介绍了Elasticsearch的安装与配置过程,从环境准备、安装指南到基本配置,为读者构建了一个从零开始部署Elasticsearch的完整路径。通过实践这些步骤,无论是单节点测试还是集群部署,都能得心应手。随着配置的深入,读者将逐步掌握Elasticsearch的运行原理,为下一章《第3章 索引与文档操作》中深入探索数据管理奠定坚实的基础。

相关推荐
lucky_syq15 分钟前
Spark和MapReduce之间的区别?
大数据·spark·mapreduce
Mitch31121 分钟前
【漏洞复现】CVE-2015-3337 Arbitrary File Reading
elasticsearch·网络安全·docker·漏洞复现
Mitch31125 分钟前
【漏洞复现】CVE-2015-5531 Arbitrary File Reading
web安全·elasticsearch·网络安全·docker·漏洞复现
LonelyProgramme32 分钟前
Flink定时器
大数据·flink
m0_748244831 小时前
StarRocks 排查单副本表
大数据·数据库·python
NiNg_1_2341 小时前
Hadoop中MapReduce过程中Shuffle过程实现自定义排序
大数据·hadoop·mapreduce
B站计算机毕业设计超人1 小时前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
沛沛老爹1 小时前
什么是 DevOps 自动化?
大数据·ci/cd·自动化·自动化运维·devops
喝醉酒的小白2 小时前
Elasticsearch(ES)监控、巡检及异常指标处理指南
大数据·elasticsearch·搜索引擎
lucky_syq3 小时前
Spark和Hadoop之间的区别
大数据·hadoop·spark