FakeOrange
预计阅读时间:4分钟49秒

Docker安装部署Elasticsearch

详细的Docker部署Elasticsearch的教程,新手可能会遇见的问题

0
0

前言


手把手教你如何使用docker部署elasticsearch,并有些常见问题给到大家。


一、准备工作


确保你已经安装了以下软件:


  • Docker:在大多数主流操作系统上都可以安装 Docker,可以通过 Docker 官网 下载和安装。


  • Docker Compose(可选):如果要运行多容器应用或配置复杂的服务,安装 Docker Compose 也是推荐的。



二、拉取 Elasticsearch 镜像


  • 打开终端或命令提示符。(cmd)


  • 使用以下命令从 Docker Hub 拉取官方的 Elasticsearch 镜像:


docker pull docker.elastic.co/elasticsearch/elasticsearch:8.10.0 


  • 注意:这里以 8.10.0 版本为例,你可以根据需要替换成其他版本。可以写latest拉取最新版本。



三、配置 Elasticsearch 容器


Elasticsearch 使用默认的 9200 端口(REST API)和 9300 端口(集群通信),可以通过 docker run 命令进行简单配置和启动。


单节点配置


  • 运行以下命令来启动单节点的 Elasticsearch 实例:


docker run -d --name es01 \
  -p 9200:9200 -p 9300:9300 \
  -e "discovery.type=single-node" \
  docker.elastic.co/elasticsearch/elasticsearch:8.10.0


  • --name es01:将容器命名为 es01。


  • -p 9200:9200 和 -p 9300:9300:将本地主机的端口映射到容器的端口。


  • -e "discovery.type=single-node":指定为单节点模式,适用于开发或测试环境。


  • 启动成功后,你可以在浏览器中访问 http://localhost:9200 检查 Elasticsearch 是否正常启动。


多节点配置


如果需要配置集群,可以使用 Docker Compose 编写 docker-compose.yml 文件。

  1. 创建 docker-compose.yml 文件并添加以下内容:


version: '3'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.10.0
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ports:
      - 9200:9200
    networks:
      - esnet

  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.10.0
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    networks:
      - esnet

  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.10.0
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    networks:
      - esnet

networks:
  esnet:
    driver: bridge


  • node.name:每个节点的名称。

  • cluster.name:集群名称。

  • discovery.seed_hosts:定义集群中其他节点的 IP 地址或主机名。

  • cluster.initial_master_nodes:初始化时的主节点。

  • ES_JAVA_OPTS=-Xms512m -Xmx512m:设置 JVM 内存大小,根据机器的内存情况调整。

    • 运行以下命令启动多节点集群:


    docker-compose up -d
    


    • 启动完成后,你可以在浏览器中访问 http://localhost:9200 查看集群信息。


    四、验证 Elasticsearch 是否正常运行


    • 使用以下命令查看容器状态,确保所有节点都在运行:


    docker ps -a  #加入-a会显示异常容器,否则可能不显示异常容器,来自大神群友的指正!


    • 使用 curl 或直接在浏览器中访问 http://localhost:9200/_cat/nodes?v,查看集群节点信息:bashCopy codecurl -X GET "localhost:9200/_cat/nodes?v&pretty"


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


    总结


    通过 Docker 部署 Elasticsearch 可以简化安装和配置,适用于快速搭建测试环境,也可以灵活配置成多节点集群。这些基础操作可以帮助你快速上手并进行基本数据操作。


    常见问题总结及解决方案


    Exit code 78: 内存设置不足


    以下为解决方案,修改vm.max_map_count 即可,均在cmd中运行:


    Linux

    要查看当前 vm.max_map_count 的设置值,请运行以下命令:

    grep vm.max_map_count /etc/sysctl.conf
    

    输出示例:

    vm.max_map_count=262144
    

    在运行中的系统上临时应用该设置,运行:

    sysctl -w vm.max_map_count=262144
    

    要永久更改 vm.max_map_count 的值,可以在 /etc/sysctl.conf 文件中更新该设置。


    macOS 使用 Docker for Mac


    在 macOS 上,vm.max_map_count 设置需要在 xhyve 虚拟机中进行:


    • 打开终端并运行以下命令:bashCopy codescreen ~/Library/Containers/com.docker.docker/Data/vms/0/tty


    • 按回车键,然后使用 sysctl 配置 vm.max_map_count:bashCopy codesysctl -w vm.max_map_count=262144


    • 要退出 screen 会话,按 Ctrl + a,然后按 d。


    Windows 和 macOS 使用 Docker


    在 Windows 和 macOS 上运行 Docker 时,需要通过 docker-machine 设置 vm.max_map_count


    docker-machine ssh
    sudo sysctl -w vm.max_map_count=262144
    


    Python Client 连接用户密码及ca_cert


    Python用SDK链接elasticsearch需要ca_cert,及用户名密码。


    查看docker logs

    docker logs es01
    


    在log中应该会有如此字样:

    elasticsearch password for the elastic user: <password>


    如果没有也可以手动重新设置,还是在cmd


    docker exec -it elastic bin/elasticsearch-setup-passwords interactive
    


    ca_certs位置


    docker 客户端 Containers中点进去,这个文件下载下来,或者尝试直接用默认地址:


    #/usr/share/elasticsearch/config/certs/http_ca.crt
    
    #python示范
    from elasticsearch import Elasticsearch
    
    es = Elasticsearch(
        "https://localhost:9200",
        basic_auth=("elastic","xxxxxxxxx"),#用户名密码
        ca_certs = "/usr/share/elasticsearch/config/certs/http_ca.crt")


    data/78df2c1f-e442-415d-a382-fa7925af0c4b/eb2cadd6-60b9-4306-b0f6-f78b02c4c7a7image.png


    评论
    Copyright Created by DataER | 沪ICP备2024052789号-5 | 沪公网安备31010402336337号