docker 安装elasticsearch集群

准备工作

  1. docker 安装好,docker compose 安装好
  2. 编辑好docker-compose.yml文件(本文会提供)
  3. 生成elastic-certificates.p12密钥,与docker-compose文件在同一个目录(本文会介绍生成方式)
  4. 准备elasticsearch配置文件,与docker-compose文件在同一个目录
  5. 准备kibana配置文件,与docker-compose文件在同一个目录

最终的文件目录截图给大家参考:

start.cmd可以没有,其他两个txt文件也只是我自己记录操作步骤和运行命令的,可以没有。

docker-compose

建一个docker-compose.yml文件,贴入以下内容:

version: '3.0'
services:
  es01:
    image: elasticsearch:7.6.2
    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=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    deploy:
      resources:
        limits:
          memory: 1G
        reservations:
          memory: 512M     
    volumes:
      - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - ./elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
    ports:
      - 9200:9200
    networks:
      - elastic

  es02:
    image: elasticsearch:7.6.2
    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=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    deploy:
      resources:
        limits:
          memory: 1G
        reservations:
          memory: 512M       
    volumes:
      - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - ./elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
    ports:
      - 9201:9200
    networks:
      - elastic

  es03:
    image: elasticsearch:7.6.2
    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=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    deploy:
      resources:
        limits:
          memory: 1G
        reservations:
          memory: 512M
    volumes:
      - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - ./elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
    ports:
      - 9202:9200
    networks:
      - elastic
  # 管理工具      
  kibana:
    depends_on: 
      - es01
    image: kibana:7.6.2
    container_name: kibana
    ports:
      - 5601:5601
    environment:
      - elasticsearch.url=http://es01:9200
      - elasticsearch.hosts=http://es01:9200
      - i18n.locale=zh-CN   
      - TZ=Asia/Shanghai
    volumes:
      - ./kibana.yml:/usr/share/kibana/config/kibana.yml
      - /etc/localtime:/etc/localtime
    networks:
      - elastic
  # 管理工具(推荐使用)  
  elastic-hd:
    image: containerize/elastichd:latest
    container_name: es-hd
    ports:
      - "9800:9800"
    depends_on:
      - "es01"
    links:
      - "es01"
    networks:
      - elastic      
# 虚拟局域网
networks:
  elastic:
    driver: bridge

生成密钥

随便运行一个单机版的es实例,镜像版本跟集群版本的一致

docker run -dit --name=es elasticsearch:7.6.2 /bin/bash

进入容器

docker exec -it es /bin/bash

生成密钥,分别执行这两个命令,期间遇到需要输入密码的,回车即可

./bin/elasticsearch-certutil ca

./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

退出容器,执行docker拷贝命令;下面的示例命令是拷贝到当前目录,具体使用方法可查阅docker官网;

docker cp es:/usr/share/elasticsearch/elastic-certificates.p12 .

到这里我们就得到一个密钥,后续搭建集群的时候共享这个密钥即可。当前这个es实例就可以删除了。

也可以参考其他网友的生成方式。所有的集群共享这个密钥即可

elasticsearch配置文件

新建一个elasticsearch.yml文件,贴入下面的内容,不需要做任何修改

network.host: 0.0.0.0
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.type: PKCS12
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.type: PKCS12

xpack.security.audit.enabled: true

http.cors.enabled: true
http.cors.allow-origin: "*"

kibana配置文件

这一步可以先随便配置一个密码,等集群起来了,重置密码后再补充,毕竟此时我们也不知道es的密码是多少;因为kibana只是管理工具,不影响集群的启动,只是暂时无法连接集群而已。

建一个 kibana.yml

server.name: kibana
server.host: "0"
kibana.index: ".kibana"
elasticsearch.hosts: [ "http://【宿主机IP】:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: zh-CN
elasticsearch.username: 'kibana'
elasticsearch.password: '【密码】'

创建es集群,并启动

docker compose up

修改elastic初始密码

进入容器,执行密码重启命令;根据提示输入自己喜欢的密码

然后回到上面的kibana配置文件,填入这个密码;kibana即可连接到集群

docker exec -it es01 bash

./bin/elasticsearch-setup-passwords interactive

elasticHD连接方式

elasticHD这个管理工具我是比较推荐的,依赖性没有那么强,而且界面操作简单,好看。

具体使用哪一款管理工具都不影响我们集群的搭建。

由于本集群是配置了密码的,所以默认的是连不上集群的。

官网原话:

ElasticSearch server that supports privileged authentication, URL format:http://user:password@host:port

大概的意思就是,如果ElasticSearch server配置了认证,可以使用这样的url方式

例如:

http://elastic:【密码】@【宿主机ip】:9200

到此,我们的es集群应该就算搭建完成了!

过程中哪一步没有做到的,可以单独查阅其他网友的教程;而不要局限与本教程。毕竟实际场景中有很多因素,比如有些小伙伴的宿主机给docker分配的JVM内存太小,导致集群起不来就不是本文的范畴了。

最后,祝大家都顺利起飞!

相关推荐
sam-1231 小时前
k8s上部署redis高可用集群
redis·docker·k8s
SafePloy安策1 小时前
ES信息防泄漏:策略与实践
大数据·elasticsearch·开源
涔溪1 小时前
Ecmascript(ES)标准
前端·elasticsearch·ecmascript
Fanstay9852 小时前
在Linux中使用Nginx和Docker进行项目部署
linux·nginx·docker
death bell3 小时前
Docker基础概念
运维·docker·容器
csdn5659738504 小时前
Elasticsearch 重建索引 数据迁移
elasticsearch·数据迁移·重建索引
天幕繁星4 小时前
docker desktop es windows解决vm.max_map_count [65530] is too low 问题
windows·elasticsearch·docker·docker desktop
Elastic 中国社区官方博客4 小时前
Elasticsearch 8.16:适用于生产的混合对话搜索和创新的向量数据量化,其性能优于乘积量化 (PQ)
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
m1chiru4 小时前
Elasticsearch 实战应用:高效搜索与数据分析
elasticsearch
飞翔的佩奇5 小时前
ElasticSearch:使用dsl语句同时查询出最近2小时、最近1天、最近7天、最近30天的数量
大数据·elasticsearch·搜索引擎·dsl