在三台 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 # 配置文件备份

VLLM对比Ollama,6卡A5000 部署VLLM + Dify​​的详细教程


​一、硬件与基础环境准备​

​1. 服务器配置要求​

  • ​GPU​​:6×NVIDIA A5000(24GB显存/卡,共144GB显存)
  • ​内存​​:≥64GB RAM
  • ​存储​​:≥500GB SSD(推荐NVMe)
  • ​系统​​:Ubuntu 22.04 LTS / Debian 12

​2. 环境初始化​

# 安装基础工具
sudo apt update && sudo apt install -y docker.io nvidia-container-toolkit
# 配置Docker使用NVIDIA GPU
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

​二、VLLM多卡部署(6卡优化)​

​1. 安装vLLM​

# 创建虚拟环境
conda create -n vllm python=3.10 -y && conda activate vllm
# 安装vLLM(推荐0.5.4+)
pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple

​2. 启动6卡推理服务​

vllm serve --model /path/to/model \  
   --tensor-parallel-size 6 \          # 并行数=GPU数量
   --gpu-memory-utilization 0.85 \     # 显存利用率阈值(6卡建议0.8~0.9)
   --max-num-seqs 64 \                 # 高并发优化
   --enforce-eager \                   # 避免多卡兼容问题
   --port 8000 \                       # 服务端口
   --api-key "your-token"              # 访问令牌(增强安全性)

​三、Dify部署与对接VLLM​

​1. 部署Dify服务​

# 拉取Dify代码
git clone https://github.com/langgenius/dify.git
cd dify/docker

# 修改配置(关键步骤)
cp .env.example .env
nano .env  # 修改以下参数:
# 模型端点指向VLLM服务
MODEL_PROVIDER=vllm
VLLM_API_BASE=http://localhost:8000/v1  # VLLM的OpenAI兼容API地址
VLLM_MODEL_NAME=your-model-name         # 与vLLM启动时的模型名一致

​2. 启动Dify​

docker compose up -d  # 自动构建容器

​四、外部应用API调用方法​

​1. 通过Dify调用(业务层)​

  • ​Dify API地址​​:http://<服务器IP>:80/v1(默认端口)
  • ​认证​​:Header中添加 Authorization: Bearer {DIFY_API_KEY}
  • ​请求示例​​(生成文本):
import requests
url = "http://<服务器IP>/v1/completion"
data = {
  "inputs": "你好,介绍一下vLLM",
  "response_mode": "blocking"
}
headers = {"Authorization": "Bearer dify-api-key"}
response = requests.post(url, json=data, headers=headers)

​2. 直接调用VLLM(高性能场景)​

# 使用OpenAI兼容API(Python示例)
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="your-token")
response = client.chat.completions.create(
  model="your-model-name",
  messages=[{"role": "user", "content": "解释量子力学"}]
)

​五、VLLM对比Ollama的核心优势​

​维度​​VLLM​​Ollama​
​多卡支持​✅ 原生6卡张量并行(--tensor-parallel-size=6❌ 仅支持单卡,多卡需手动切换
​吞吐量​⭐ 连续批处理技术,6卡并发提升5-10倍⚠️ 单请求处理,并发能力弱
​生产就绪​✅ 工业级部署(API密钥、监控、扩缩容)❌ 定位开发测试,无企业级特性
​显存管理​✅ PagedAttention动态分配,支持百亿模型⚠️ 全模型加载,易OOM
​安全性​✅ 内置API密钥认证❌ 默认无认证,需Nginx反向代理

💡 ​​关键结论​​:
VLLM是​​生产级AI服务​​的首选,尤其适合高并发、低延迟场景(如API服务);
Ollama更适合​​本地快速原型验证​​,但在多卡利用率和安全性上存在明显短板。


​六、常见问题排查​

  1. ​多卡启动失败​​: export VLLM_WORKER_MULTIPROC_METHOD=spawn # 解决多进程卡死
  2. ​显存不足​​:
    • 降低--gpu-memory-utilization至0.7
    • 添加--swap-space 16 使用主机内存扩展
  3. ​Dify连接VLLM失败​​:
    • 检查.envVLLM_API_BASE是否含/v1路径
    • 确保vLLM启动参数含--api-key且与Dify配置一致

部署完成后,可通过 nvidia-smi 监控GPU利用率,正常运行时6卡负载应均衡(±5%差异)。

英文参考原文:Based on the information available, here’s a comparison of vLLM and Ollama, two popular frameworks for running large language models (LLMs) locally: 

vLLM 

  • Focus: High-throughput, low-latency LLM inference and serving, particularly suited for production environments.
  • Key Features:
    • PagedAttention: A memory management technique that optimizes GPU memory usage for faster inference speeds, especially with long sequences and large models.
    • Continuous Batching: Processes incoming requests dynamically to maximize hardware utilization.
    • High Performance: Consistently delivers superior throughput and lower latency, particularly for concurrent requests.
    • Scalability: Designed for scalability, including support for tensor parallelism and pipeline parallelism for distributed inference across multiple GPUs or nodes.
    • OpenAI-compatible API: Simplifies integration with applications.
  • Hardware Requirements: Optimized for high-end, CUDA-enabled NVIDIA GPUs, although it technically supports CPU inference (less optimized).
  • Ease of Use: Offers more control and optimization options but has a steeper learning curve, requiring more technical knowledge for setup. 

Ollama 

  • Focus: User-friendly, local deployment and management of LLMs, prioritizing simplicity and accessibility.
  • Key Features:
    • Ease of Use: Offers a streamlined workflow for downloading, running, and managing models with a simple command-line interface (CLI) and an OpenAI-compatible API.
    • Broad Hardware Compatibility: Works well on both GPUs and CPUs, making it accessible to users with consumer-grade hardware.
    • Local Deployment with Privacy: Ensures data privacy and control by keeping data processing within your local environment.
    • Adaptable: Supports various model types and offers token streaming for faster responses.
    • Growing Performance: While potentially slower than vLLM on high-end GPUs, recent updates have significantly improved its performance.
  • Hardware Requirements: Designed to work reasonably well even on consumer-grade hardware.
  • Ease of Use: Prioritizes simplicity, making it easy to install and run models with just a few commands. 

In Summary:

  • Choose vLLM when: You need maximum performance and scalability in production environments, especially when utilizing high-end GPUs for high-throughput workloads.
  • Choose Ollama when: You prioritize ease of use, broad hardware compatibility (including CPU-only setups), and local data privacy for development, prototyping, or simpler projects. 

Hybrid Approach:

It’s worth considering a hybrid approach where you use Ollama for development and prototyping and then deploy with vLLM in production for optimal performance. 

案例解析|江西共青城亚华公司文档管理升级

一、亚华公司基础信息

江西省亚华电子材料有限公司成立于2012年,总部位于江西共青城市高新六路,注册资本1.6亿元,占地350亩,员工规模超2500人,是国家高新技术企业、江西省瞪羚企业。作为国内电子材料制造领域的龙头企业,其核心业务涵盖微晶玻璃盖板、摄像头光学镜片等精密部件生产,客户包括华为、小米、三星等全球知名品牌。企业研发与生产过程中涉及海量技术图纸(如CAD设计)、工艺流程文档、质量检测报告等,年均产生数万份专业文件。

二、制造业文档体系管理的主要难题

作为典型的重资产制造企业,亚华公司在文档管理方面曾面临以下核心挑战:

  1. 文件分散存储,协同效率低
    技术图纸、BOM表等核心数据分散在各部门及员工本地存储设备中,跨部门协作时需反复传输,易出现版本混乱。
  2. 版本控制与追溯困难
    设计图纸频繁迭代,历史版本缺乏统一管理,一线生产人员可能误用旧版图纸,导致生产事故。
  3. 安全风险突出
    研发资料、客户合同等敏感文件缺乏细粒度权限管控,存在内部泄露风险;同时未实现内外网隔离,易受外部攻击威胁。
  4. 检索效率低下
    传统文件夹分类模式下,工程师需花费平均17分钟查找特定文档,严重影响研发与生产进度。

三、一粒云文档云平台的解决方案

通过南昌平孜科技有限公司代理实施的一粒云企业文档管理系统,亚华公司构建了覆盖全生命周期的智能化文档管理体系:

1. 制造业文档全流程标准化管理
  • 统一存储与分类(数据初始化)
    将分散的CAD图纸、工艺文件等集中存储于一粒云,按“产品型号-工序-版本”多层级目录结构化归档,支持标签化智能分类(如“3D玻璃盖板-2025Q2迭代”)。
  • 版本控制与追溯(场景培训)
    系统自动记录图纸修改历史,支持版本对比与一键回滚;结合审批流程,确保只有通过验证的版本才能投入生产。
2. 制造业场景深度适配功能
  • 跨平台智能检索(场景培训适配)
    基于语义分析的OCR技术可识别图纸中的关键参数(如“厚度0.5mm”“耐温300℃”),工程师通过关键词组合即可秒级定位目标文件。
  • 安全管控体系(场景培训适配)
    动态水印、细粒度权限(如“研发部仅可查看不可下载”)、内外网隔离通道三重防护,核心资料泄露风险降低90%。
  • 生产协同增强(场景培训适配)
    支持在OA系统中直接关联技术文档,生产计划审批时自动推送关联图纸;车间终端设备可实时调取最新版作业指导书。
3. 数据价值深度挖掘
  • 知识库沉淀
    将历史项目文档转化为企业知识库,新员工可通过标签化检索快速掌握技术要点,培训周期缩短40%。
  • 运营效率可视化
    管理后台实时展示文档调用频次、协作热点,辅助优化资源配置。数据显示,系统上线后文档复用率提升65%。

四、本地化服务保障:南昌平孜科技有限公司

作为一粒云在江西地区的核心代理商,南昌平孜科技有限公司全程主导亚华项目落地:

  • 行业化定制针对制造业高频场景定制功能模块(如图纸批量比对、工艺文件模板库);
  • 无缝集成后续通过系统对接集成实现与亚华现有ERP、MES系统的数据打通;
  • 持续运维提供7×24小时本地技术支持,年均响应时效低于15分钟。

项目成效

系统上线2个月后,亚华公司文档管理综合效率提升70%,图纸版本错误大大降低,为研发资保护提供强有力工具。为后续文档的智能化提供坚实的数据仓库底座。

KDOC 企业级产品部署方案对比

KDOC文档云+隔离网文件交换系统部署方式说明

一粒云云盘系统架构设计之初就是按照模块设计,目标是支持任意一台设备,或者多台设备都能很好的运行,包括云盘的插件,子系统都基于相同的架构,相同的开发语言与基础环境开发。使用分布式架构并且云存储系统系支持分布式部署,兼容所有品牌的硬件,支持系统实现横向扩展(增加节点),纵向扩展(增加备份)及针对部分组件实现性能扩展。

假设客户现有资源准备:

内网区域:超融合虚拟化服务器,虚拟出了3台虚拟机,虚拟化平台配置为:

CPU:16核 / 内存:128GB / 系统分区:512G(SSD+)

存储分区:容量:500G / 其他通过nas挂载到 /data 目录

导出区 (独立网段)

台式机器一台,16G内存,安装centos 7.8系统;    

一粒云KDOC文档云系统 整体方案 组成由云盘系统+文件交换模块;

在部署方式上面一般采用高可用方式与分布式集群方式进行部署;两种方式的具体描述如下:

方案1:采用分布式集群部署

部署概念图:

image
分布式集群部署

说明:分布式集群部署要确保每个重要模块都有> 2 个的独立服务器,方式因为单台服务器宕机导致系统不可用,系统最低分为3个部署模块+1个负载均衡模块,负载均衡模块为proxy 至少保证2个服务;应用服务模块 为图中的App server (默认包含了 消息、缓存、文件转码、传输、搜索、杀毒等服务)App Server根据 用户的文件类型决定是否需要继续分,如果用户有大量的图纸、视频需要处理则需要将文件转码这个服务单独部署1台或者多台进行服务,基于集群的理念 App Server 经过负载均衡的方式链接到proxy,可以根据权重、服务频次进行设计LB设置,确保3台服务器的繁忙程度基本一致;

数据库: 采用mysql 数据,一般采用主从同步,不建议采用双主,mysql 双主技术会导致不同步现象出现;

分布式存储:一粒云内置FDFS 分布式存储服务,用户只需要通过NFS、Iscsi、Samba等方式挂载空间到一粒云指定的存储路径就可以作为云盘的存储使用;分布式存储也是采用负载均衡的策略进行服务,多节点情况下,需要区分配置为存储节点还是备份节点,只有配置为存储节点才能扩容,如果配置是备份节点就会产品+1个文件副本,用来提高安全性,同时也可以提高读写IO,根据项目的具体情况来配置;因此分布式集群情况下需要确保有1主节点+1备份节点;

扩展方式: 分部署集群的扩展方式为 proxy > 2 台后可以不用扩展,App server 根据CPU使用率来扩展,支持单台扩展; 数据库扩展主要为从节点:就是查询节点的扩展; FDFS 的扩展为组扩展方式:就是一旦扩展就要扩展1主1备 2个节点;不能单个节点扩展;

方案2:采用模块分布式部署

部署图:

image 1
分布式模块化部署

说明:考虑到当前物理设备与标准化机房的甚至还有超融合等底层技术的支撑,基础IDC环境稳定性越来越强,因此采用模块化分布式部署也是主流的部署方式;一般一粒云在部署过程中会采用模块化+主备的部署方式,来提高系统的可用性;

主备的方式主要是指对数据做备份,并且是根据线上环境进行实时的备份,一台涉及到虚拟化宕机情况下,可以通过新建虚拟机,并且快速部署模块并挂载模块数据进行快速恢复启用;这里的数据主要有2个: 一是数据库里面的数据,一个是分布式存储fdfs中的数据;还有各个模块的配置文件;

扩展方式:模块分布式部署在性能扩容上也比较简单,就是扩展App server的个数,或者将App server中的特别占性能的模块单独部署;这里对模块的部署个数没有要求,系统的可用性主要来源与对IDC基础设置的信任,同时系统自身产品的数据做备份,以防万一;

两种方式优劣势对比

对比部署难度资源消耗维护难度扩展难度安全性可用性
分布式集群>6
模块分部署<3依赖IDC环境
两种部署对比表格