Elasticsearch 在linux部署 及 Docker 集群部署详解案例示范
1. 在 CentOS 上安装和配置 Elasticsearch
在 CentOS 系统下,安装 Elasticsearch 主要分为以下步骤:
1.1 准备工作
在开始安装之前,确保你的系统满足以下基本条件:
- CentOS 版本要求:推荐使用 CentOS 7 及以上版本。
- Java 环境:Elasticsearch 依赖于 Java 运行时环境 (JRE)。需要确保 Java 版本为 8 或更高。
- 系统资源: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
- 添加 Elasticsearch 官方仓库:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- 创建 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
保存文件并退出。
- 更新仓库并安装 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 部署
- 拉取 Elasticsearch Docker 镜像:
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.x.x
- 运行单节点 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指定为单节点模式,不启动集群。
- 验证 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 集群。
- 安装 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
- 创建 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 节点,它们组成一个集群,每个节点都将数据存储在独立的卷上。
- 启动 Elasticsearch 集群
在 docker-compose.yml 文件所在的目录中运行以下命令:
docker-compose up -d
此命令将启动 3 个 Elasticsearch 节点并组成一个集群。你可以通过以下命令查看运行状态:
docker-compose ps
- 验证集群状态
可以通过 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 都能提供一致的运行环境,极大地提高了灵活性和可维护性。在生产环境中,还应根据具体需求优化内存分配、数据持久化和安全性配置。
相关文章:
Elasticsearch 在linux部署 及 Docker 集群部署详解案例示范
1. 在 CentOS 上安装和配置 Elasticsearch 在 CentOS 系统下,安装 Elasticsearch 主要分为以下步骤: 1.1 准备工作 在开始安装之前,确保你的系统满足以下基本条件: CentOS 版本要求:推荐使用 CentOS 7 及以上版本。…...
短信验证码发送实现(详细教程)
短信验证码 接口防刷强检验以及缓存验证码阿里云短信服务操作步骤验证码发送实现 好久没发文啦!最近也是在工作中遇到我自认为需要记录笔记的需求,本人只求日后回顾有迹可寻,不喜勿喷! 废话不多说,直接上代码ÿ…...
P450催化的联芳基偶联反应-文献精读72
Chemoenzymatic Synthesis of Fluorinated Mycocyclosin Enabled by the Engineered Cytochrome P450-Catalyzed Biaryl Coupling Reaction 经工程化的细胞色素P450催化的联芳基偶联反应实现氟代麦环素的化学酶促合成 摘要 将氟原子引入天然产物有望生成具有改良或新颖药理特…...
在不支持AVX的linux上使用PaddleOCR
背景 公司的虚拟机CPU居然不支持avx, 默认的paddlepaddle的cpu版本又需要有支持avx才行,还想用PaddleOCR有啥办法呢? 是否支持avx lscpu | grep avx 支持avx的话,会显示相关信息 如果不支持的话,python运行时导入paddle会报错 怎么办呢 方案一 找公司it,看看虚拟机为什么…...
Python数据分析——Numpy
纯个人python的一个小回忆笔记,当时假期花两天学的python,确实时隔几个月快忘光了,为了应付作业才回忆起来,不涉及太多基础,适用于有一定编程基础的参考回忆。 这一篇笔记来源于下面哔哩哔哩up主的视频: 一…...
JMeter快速入门示例
JMeter是一款开源的性能测试工具,常用于对Web服务和接口进行性能测试。 下载安装 官方下载网址: https://jmeter.apache.org/download_jmeter.cgi也可以到如下地址下载:https://download.csdn.net/download/oscar999/89910834 这里下载Wi…...
【333基于Java Web的考编论坛网站的设计与实现
毕 业 设 计(论 文) 考编论坛网站设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计…...
计算机网络关键名词中英对照
物理层 IMP - Interface Message Processor - 接口信息处理机 MODEM - Modulator-Demodulator - 调制解调器 LAN - Local Area Network - 局域网 FDM - Frequency Division Multiplexing - 频分复用 TDM - Time Division Multiplexing - 时分复用 STDM - Statistical Time…...
二叉树的学习
除了根节点外的其他节点只有一个直接前驱,有多个直接前驱的逻辑结构叫做图 任何一个树都可以看成是一个根节点和若干个不相交的子树构成的; 构建思维导图时使用树形结构 题目中给出AB是堂兄弟节点说明他们处在同一层 描述两节点之间的路径是从上到下的,同层没有路径,一条边记录…...
免费开源的医疗信息提取系统:提升超声波影像的诊断价值
一、系统概述 思通数科推出的医疗信息精准抽取系统,致力于解决当前医疗行业面临的信息碎片化和数据管理难题。传统医疗过程中,超声波影像数据与诊断报告之间的脱节,往往导致信息无法有效整合,影响医生的诊断效率与准确性。我们的…...
Bash 中的 ${} 和 $() 有什么区别 ?
Bash (Bourne-Again SHell) 是一种流行的 Unix SHell,用于编写脚本。如果您使用 Bash 脚本,那么了解不同的语法元素对于提高脚本的效率和避免错误是很重要的。 在本文中,我们将解释 Bash 中 ${} 和 $() 语法之间的区别,并向您展示…...
SPSS、R语言因子分析FA、主成分分析PCA对居民消费结构数据可视化分析
全文链接:https://tecdat.cn/?p37952 分析师:Ting Mei 在经济发展的大背景下,居民消费结构至关重要。本文围绕居民消费结构展开深入研究,运用 SPSS25.0 和 R 语言,以因子分析法和主成分分析法对东北三省居民消费价格指…...
高级SQL技巧掌握
高级SQL技巧掌握 在数据驱动的时代,掌握SQL不仅仅是为了解决具体问题,它更像是一把钥匙,帮助你打开数据分析的大门。你准备好提升你的SQL技能了吗?在这篇文章中,我们将一起探索十个必备的高级SQL查询技巧,这些技巧将帮助你更有效率地进行数据处理与分析。 1. 常见表表达…...
数组实例之三子棋的实现(C语言)
目录 前言 一、三子棋实现的逻辑 二、三子棋的实现 2.1文件的创建添加 2.2 test文件基本逻辑 2.2.1菜单的实现 2.2.2菜单的选择 2.2.3game函数棋盘的实现 2.3game.c文件的编写 2.3.1初始化函数的模块 2.3.2棋盘打印的模块 2.3.3实现棋盘界面的打印 2.3.4实现玩家下…...
【Linux驱动开发】设备树节点驱动开发入门
【Linux驱动开发】设备树节点驱动开发入门 文章目录 设备树文件设备树文件驱动开发附录:嵌入式Linux驱动开发基本步骤开发环境驱动文件编译驱动安装驱动自动创建设备节点文件 驱动开发驱动设备号地址映射,虚拟内存和硬件内存地址字符驱动旧字符驱动新字…...
C++——string的模拟实现(下)
目录 成员函数 3.4 修改操作 (3)insert()函数 (4)pop_back()函数 (5)erase()函数 (6)swap()函数 3.5 查找操作 (1)find()函数 (2)substr()函数 3.6 重载函数 (1)operator赋值函数 (2)其他比较函数 (3)流插入和流提取 完整代码 结束语 第一篇链接:C——…...
面试 Java 基础八股文十问十答第二十九期
面试 Java 基础八股文十问十答第二十九期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)类加载过程 类加载…...
454.四数相加||
题目: 454. 四数相加 II - 力扣(LeetCode) 思路: 考虑到时间复杂度问题,本题最重要的是要将四个数组划分成两个部分,每个部分(n^2)的时间复杂度,选取数据结构时,考虑到既要存储元素(key),又要有元素次数…...
禅道源码部署
文章目录 禅道部署1.环境部署安装httpd和mariadb安装php 2.安装禅道首先进行httpd服务的配置安装禅道 禅道部署 1.环境部署 安装lamp环境 组件版本httpdyum安装mariadbyum安装phpphp-7.4.33 选择一个php版本就行,我们这里选择的是7.4.33 安装httpd和mariadb [r…...
️ Vulnhuntr:利用大型语言模型(LLM)进行零样本漏洞发现的工具
在网络安全领域,漏洞的发现和修复是保护系统安全的关键。今天,我要向大家介绍一款创新的工具——Vulnhuntr,这是一款利用大型语言模型(LLM)进行零样本漏洞发现的工具,能够自动分析代码,检测远程…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...
Redis上篇--知识点总结
Redis上篇–解析 本文大部分知识整理自网上,在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库,Redis 的键值对中的 key 就是字符串对象,而 val…...
