Elasticsearch 在linux部署 及 Docker 集群部署详解案例示范

1. 在 CentOS 上安装和配置 Elasticsearch

在 CentOS 系统下,安装 Elasticsearch 主要分为以下步骤:

1.1 准备工作

在开始安装之前,确保你的系统满足以下基本条件:

  1. CentOS 版本要求:推荐使用 CentOS 7 及以上版本。
  2. Java 环境:Elasticsearch 依赖于 Java 运行时环境 (JRE)。需要确保 Java 版本为 8 或更高。
  3. 系统资源:Elasticsearch 对内存和磁盘有较高要求,至少 4GB 的内存,推荐 8GB 或更高,并确保有足够的磁盘空间来存储索引数据。

1.2 安装 Java

首先,确认系统已经安装了 Java,如果没有,可以通过以下命令安装 OpenJDK 8:

sudo yum install java-1.8.0-openjdk-devel

安装完成后,验证 Java 版本:

java -version

确保输出显示 Java 版本为 1.8 及以上。

1.3 下载并安装 Elasticsearch

  1. 添加 Elasticsearch 官方仓库:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
  1. 创建 Elasticsearch 的 yum 仓库文件:
sudo nano /etc/yum.repos.d/elasticsearch.repo

将以下内容粘贴进去:

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

保存文件并退出。

  1. 更新仓库并安装 Elasticsearch:
sudo yum update
sudo yum install elasticsearch

1.4 配置 Elasticsearch

Elasticsearch 的配置文件位于 /etc/elasticsearch/elasticsearch.yml。这是主要的配置文件,你需要根据实际需求进行修改。

1.4.1 基本配置

打开配置文件:

sudo nano /etc/elasticsearch/elasticsearch.yml

我们首先配置集群名称和节点名称:

# 集群名称
cluster.name: my-application-cluster# 节点名称
node.name: node-1
1.4.2 网络配置

默认情况下,Elasticsearch 仅绑定到 localhost,这意味着它只能在本机上访问。如果你希望在网络中访问 Elasticsearch,需要修改以下配置:

# 绑定地址为所有网络接口
network.host: 0.0.0.0# 配置允许的端口
http.port: 9200
1.4.3 数据和日志路径

Elasticsearch 默认将数据存储在 /var/lib/elasticsearch,日志存储在 /var/log/elasticsearch。可以根据需求修改这些路径:

# 数据存储路径
path.data: /path/to/your/data# 日志存储路径
path.logs: /path/to/your/logs
1.4.4 JVM 配置

Elasticsearch 的性能很大程度上依赖于内存的分配。在生产环境中,推荐设置 JVM 的堆内存大小为系统总内存的 50%。你可以通过修改 jvm.options 文件来配置:

sudo nano /etc/elasticsearch/jvm.options

找到 -Xms-Xmx 选项并修改为适合的大小:

-Xms4g  # 设置最小堆内存为 4GB
-Xmx4g  # 设置最大堆内存为 4GB

1.5 启动 Elasticsearch

配置完成后,可以使用以下命令启动 Elasticsearch:

sudo systemctl start elasticsearch

确保 Elasticsearch 开机启动:

sudo systemctl enable elasticsearch

检查 Elasticsearch 服务状态:

sudo systemctl status elasticsearch

1.6 验证安装

Elasticsearch 启动成功后,打开浏览器,访问 http://localhost:9200/。如果看到类似以下的 JSON 输出,说明安装成功:

{"name" : "node-1","cluster_name" : "my-application-cluster","cluster_uuid" : "xxxxxx","version" : {"number" : "8.x.x","build_flavor" : "default","build_type" : "rpm","build_hash" : "xxxxxxx","build_date" : "2024-xx-xx","build_snapshot" : false,"lucene_version" : "9.x","minimum_wire_compatibility_version" : "7.x","minimum_index_compatibility_version" : "7.x"},"tagline" : "You Know, for Search"
}

2. Docker 中部署 Elasticsearch

在生产环境和开发环境中,Docker 可以极大简化 Elasticsearch 的部署过程。通过 Docker,你可以轻松地在多个环境中创建一致的运行环境,而不必担心安装和配置过程中的细节问题。下面将详细介绍如何在 Docker 中部署单节点和集群版本的 Elasticsearch。

2.1 安装 Docker

首先,需要在 CentOS 上安装 Docker:

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io

启动并启用 Docker 服务:

sudo systemctl start docker
sudo systemctl enable docker

验证 Docker 安装是否成功:

docker --version

输出类似以下内容即表示 Docker 安装成功:

Docker version 24.0.0, build abcdefg

2.2 Docker 中的单节点 Elasticsearch 部署

  1. 拉取 Elasticsearch Docker 镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.x.x
  1. 运行单节点 Elasticsearch 容器
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 \-e "discovery.type=single-node" \docker.elastic.co/elasticsearch/elasticsearch:8.x.x
  • -d 表示在后台运行容器。
  • --name 设置容器名称为 elasticsearch
  • -p 映射宿主机的端口(9200 是 HTTP 端口,9300 是集群节点间通信的端口)。
  • discovery.type=single-node 指定为单节点模式,不启动集群。
  1. 验证 Elasticsearch 是否成功运行

运行以下命令查看 Docker 容器的状态:

docker ps

应该能看到类似以下输出,表明容器正在运行:

CONTAINER ID   IMAGE                                           STATUS          PORTS
xxxxxxxxxx     docker.elastic.co/elasticsearch/elasticsearch   Up 10 seconds   0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp

打开浏览器并访问 http://localhost:9200/,如果看到类似以下的 JSON 响应,表示 Elasticsearch 运行正常:

{"name" : "elasticsearch","cluster_name" : "docker-cluster","cluster_uuid" : "xxxxxx","version" : {"number" : "8.x.x","build_flavor" : "default","build_type" : "docker","build_hash" : "xxxxxxx","build_date" : "2024-xx-xxTxx:xx:xx","build_snapshot" : false,"lucene_version" : "9.x","minimum_wire_compatibility_version" : "7.x","minimum_index_compatibility_version" : "7.x"},"tagline" : "You Know, for Search"
}

2.3 使用 Docker Compose 部署 Elasticsearch 集群

在生产环境中,通常需要部署多个节点组成集群。使用 Docker Compose,可以更方便地管理多节点部署。下面是如何使用 Docker Compose 部署 Elasticsearch 集群。

  1. 安装 Docker Compose

如果你尚未安装 Docker Compose,可以通过以下命令安装:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

验证安装是否成功:

docker-compose --version
  1. 创建 Docker Compose 配置文件

在项目目录下创建一个名为 docker-compose.yml 的文件,内容如下:

version: '3'
services:elasticsearch-node1:image: docker.elastic.co/elasticsearch/elasticsearch:8.x.xcontainer_name: es-node1environment:- node.name=es-node1- cluster.name=es-docker-cluster- discovery.seed_hosts=es-node2,es-node3- cluster.initial_master_nodes=es-node1,es-node2,es-node3- bootstrap.memory_lock=true- "ES_JAVA_OPTS=-Xms512m -Xmx512m"ulimits:memlock:soft: -1hard: -1volumes:- esdata1:/usr/share/elasticsearch/dataports:- 9200:9200- 9300:9300elasticsearch-node2:image: docker.elastic.co/elasticsearch/elasticsearch:8.x.xcontainer_name: es-node2environment:- node.name=es-node2- cluster.name=es-docker-cluster- discovery.seed_hosts=es-node1,es-node3- cluster.initial_master_nodes=es-node1,es-node2,es-node3- bootstrap.memory_lock=true- "ES_JAVA_OPTS=-Xms512m -Xmx512m"ulimits:memlock:soft: -1hard: -1volumes:- esdata2:/usr/share/elasticsearch/dataelasticsearch-node3:image: docker.elastic.co/elasticsearch/elasticsearch:8.x.xcontainer_name: es-node3environment:- node.name=es-node3- cluster.name=es-docker-cluster- discovery.seed_hosts=es-node1,es-node2- cluster.initial_master_nodes=es-node1,es-node2,es-node3- bootstrap.memory_lock=true- "ES_JAVA_OPTS=-Xms512m -Xmx512m"ulimits:memlock:soft: -1hard: -1volumes:- esdata3:/usr/share/elasticsearch/datavolumes:esdata1:driver: localesdata2:driver: localesdata3:driver: local

该配置文件定义了 3 个 Elasticsearch 节点,它们组成一个集群,每个节点都将数据存储在独立的卷上。

  1. 启动 Elasticsearch 集群

docker-compose.yml 文件所在的目录中运行以下命令:

docker-compose up -d

此命令将启动 3 个 Elasticsearch 节点并组成一个集群。你可以通过以下命令查看运行状态:

docker-compose ps
  1. 验证集群状态

可以通过 API 请求检查集群状态:

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

如果集群状态为 green,说明集群已成功启动且工作正常。


3. 集群环境部署详解

Elasticsearch 集群是一种分布式架构,通过水平扩展节点来提升系统的容量和性能。一个典型的集群通常包含多个 Master 节点Data 节点协调节点。下面详细介绍 Elasticsearch 集群的核心组件和集群部署的关键配置。

3.1 Master 节点和 Data 节点

  • Master 节点:负责管理整个集群的元数据,包括节点加入/退出、索引创建/删除、分片分配等操作。一个集群应该有多个 master 节点以提高容错性。
  • Data 节点:负责存储实际的数据,并执行索引、搜索等操作。data 节点的数量决定了集群的存储容量和处理能力。

在生产环境中,通常会通过独立的配置文件来指定节点角色,确保 master 节点和 data 节点的职责明确。

3.1.1 配置 Master 节点

elasticsearch.yml 中设置节点角色为 master:

node.master: true
node.data: false

此配置确保该节点只作为 master 角色,不处理数据存储和搜索请求。

3.1.2 配置 Data 节点

elasticsearch.yml 中设置节点角色为 data:

node.master: false
node.data: true

Data 节点负责存储和搜索数据,不参与集群的管理操作。

3.2 分片与副本

Elasticsearch 通过将索引数据拆分为多个 分片(Shards) 来提高系统的可扩展性和性能。每个分片可以存储在集群中的不同节点上,实现数据的水平扩展。同时,Elasticsearch 通过 副本(Replicas) 提供数据冗余和高可用性。副本是分片的复制版,当主分片失效时,副本可以继续提供服务。

配置分片和副本数量时,可以通过如下方式进行设置:

PUT /my-index
{"settings": {"index": {"number_of_shards": 5,"number_of_replicas": 1}}
}

在这个配置中,索引 my-index 将被拆分为 5 个主分片,并为每个分片创建 1 个副本。

3.3 集群的健康状态检查

集群启动后,可以通过 Elasticsearch 提供的 API 来检查集群的健康状态。健康状态分为三种:

  • green:所有分片和副本都分配到位。
  • yellow:所有主分片分配到位,但副本分片未完全分配(通常是因为缺少足够的节点)。
  • red:部分主分片未能分配,可能导致数据丢失。

使用以下命令检查集群的健康状态:

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

输出如下表示集群处于健康状态:

{"cluster_name" : "docker-cluster","status" : "green","number_of_nodes" : 3,"number_of_data_nodes" : 3,"active_primary_shards" : 5,"active_shards" : 10,"relocating_shards" : 0,"initializing_shards" : 0,"unassigned_shards" : 0,"delayed_unassigned_shards" : 0,"number_of_pending_tasks" : 0,"number_of_in_flight_fetch" : 0
}

在生产环境中,确保集群健康是非常重要的,可以通过设置警报和自动化监控来及时检测和修复问题。


通过 Docker 部署 Elasticsearch,可以极大简化集群的管理和扩展。无论是单节点还是集群部署,Docker 都能提供一致的运行环境,极大地提高了灵活性和可维护性。在生产环境中,还应根据具体需求优化内存分配、数据持久化和安全性配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

02_MVCC-版本链管理

MVCC-版本链管理 文章目录 MVCC-版本链管理简介基本概念版本链的形成与管理数据插入操作数据更新操作数据删除操作 一致性视图(Read View)快照读与当前读快照读(Snapshot Read)当前读(Current Read) 优缺点…

单片机输出方波

从P1.0上输出一个方波,高电平5ms,低电平10ms. #include〈reg51。h〉 unsigned char flag; sbit outP1^0; void main() { flag0; TMOD0X02; TH06; TL06; TR01; EA1; ET0…

使用 SSH 连接 GitLab 的常见问题及解决方案

使用 SSH 连接 GitLab 的常见问题及解决方案 在使用 SSH 连接到 GitLab 服务器时,可能会遇到类似于以下的错误信息: git192.168.xx.xxx: Permission denied (publickey).这个错误通常表示 SSH 无法验证你的公钥,导致无法访问 GitLab 仓库。…

【直播伴侣】抖音开播设置

可以使用obs作为虚拟摄像头,把加工的画面喂给直播伴侣,然后用直播伴侣开播推流:看起来蓝光画质也是1080p 下最大的8Mbps推荐是6Mbps。抖音伴侣的开播设置 测试自己的上行带宽 30Mbps 不知道为啥别人都那么大: 看起来蓝光画质,码率也只有6Mbps

【鸡翅Club】项目启动

一、项目背景 这是一个 C端的社区项目,有博客、交流,面试学习,练题等模块。 项目的背景主要是我们想要通过面试题的分类,难度,打标,来评估员工的技术能力。同时在我们公司招聘季的时候,极大的…

电商大数据获取渠道分享--官方接口、爬虫、第三方如何选择?

在当今大数据驱动的商业环境中,电商企业越来越依赖数据分析来洞察市场、优化运营和提升竞争力。本文将分享几种常见的电商大数据获取渠道,帮助电商从业者更有效地收集和利用数据资源。 一、电商平台官方接口 各大电商平台如淘宝、京东、拼多多等&#…

跟我学C++中级篇——典型的内存问题分析

一、内存问题引起的Crash 程序的崩溃对每个开发人员来说,都是一种磨难的存在,不经历不会成长,但再怎么成长也不愿意经历。在程序崩溃的现象中,内存引起的程序崩溃一直是重要的原因,也可以说,内存的异常引起…

【网络协议栈】Tcp协议(上)结构的解析 和 Tcp中的滑动窗口(32位确认序号、32位序号、4位首部长度、6位标记位、16为窗口大小、16位紧急指针)

绪论​ “没有那么多天赋异禀,优秀的人总是努力翻山越岭。”本章主要讲到了再五层网络协议从上到下的第二层传输层中使用非常广泛的Tcp协议他的协议字段结构,通过这些字段去认识其Tcp协议运行的原理底层逻辑和基础。后面将会再写一篇Tcp到底是通过什么调…

【保姆级】Spring Retry 教程

什么是“重试”?为什么要进行“重试”呢? “重试”(Retry)是一种在编程和软件开发中常见的策略,用于处理在执行操作时可能遇到的临时性错误或异常。当一个操作因为某些原因(如网络问题、服务不可用、资源暂时不可用等)失败时,重试机制会尝试再次执行该操作,以期在下一…

PHP发票验真 API-发票真伪查验、验证接口示例

发票验真API是一种在线服务,它允许用户或企业通过编程接口(API)验证发票的真实性。这种服务通常由政府机构或者授权的第三方(如翔云、百度)提供,旨在打击伪造发票的行为,保护消费者的合法权益&a…

JAVA-石头迷阵小游戏

采用企业式项目结构,接下来我将分享全部代码和结构,希望大家点点关注! 这是我的结构。首先使用IDE创建一个Module,命名stone-maze,接着把自带src下的main方法删除,接着在src下创建包,包名为com.wmuj,接着创建APP类代码如下: package com.wmuj;public class App {publ…

《探索 Python 音频利器:sounddevice》

一、sounddevice 简介 Sounddevice 是一个强大的 Python 音频处理库,它为开发者提供了对 PortAudio 库的 Python 绑定,从而实现了在 Python 环境中播放和录制音频数据的功能。 这个库具有诸多优势。首先,它具有跨平台性,无论是在…

进程间通信大总结Linux

目录 进程间通信介绍 进程间通信目的 进程间通信发展 进程间通信分类 管道 System V IPC POSIX IPC 管道 什么是管道 匿名管道 用fork来共享管道原理 站在文件描述符角度-深度理解管道 管道读写规则 管道特点 命名管道 创建一个命名管道 匿名管道与命名管道的区…

RabbitMQ系列学习笔记(八)--发布订阅模式

文章目录 一、发布订阅模式原理二、发布订阅模式实战1、消费者代码2、生产者代码3、查看运行结果 本文参考: 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq RabbitMQ 详解 Centos7环境安装Erlang、RabbitMQ详细过程(配图) 一、发布订阅模式原理 在开发过程中&…

linux查看系统类型

要确定系统是 Ubuntu 还是 CentOS,可以通过查看系统的发行版信息来判断。以下是几种常见的方法: 方法一:使用 cat 命令查看 /etc/os-release 文件 这个文件包含了系统的详细信息,包括发行版名称和版本号。 cat /etc/os-release…

ESP32-C3实现非易失变量(Arduino IDE )

1效果 网页输入数据&#xff0c;串口打印数据。掉电后数据还在 2源码 #include <WiFi.h> // 包含WiFi库&#xff0c;用于处理WiFi连接 #include <WebServer.h> // 包含WebServer库&#xff0c;用于创建Web服务器 #include <Preferences.h> // 包含Prefere…

告别微信封号!学会这5招,让你的账号坚不可摧

在这个信息爆炸的时代&#xff0c;无论是工作沟通、社交互动还是获取信息&#xff0c;微信都扮演着极其重要的角色。但是&#xff0c;随着微信平台规则的日益严格&#xff0c;账号被封的风险也随之增加。今天&#xff0c;我们就来聊聊如何有效防止 微信被封&#xff0c;让你的账…

【MySQL】入门篇—基本数据类型:NULL值的概念

在关系数据库中&#xff0c;NULL值是一个特殊的标记&#xff0c;表示缺失或未知的值。 NULL并不等同于零&#xff08;0&#xff09;或空字符串&#xff08;&#xff09;&#xff0c;它表示一个字段没有任何值。 这一概念在数据库设计和数据管理中至关重要&#xff0c;因为它影…

力扣——环形链表问题

判断链表是否有环以及入环的第一个节点 前言判断链表是否有环找到入环的第一个节点 前言 大家好&#xff0c;前段时间&#xff0c;熊二学习了关于环形链表相关的问题&#xff0c;以下是我的见解&#xff0c;希望能够帮助你们呀&#xff01; 判断链表是否有环 给定一个链表&am…

如何在一个月内快速学习掌握大模型

原本给自己的是一个月时间&#xff0c;通过梳理之后我自信的认为不需要一个月&#xff0c;两周即可&#xff0c;相较于其他技术&#xff0c;大模型应用的门槛要低得多。 先明确你想要深入到哪一层 1、基础设施层&#xff1a;了解即可&#xff0c;关注NVIDIA和超大规模厂商的最…