在三台 CentOS 7 虚拟机上使用 Docker 安装 Elasticsearch 8.17 的详细教程

概述

本教程将带您通过 Docker 在三台 CentOS 7 虚拟机上安装并配置 Elasticsearch 8.17。Elasticsearch 是一个开源的分布式搜索引擎,通常用于日志和数据分析。在这个教程中,您将学习如何:

  1. 在三台 CentOS 7 虚拟机上安装 Docker。
  2. 使用 Docker 容器安装 Elasticsearch。
  3. 配置并启动 Elasticsearch 集群。

前提条件

  1. 三台 CentOS 7 虚拟机。
  2. 每台虚拟机的网络能够相互访问。
  3. 每台虚拟机至少 4GB 内存,2 个 CPU 核心。
  4. 基本的 Linux 操作系统操作知识。

步骤 1:在三台 CentOS 7 虚拟机上安装 Docker

  1. 更新系统 在每台虚拟机上执行以下命令,确保系统是最新的: sudo yum update -y
  2. 安装 Docker 运行以下命令以安装 Docker: sudo yum install -y yum-utils device-mapper-persistent-data lvm2 添加 Docker 官方的仓库: sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 安装 Docker CE(Community Edition): sudo yum install -y docker-ce docker-ce-cli containerd.io
  3. 启动 Docker 服务 启动 Docker 服务,并设置为开机启动: sudo systemctl start docker sudo systemctl enable docker
  4. 验证 Docker 安装 使用以下命令验证 Docker 是否安装成功: sudo docker --version 如果返回 Docker 版本信息,说明 Docker 安装成功。

步骤 2:在三台虚拟机上安装 Elasticsearch Docker 镜像

  1. 拉取 Elasticsearch 镜像 在每台虚拟机上运行以下命令拉取 Elasticsearch 8.17 的 Docker 镜像: sudo docker pull docker.elastic.co/elasticsearch/elasticsearch:8.17.0 这将从 Docker 官方仓库下载 Elasticsearch 镜像。
  2. 确认 Elasticsearch 镜像已下载 使用以下命令确认 Elasticsearch 镜像已成功下载: sudo docker images 输出应该显示 elasticsearch:8.17.0 镜像。

步骤 3:配置 Elasticsearch 集群

为了使三台虚拟机上的 Elasticsearch 实例成为一个集群,我们需要为每台机器配置不同的节点名称、主机地址以及集群名称。

配置 Elasticsearch 环境变量

  1. 创建 Docker 配置文件 在每台虚拟机上,为 Elasticsearch 创建一个名为 elasticsearch.yml 的配置文件: sudo mkdir -p /etc/elasticsearch sudo touch /etc/elasticsearch/elasticsearch.yml
  2. 配置节点设置 编辑 elasticsearch.yml 文件,配置每个节点的 IP 地址和集群名称。以下是一个配置示例: cluster.name: "my-cluster" node.name: "node-1" # 每台机器的节点名不同 network.host: 0.0.0.0 discovery.seed_hosts: ["<VM-1-IP>:9300", "<VM-2-IP>:9300", "<VM-3-IP>:9300"] cluster.initial_master_nodes: ["node-1", "node-2", "node-3"] 在每台虚拟机上,分别将 node.name 改为 node-1node-2node-3,并将 discovery.seed_hosts 配置为集群中其他两台机器的 IP 地址。 注意:<VM-1-IP><VM-2-IP><VM-3-IP> 需要替换为实际的虚拟机 IP 地址。

步骤 4:启动 Elasticsearch 集群

  1. 启动容器 在每台虚拟机上使用以下命令启动 Elasticsearch 容器: sudo docker run -d \ --name elasticsearch-node-1 \ --net host \ -e "discovery.type=single-node" \ -e "ES_JAVA_OPTS=-Xms2g -Xmx2g" \ -e "node.name=node-1" \ -e "cluster.name=my-cluster" \ -e "network.host=0.0.0.0" \ -e "discovery.seed_hosts=<VM-2-IP>:9300,<VM-3-IP>:9300" \ -e "cluster.initial_master_nodes=node-1,node-2,node-3" \ docker.elastic.co/elasticsearch/elasticsearch:8.17.0 其中:
    • --name 指定容器的名称。
    • -e "discovery.type=single-node" 用于非集群模式(仅测试时使用)。生产环境中不要设置此选项。
    • -e "ES_JAVA_OPTS=-Xms2g -Xmx2g" 设置 Elasticsearch 的 JVM 堆内存为 2GB。
    • -e "node.name=node-1" 指定节点名称。
    • -e "discovery.seed_hosts" 配置集群中其他节点的 IP 地址。
    将每台虚拟机的命令中的 node-1 修改为 node-2node-3,并相应地调整 IP 地址。
  2. 检查 Elasticsearch 容器状态 使用以下命令检查容器是否成功启动: sudo docker ps 如果容器在运行,它会显示类似以下内容: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 123456789abc docker.elastic.co/elasticsearch/elasticsearch "/bin/bash -c 'exec ... " 5 minutes ago Up 5 minutes elasticsearch-node-1
  3. 查看 Elasticsearch 日志 如果容器启动出现问题,可以查看 Elasticsearch 容器的日志: sudo docker logs elasticsearch-node-1

步骤 5:验证 Elasticsearch 集群

  1. 访问 Elasticsearch REST API 在其中一台虚拟机上,您可以使用 curl 来检查 Elasticsearch 是否正常运行: curl -X GET "localhost:9200/" 如果 Elasticsearch 正常启动,您将看到类似以下的响应: { "name" : "node-1", "cluster_name" : "my-cluster", "cluster_uuid" : "abc123xyz", "version" : { "number" : "8.17.0", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "abcdef1234567890", "build_date" : "2023-05-10T10:39:57.596481991Z", "lucene_version" : "9.4.2", "minimum_wire_compatibility_version" : "7.10.0", "minimum_index_compatibility_version" : "7.10.0" } }
  2. 验证集群状态 使用以下命令验证 Elasticsearch 集群的状态: curl -X GET "localhost:9200/_cluster/health?pretty=true" 如果集群状态为 green,表示集群正常工作。

步骤 6:集群管理

  1. 增加节点 如果需要添加更多节点,可以使用以下命令在其他虚拟机上启动新的容器,确保将 discovery.seed_hostscluster.initial_master_nodes 配置为当前集群中的所有节点。
  2. 停止和删除容器 要停止并删除容器,可以使用以下命令: sudo docker stop elasticsearch-node-1 sudo docker rm elasticsearch-node-1

结语

通过本教程,您已经成功在三台 CentOS 7 虚拟机上通过 Docker 安装并配置了一个 Elasticsearch 8.17 集群。现在您可以根据自己的需求调整 Elasticsearch 配置,执行查询,或将其与其他服务集成。

关注一粒云,使用一粒云kbox,或者一粒云kdocs 建立一下结构文件夹结构管理好es8机群部署:


elasticsearch-setup/

├── docs/ # 存放安装文档及操作手册
│ ├── README.md # 项目概述、安装流程
│ ├── es-installation-guide.md # Elasticsearch 安装教程
│ ├── es-cluster-configuration.md # Elasticsearch 集群配置教程
│ ├── es-troubleshooting.md # 常见问题和解决方案
│ └── es-security-setup.md # 安全配置教程(如启用 SSL/TLS、认证)

├── scripts/ # 存放所有相关的脚本文件
│ ├── install-docker.sh # 在 CentOS 7 上安装 Docker 的脚本
│ ├── start-es-container.sh # 启动 Elasticsearch 容器的脚本
│ ├── setup-es-cluster.sh # 配置 Elasticsearch 集群的脚本
│ ├── stop-es-container.sh # 停止 Elasticsearch 容器的脚本
│ └── cleanup.sh # 清理不再需要的容器和镜像的脚本

├── config/ # 存放配置文件
│ ├── elasticsearch.yml # Elasticsearch 配置文件
│ └── docker-compose.yml # 如果使用 Docker Compose 部署,存放该文件

├── logs/ # 存放日志文件(安装过程、运行时日志)
│ ├── install-log.txt # 安装过程中生成的日志文件
│ └── es-container-logs/ # Elasticsearch 容器运行时的日志
│ ├── elasticsearch-node-1.log
│ ├── elasticsearch-node-2.log
│ └── elasticsearch-node-3.log

└── backups/ # 存放数据备份、容器配置等重要文件
├── es-backup-2025-06-04.tar.gz # Elasticsearch 数据备份
└── config-backup-2025-06-04.tar.gz # 配置文件备份