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内存太小,导致集群起不来就不是本文的范畴了。

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

相关推荐
weixin_405023371 小时前
使用docker 安装部署easy-mock
运维·docker·容器
Asuncion0071 小时前
Docker核心揭秘:轻量级虚拟化的革命
服务器·开发语言·docker·云原生
ZLRRLZ1 小时前
【Docker】Docker Image(镜像)
运维·docker·容器
RealmElysia3 小时前
CoAlbum 引入ES
java·elasticsearch
Akshsjsjenjd5 小时前
Docker资源限制详解
运维·docker·容器
雲帝7 小时前
1panel docker开启swap内存
运维·docker·容器
tryCbest14 小时前
Linux使用Docker部署项目后期更新
linux·运维·docker
失散1315 小时前
分布式专题——43 ElasticSearch概述
java·分布式·elasticsearch·架构
缘的猿18 小时前
Docker 与 K8s 网络模型全解析
docker·容器·kubernetes
运维栈记19 小时前
使用Grafana监控K8S中的异常Pod
docker·kubernetes·grafana