docker-compose安装ES集群以及kibanna并配置账号密码

发布时间 2023-07-13 16:31:20作者: 烟冷瞳

一、安装不带密码的es集群

1.1 目录结构

-root
 -compose
   -elasticsearch
     -docker-compse.yml
     -es_data
       -es01
         -data
         -logs
         -config
           -elasticsearch.yml
       -es02
         -data
         -logs
         -config
           -elasticsearch.yml
       -es03
         -data
         -logs
         -config
           -elasticsearch.yml

1.2 docker-compse.yml配置文件

version: '3.7'

services:
  elasticsearch1:
    image: elasticsearch:7.4.0             
    container_name: es01
    volumes:
      - ./es_data/es01/data:/usr/share/elasticsearch/data
      - ./es_data/es01/logs:/usr/share/elasticsearch/logs
      - ./es_data/es01/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    environment:
      - bootstrap.memory_lock=true
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
      - TAKE_FILE_OWNERSHIP=true
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - "9200:9200"
      - "9300:9300"
    networks:
      - elastic

  elasticsearch2:
    image: elasticsearch:7.4.0
    container_name: es02
    volumes:
      - ./es_data/es02/data:/usr/share/elasticsearch/data
      - ./es_data/es02/logs:/usr/share/elasticsearch/logs
      - ./es_data/es02/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    environment:
      - bootstrap.memory_lock=true
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
      - TAKE_FILE_OWNERSHIP=true
    ulimits:
      memlock:
        soft: -1
        hard: -1
    networks:
      - elastic

  elasticsearch3:
    image: elasticsearch:7.4.0
    container_name: es03
    volumes:
      - ./es_data/es03/data:/usr/share/elasticsearch/data
      - ./es_data/es03/logs:/usr/share/elasticsearch/logs
      - ./es_data/es03/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    environment:
      - bootstrap.memory_lock=true
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
      - TAKE_FILE_OWNERSHIP=true
    ulimits:
      memlock:
        soft: -1
        hard: -1
    networks:
      - elastic

networks:
  elastic:
    driver: bridge

1.3 elasticsearch.yml配置文件

  • es01中的elasticsearch.yml配置文件
# 集群名称[三个容器保持一致]
cluster.name: es-cluster
# 节点名称
node.name: es01
# 绑定host,0.0.0.0代表当前节点的ip
network.host: 0.0.0.0
# 表示这个节点是否可以充当主节点
node.master: true
# 是否充当数据节点
node.data: true
# 所有主从节点
discovery.seed_hosts: ["es01", "es02", "es03"]
# 这个参数决定了在选主过程中需要 有多少个节点通信  预防脑裂 N/2+1
discovery.zen.minimum_master_nodes: 3
#初始化主节点
cluster.initial_master_nodes: es01
# 单节点上可以开启的ES存储实例的个数,没配置的话会报一个错误
node.max_local_storage_nodes: 3
  • es02中的elasticsearch.yml配置文件
# 集群名称[三个容器保持一致]
cluster.name: es-cluster
# 节点名称
node.name: es02
# 绑定host,0.0.0.0代表当前节点的ip
network.host: 0.0.0.0
# 表示这个节点是否可以充当主节点
node.master: false
# 是否充当数据节点
node.data: true
# 所有主从节点
discovery.seed_hosts: ["es01", "es02", "es03"]
# 这个参数决定了在选主过程中需要 有多少个节点通信  预防脑裂 N/2+1
discovery.zen.minimum_master_nodes: 3
#初始化主节点
cluster.initial_master_nodes: es01
# 单节点上可以开启的ES存储实例的个数,没配置的话会报一个错误
node.max_local_storage_nodes: 3
  • es03中的elasticsearch.yml配置文件
# 集群名称[三个容器保持一致]
cluster.name: es-cluster
# 节点名称
node.name: es03
# 绑定host,0.0.0.0代表当前节点的ip
network.host: 0.0.0.0
# 表示这个节点是否可以充当主节点
node.master: false
# 是否充当数据节点
node.data: true
# 所有主从节点
discovery.seed_hosts: ["es01", "es02", "es03"]
# 这个参数决定了在选主过程中需要 有多少个节点通信  预防脑裂 N/2+1
discovery.zen.minimum_master_nodes: 3
#初始化主节点
cluster.initial_master_nodes: es01
# 单节点上可以开启的ES存储实例的个数,没配置的话会报一个错误
node.max_local_storage_nodes: 3

1.4 启动es并校验

  • 进入/root/compose/elasticsearch目录,即docker-compse.yaml文件的同级目录,执行以下命令
docker-compose up -d
  • 在浏览器上使用http://宿主机ip:port/_cat/nodes查看集群,正常情况能看到如下的情况,即表示es安装成功【注意,默认的9200的端口需要开放】:
192.168.192.2 19 41 4 0.07 0.64 1.21 dilm * es01
192.168.192.3 20 41 4 0.07 0.64 1.21 dilm - es03
192.168.192.4 17 41 4 0.07 0.64 1.21 dilm - es02

二、添加集群的密码设置

2.1 修改elasticsearch.yml配置文件

  • 在三个es对应的elasticsearch.yml配置文件的最后,分别添加如下内容,每个里面都添加
# 开启x-pack功能
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate

2.2 重启es集群服务

  • 在docker-compose.yml文件的同级目录,执行以下命令,关闭并删除es的容器
docker-compose down
  • 重新启动es
docker-compose up -d

2.3 生成证书文件

  • 执行以下命令进入es01的容器内部【其他两个容器也可以】
docker exec -it es01 /bin/bash
  • 执行命令生成证书文件,根据提示输入y
./bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""
  • 执行完毕后,记录证书文件的位置,一般情况下是: /usr/share/elasticsearch/config/elastic-certificates.p12,输入exit或者ctrl+D退出容器;
  • 复制容器内部的证书文件到本地磁盘中来;
docker cp es01:/usr/share/elasticsearch/config/elastic-certificates.p12 ./
  • 将复制出来的证书文件,分别复制在三个es的config目录一份
cp elastic-certificates.p12 ./es_data/es01/config
cp elastic-certificates.p12 ./es_data/es02/config
cp elastic-certificates.p12 ./es_data/es03/config

2.4 修改docker-compse.yml配置文件

  • 在docker-compse.yml配置文件中,添加证书文件的地址映射配置
version: '3.7'

services:
  elasticsearch1:
    image: elasticsearch:7.4.0             
    container_name: es01
    volumes:
      - ./es_data/es01/data:/usr/share/elasticsearch/data
      - ./es_data/es01/logs:/usr/share/elasticsearch/logs
      - ./es_data/es01/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      # 下面一行内容为新加的配置
      - ./es_data/es01/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
    environment:
      - bootstrap.memory_lock=true
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
      - TAKE_FILE_OWNERSHIP=true
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - "9200:9200"
      - "9300:9300"
    networks:
      - elastic

  elasticsearch2:
    image: elasticsearch:7.4.0
    container_name: es02
    volumes:
      - ./es_data/es02/data:/usr/share/elasticsearch/data
      - ./es_data/es02/logs:/usr/share/elasticsearch/logs
      - ./es_data/es02/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml.
      # 下面一行内容为新加的配置
      - ./es_data/es02/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
    environment:
      - bootstrap.memory_lock=true
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
      - TAKE_FILE_OWNERSHIP=true
    ulimits:
      memlock:
        soft: -1
        hard: -1
    networks:
      - elastic

  elasticsearch3:
    image: elasticsearch:7.4.0
    container_name: es03
    volumes:
      - ./es_data/es03/data:/usr/share/elasticsearch/data
      - ./es_data/es03/logs:/usr/share/elasticsearch/logs
      - ./es_data/es03/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      # 下面一行内容为新加的配置
      - ./es_data/es03/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
    environment:
      - bootstrap.memory_lock=true
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
      - TAKE_FILE_OWNERSHIP=true
    ulimits:
      memlock:
        soft: -1
        hard: -1
    networks:
      - elastic

networks:
  elastic:
    driver: bridge

2.5 再次修改elasticsearch.yml配置文件

  • 在三个elasticsearch.yml配置文件中,分别添加以下两行配置,用来指定证书文件的路径【此处指定的内容为容器内部的地址,而非磁盘路径】
xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/elastic-certificates.p12

2.6 再次重启es集群服务

  • 在docker-compose.yml文件的同级目录,执行以下命令,关闭并删除es的容器
docker-compose down
  • 重新启动es
docker-compose up -d

2.7 设置es集群的各种密码

  • 进入容器内部【三个容器任意一个都行】
docker exec -it es01 /bin/bash
  • 执行手动设置密码的命令【也可以使用自动生成的密码,但是不好记忆,在此忽略】
./bin/elasticsearch-setup-passwords interactive
### 先输入y
### 然后依次给es预设的账号设置密码
### ps:有七八个账号要设置,要么一一记录下来,要么设置成一样的
  • 设置完成后,执行exit命令或者ctrl+D退出容器,访问es就需要账号密码了,默认账号是【elastic】
http://宿主机ip:port/_cat/nodes
输入账号:elastic
输入密码: ***********

能看到类似以下内容即可:
192.168.192.2 19 41 4 0.07 0.64 1.21 dilm * es01
192.168.192.3 20 41 4 0.07 0.64 1.21 dilm - es03
192.168.192.4 17 41 4 0.07 0.64 1.21 dilm - es02

三、安装kibana并配置账号密码

3.1 目录结构

-root
 -compose
   -kibana
     -docker-compse.yml
     -kibana
       -config
         -kibana.yml

3.2 docker-compse.yml配置文件

version: '3.7'

services:
  kibana:
    image: kibana:7.4.0
    container_name: kibana
    restart: unless-stopped
    privileged: true
    volumes:
      - ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
    ports:
      - 5601:5601
    networks:
      - es
networks:
  es:

3.3 kibana.yml配置文件

server.name: kibana
server.host: "0"
# 可以填容器名加端口,也可以用宿主机ip和映射的端口,此处填写主节点的容器路径即可
elasticsearch.hosts: [ "http://127.0.0.1:9200/"]
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: zh-CN
# 设置用户名和密码,用户名固定不用改,密码是2.7步骤中设置的密码
elasticsearch.username: "elastic"
elasticsearch.password: "xxxxxxx"
# kibana默认端口是5601
server.port: 5601

3.4 启动es并访问

  • 进入/root/compose/kibana目录,即docker-compse.yaml文件的同级目录,执行以下命令
docker-compose up -d
  • 使用浏览器访问http://宿主机ip:5601/,即可进入kibana的可视化页面,需要输入用户名密码才可正常访问【注意,默认的5601的端口需要开放】。

四、遇到的问题

4.1 证书文件没有执行权限

# 使用该命令添加证书的执行权限
chomd +x elastic-certificates.p12

4.2 kibana无法访问,提示"Kibana server is not ready yet"

  • 1.核验kibana.yml配置文件中的es的地址能被访问
  • 2.检查用户名密码是否正确
  • 3.kibana启动后需要稍等1分钟左右才能被访问