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

news2024/10/27 17:07:53

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.x
    container_name: es-node1
    environment:
      - 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: -1
        hard: -1
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
      - 9300:9300

  elasticsearch-node2:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.x.x
    container_name: es-node2
    environment:
      - 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: -1
        hard: -1
    volumes:
      - esdata2:/usr/share/elasticsearch/data

  elasticsearch-node3:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.x.x
    container_name: es-node3
    environment:
      - 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: -1
        hard: -1
    volumes:
      - esdata3:/usr/share/elasticsearch/data

volumes:
  esdata1:
    driver: local
  esdata2:
    driver: local
  esdata3:
    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.coloradmin.cn/o/2224815.html

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

相关文章

一站式学习 Shell 脚本语法与编程技巧,踏出自动化的第一步

文章目录 1. 初识 Shell 解释器1.1 Shell 类型1.2 Shell 的父子关系 2. 编写第一个 Shell 脚本3. Shell 脚本语法3.1 脚本格式3.2 注释3.2.1 单行注释3.2.2 多行注释 3.3 Shell 变量3.3.1 系统预定义变量(环境变量)printenv 查看所有环境变量set 查看所有…

HTML3D旋转相册

文章目录 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐

[Ansible实践笔记]自动化运维工具Ansible(一):初探ansibleansible的点对点模式

文章目录 Ansible介绍核心组件任务执行方式 实验前的准备更新拓展安装包仓库在ansible主机上配置ip与主机名的对应关系生成密钥对将公钥发送到被管理端,实现免密登录测试一下是否实现免密登录 常用工具ansibleansible—docansible—playbook 主要配置文件 Ansible 模…

centeros7 编译ffmpeg

使用yum安装的路似乎已经堵住了,请求的镜像全是404或503 1.打开终端并使用yum安装EPEL存储库(Extra Packages for Enterprise Linux):sudo yum install epel-release2.接下来,使用以下命令来安装FFmpeg:sudo yum install ffmpeg …

uniApp 加载google地图 并规划路线

uniApp 加载google地图 并规划路线 备注:核心代码实例 备注: 打开谷歌地图失败的话 参考google开发文档 https://developers.google.com/maps/documentation/urls/ios-urlscheme?hlzh-cn#swift核心代码 mounted() {this.loadGoogleMapsScript(); }, methods: {//加载loadGo…

使用 Docker 管理完整项目:Java、Vue、Redis 和 Nginx 的一站式部署

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

完美解决phpstudy安装后mysql无法启动

phpstudy数据库无法启动有以下几个原因。 一、自己在电脑上安装了MySQL数据库,MySQL的服务名为MySQL,这会与phpstudy的数据库的服务名发生冲突,从而造成phpstudy中的数据库无法启动,这时我们只需要将自己安装的MySQL的服务名改掉就行。 但是&#xff0…

使用 NumPy 和 Matplotlib 进行高级数据可视化:实践指南

使用 NumPy 和 Matplotlib 进行高级数据可视化:实践指南 数据科学和工程实践中,NumPy 和 Matplotlib 是强大的组合工具。本文将进一步展示如何借助这两个库进行更复杂的可视化任务,例如创建多曲线、叠加图、动态可视化等场景。 一、环境准备…

模型训练识别手写数字(三)

1. 使用卷积神经网络(CNN)来构建模型训练 import numpy as np from keras import Sequential from keras.api.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, BatchNormalization from keras.src.legacy.preprocessing.image import Im…

Date工具类详细汇总-Date日期相关方法

# 1024程序员节 | 征文 # 目录 简介 Date工具类单元测试 Date工具类 简介 本文章是个人总结实际工作中常用到的Date工具类,主要包含Java-jdk8以下版本的Date相关使用方法,可以方便的在工作中灵活的应用,在个人工作期间频繁使用这些时间的格…

力扣 中等 740.删除并获得点数

文章目录 题目介绍题解 题目介绍 题解 由题意可知,在选择了数组中元素 a 后,该元素以及所有等于 a−1 和 a1 的元素都会从数组中删去,并获得 a 的点数。若还有多个值为 a的元素,由于所有等于 a−1 或 a1 的元素已经被删除&#x…

Linux相关概念和易错知识点(16)(Shell原理、进程属性和环境变量表的联系)

Shell原理及其模拟实现 在认识进程exec系列函数、命令行参数列表、环境变量之后,我们可以尝试理解一下Shell的原理,将各方知识串联起来,让Shell跑起来才能真正理解这些概念。我会以模拟Shell执行的原理模拟一个Shell。途中配上相关讲解。 1…

信息安全工程师(72)网络安全风险评估概述

前言 网络安全风险评估是一项重要的技术任务,它涉及对网络系统、信息系统和网络基础设施的全面评估,以确定存在的安全风险和威胁,并量化其潜在影响以及可能的发生频率。 一、定义与目的 网络安全风险评估是指对网络系统中存在的潜在威胁和风险…

《Python游戏编程入门》注-第3章3

《Python游戏编程入门》的“3.2.4 Mad Lib”中介绍了一个名为“Mad Lib”游戏的编写方法。 1 游戏玩法 “Mad Lib”游戏由玩家根据提示输入一些信息,例如男人姓名、女人姓名、喜欢的食物以及太空船的名字等。游戏根据玩家输入的信息编写出一个故事,如图…

基于SSM的汽车客运站管理系统【附源码】

基于SSM的汽车客运站管理系统(源码L文说明文档) 目录 4 系统设计 4.1 设计原则 4.2 功能结构设计 4.3 数据库设计 4.3.1 数据库概念设计 4.3.2 数据库物理设计 5 系统实现 5.1 管理员功能实现 5.1.1 管理员信息 5.1.2 车…

详细解读Movie Gen(2):个性化视频训练

Diffusion Models专栏文章汇总:入门与实战 前言:Meta最近重磅发布了视频生成30B的基础模型Movie Gen,长达93页的技术报告中干货满满,博主将详细解读Movie Gen的核心网络结构、个性化视频微调方法、视频编辑等方面。虽然大部分人没有直接预训练30B模型的机会,但是可以从中获…

C++游戏开发中的多线程处理是否真的能够显著提高游戏性能?如果多个线程同时访问同一资源,会发生什么?如何避免数据竞争?|多线程|游戏开发|性能优化

目录 1. 多线程处理的基本概念 1.1 多线程的定义 1.2 线程的创建与管理 2. 多线程在游戏开发中的应用 2.1 渲染与物理计算 3. 多线程处理的性能提升 3.1 性能评估 3.2 任务分配策略 4. 多线程中的数据竞争 4.1 数据竞争的定义 4.2 多线程访问同一资源的后果 4.3 避…

视频剪辑新手必备:四款热门电脑视频剪辑软件评测

现在真的是一个视频流量的时代,不得不说,我都已经开始刷视频小说了!如果你和我一样,是个对电脑视频剪辑充满好奇的新手,那么你一定想知道哪款软件最适合我们这些初学者。今天,我就来和大家分享一下我使用过…

gin入门教程(10):实现jwt认证

使用 github.com/golang-jwt/jwt 实现 JWT(JSON Web Token)可以有效地进行用户身份验证,这个功能往往在接口前后端分离的应用中经常用到。以下是一个基本的示例,演示如何在 Gin 框架中实现 JWT 认证。 目录结构 /hello-gin │ ├── cmd/ …

医院信息化与智能化系统(10)

医院信息化与智能化系统(10) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应…