docker中怎么搭建elastatic集群

发布时间:2021-06-21 15:53:14 作者:Leah
来源:亿速云 阅读:198
# Docker中怎么搭建Elasticsearch集群

## 前言

Elasticsearch作为当前最流行的分布式搜索和分析引擎,在日志分析、全文检索等领域广泛应用。使用Docker部署Elasticsearch集群可以极大简化环境配置和节点管理。本文将详细介绍如何在Docker环境中搭建一个多节点的Elasticsearch集群。

## 一、环境准备

### 1.1 基础要求

- Docker 20.10.0或更高版本
- Docker Compose 1.29.0或更高版本
- 至少4GB可用内存(建议8GB+)
- Linux/macOS/Windows(WSL2)系统

### 1.2 资源分配建议

对于开发测试环境:
- 每个节点分配1-2GB内存
- 2-3个节点组成集群

生产环境建议:
- 每个节点至少4GB内存
- 3个以上节点(奇数个)

## 二、单节点快速体验

### 2.1 运行单个节点

```bash
docker run -d --name es01 \
  -p 9200:9200 -p 9300:9300 \
  -e "discovery.type=single-node" \
  -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
  docker.elastic.co/elasticsearch/elasticsearch:8.12.0

2.2 验证运行状态

curl -X GET "localhost:9200/_cat/nodes?v"

三、多节点集群搭建

3.1 使用Docker Compose部署

创建docker-compose.yml文件:

version: '3'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es01-data:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic

  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es02-data:/usr/share/elasticsearch/data
    networks:
      - elastic

  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es03-data:/usr/share/elasticsearch/data
    networks:
      - elastic

volumes:
  es01-data:
  es02-data:
  es03-data:

networks:
  elastic:
    driver: bridge

3.2 启动集群

docker-compose up -d

3.3 验证集群状态

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

期望输出:

{
  "cluster_name" : "es-docker-cluster",
  "status" : "green",
  "number_of_nodes" : 3,
  ...
}

四、安全配置

4.1 启用安全功能

修改环境变量:

environment:
  - xpack.security.enabled=true
  - xpack.security.http.ssl.enabled=true

4.2 生成密码

docker exec -it es01 /bin/bash
bin/elasticsearch-setup-passwords auto

4.3 使用认证访问

curl -u elastic:your_password -X GET "https://localhost:9200/_cluster/health?pretty" -k

五、Kibana集成

5.1 添加Kibana服务

docker-compose.yml中添加:

kibana:
  image: docker.elastic.co/kibana/kibana:8.12.0
  ports:
    - 5601:5601
  environment:
    ELASTICSEARCH_HOSTS: '["http://es01:9200"]'
    ELASTICSEARCH_USERNAME: kibana_system
    ELASTICSEARCH_PASSWORD: your_kibana_password
  networks:
    - elastic

5.2 访问Kibana

浏览器打开:http://localhost:5601

六、生产环境建议

6.1 配置优化

  1. 内存设置: “`yaml environment:

    • “ES_JAVA_OPTS=-Xms4g -Xmx4g”

    ”`

  2. 禁用交换分区: “`yaml environment:

    • bootstrap.memory_lock=true

    ”`

6.2 持久化存储

使用外部卷或绑定挂载:

volumes:
  - /path/to/data:/usr/share/elasticsearch/data

6.3 网络配置

建议使用自定义网络:

networks:
  esnet:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16

七、常见问题解决

7.1 节点无法加入集群

检查项: - 确保所有节点cluster.name一致 - 检查discovery.seed_hosts配置正确 - 验证网络连通性

7.2 内存不足错误

解决方案: - 增加JVM堆大小 - 减少分片数量 - 添加更多节点

7.3 磁盘空间不足

处理方法: - 增加磁盘配额 - 设置ILM策略自动清理旧索引 - 考虑使用热温冷架构

八、集群监控

8.1 使用Elasticsearch监控API

curl -X GET "localhost:9200/_nodes/stats?pretty"

8.2 集成Prometheus

配置elasticsearch.yml

xpack.monitoring.collection.enabled: true

九、版本升级

  1. 先升级一个节点
  2. 等待集群状态恢复
  3. 逐步升级其他节点
docker-compose pull
docker-compose up -d

结语

通过Docker搭建Elasticsearch集群不仅简化了部署流程,还便于维护和扩展。本文介绍的方案适合中小规模集群,对于更大规模的部署,建议考虑Kubernetes等容器编排系统。实际生产环境中,还需要结合具体业务需求进行调优和安全加固。

注意:本文基于Elasticsearch 8.12版本编写,不同版本配置可能略有差异。 “`

这篇文章共计约1850字,采用Markdown格式编写,包含了从单节点部署到多节点集群搭建的完整流程,并涵盖了安全配置、Kibana集成、生产环境建议等实用内容。文章结构清晰,代码示例完整,可以直接用于实际部署参考。

推荐阅读:
  1. docker搭建mongo集群
  2. docker如何搭建集群

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

docker

上一篇:Mybatis 怎么处理clob类型数据

下一篇:Java 怎么用Velocity引擎生成代码

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》