1206 words
6 minutes
基于Docker安装Elasticsearch
---
title: 基于Docker安装Elasticsearch 
published: 2025-01-08

---

因为需要部署kibana容器,因此需要让es和kibana容器互联。#

docker network create es-net

拉取镜像#

docker pull elasticsearch:8.6.0

创建挂载点目录#

mkdir -p /usr/local/es/data /usr/local/es/config /usr/local/es/plugins

chmod 777  /usr/local/es/data
chmod 777  /usr/local/es/config
chmod 777  /usr/local/es/plugins

部署单点es,创建es容器#

docker run -d \
--restart=always \
--name es \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
--privileged \
-v /usr/local/es/data:/usr/share/elasticsearch/data \
-v /usr/local/es/plugins:/usr/share/elasticsearch/plugins \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
elasticsearch:8.6.0

不要安全验证不推荐#

[root@bogon howlong]# docker exec -it es /bin/bash #先进入es容器
elasticsearch@6b64658d77d5:~$ cd config
echo 'xpack.security.enabled: false' >> elasticsearch.yml #关闭密码安全验证
docker restart es

测试es#

 http://127.0.0.1:9200

因为需要部署kibana容器,因此需要让es和kibana容器互联。#

docker pull kibana:8.6.0
mkdir -p /usr/local/kibana/config /usr/local/kibana/data
chmod 777 /usr/local/kibana/data
chmod 777 /usr/local/kibana/config

docker run -d \
--restart=always \
--name kibana \
--network es-net \
-p 5601:5601 \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
kibana:8.6.0

测试Kibana是否安装成功#

http://ip:5601

注意:安装IK分词器的版本,必须和Elasticsearch的版本一致,上文安装的是Elasticsearch 8.6.0的,所以接下来安装的IK分词器版本是8.6.0#

[root@bogon howlong]# docker exec -it es /bin/bash
elasticsearch@6b64658d77d5:~$ 
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.6.0/elasticsearch-analysis-ik-8.6.0.zip

以下是集群#

1进入目录 cd /home/mason/ 
文件夹创建命令  mkdir es
cd es
2导入文件 elasticsearch.tar,kibana.tar
docker load -i elasticsearch.tar
docker load -i kibana.tar

3.# root用户 编辑
vim /etc/sysctl.conf
vm.max_map_count=655360
# 保存后 执行
sysctl -p

4.创建目录(普通用户)
mkdir /home/mason/elk
cd /home/mason/elk
mkdir /home/mason/elk/kibana
cd /home/mason/elk/kibana

5.编辑文件 修改地址成 es:9200
vim kibana.yml

cd /home/monitor/mason/elk
上传文件plugins.zip
Unzip plugins.zip

mkdir /home/mason/elk/single
cd /home/mason/elk/single

mkdir -p /home/mason/elk/single/data

chmod -R 777 /home/mason/elk/single/

Cd  /home/mason/elk/single/
Cd  /home/mason/elk/single/
在目录single里面导入
导入文件 docker-compose.yml

7 创建容器 
docker-compose up -d
8检查状态  docker ps -a 

9检测是否生效 http://ip:9200
10验证是否集群成功 http://ip:9200/_cat/nodes?v

docker-compose.yml#

version: '3.6'
services:
  es0:
    image: 容器id
    container_name: es0 #集群要改es1 es2
    privileged: true
    environment:
      # 设置集群名称,集群内所有节点的名称必须一致。
      - cluster.name=elasticsearch-cluster
      # 设置节点名称,集群内节点名称必须唯一。node1 node2
      - node.name=node0
      # 表示该节点会不会作为主节点,true表示会;false表示不会
      - node.master=true
      # 当前节点是否用于存储数据,是:true、否:false
      - node.data=true
      # 需求锁住物理内存,是:true、否:false
      - bootstrap.memory_lock=true
      #查询结果在分片上找到的条目  默认10000个
      - search.max_buckets=100000000
      # 是否支持跨域,是:true,在使用head插件时需要此配置
      - http.cors.enabled=true
      # “*” 表示支持所有域名
      - http.cors.allow-origin=*
      # es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master 仅集群第一次启动时
      - cluster.initial_master_nodes=node0,node1,node2
      - "ES_JAVA_OPTS=-Xms2048m -Xmx2048m"
      #端口
      - http.port=9200
      #节点间通讯端口
      - transport.tcp.port=9300
      #- "discovery.zen.ping.unicast.hosts=es0,es1,es2"
      # 如果是拆分版,这里必须填写宿主机ip,节点间交互的tcp端口,默认是9300
      - discovery.seed_hosts=193.x.x.x0:9300,193.x.x.x1:9300,193.x.x.x2:9300
      # 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
      - "discovery.zen.minimum_master_nodes=2"
      #设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。
      - discovery.zen.ping_timeout=120s
      #TransportClient ping命令的响应超时时间,默认为5s。
      - client.transport.ping_timeout=60s
      # 如果是拆分版,这条配置必须加上,指定当前节点访问的ip
      - network.publish_host=193.x.x.x0
      - TZ=Asia/Shanghai
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /etc/localtime:/etc/localtime
      - ../plugins:/usr/share/elasticsearch/plugins
      - ./data:/usr/share/elasticsearch/data
    ports:
      - "9200:9200"
      - "9300:9300"
    network_mode: host
    healthcheck:
      test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3
    restart: always
    # networks:
    #  - esnet
    #networks:
    #esnet:
    #driver: bridge

配置kibana#

1 进入目录 
cd /home/mason/elk/kibana
2 导入文件docker-compose-kibana.yml
3创建容器 docker-compose -f docker-compose-kibana.yml up -d
三台执行3次

登录 http://ip:5601/app/kibana

# dev tools 配置kibana 多文件管道处理脚本
PUT _ingest/pipeline/attachment
{
  "description": "多文件管道处理",
  "processors": [
    {
      "foreach": {
        "field": "attachments",
        "processor": {
          "attachment": {
            "target_field": "_ingest._value.attachment",
            "field": "_ingest._value.data",
            "ignore_missing": true
          }
        }
      }
    },
    {
      "foreach": {
        "field": "attachments",
        "processor": {
          "remove": {
            "field": "_ingest._value.data"
          }
        }
      }
    }
  ]
}

docker-compose-kibana.yml#

version: '3.6'
services:
  kibana:
    image: kibana:7.17.5
    container_name: kibana
    ports:
      - "5601:5601"
    network_mode: host
    volumes:
      - /etc/localtime:/etc/localtime
      - ../kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
    environment:
      - TZ=Asia/Shanghai
    restart: always

开启es安全验证#

进入容器
docker exec it 容器id /bin/bahs

生成证书
./bin/elasticsearch-certutil ca 
默认空 敲二次回车

生成安全密钥
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
敲三次回车

移动安全证书到config 目录下
mv  elastic-certificates.p12 config/

赋777权限
chmod 777 config/elastic-certificates.p12

复制到主机上修改添加验证,再复制回docker容器里
添加配置如下

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
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

返回容器的elasticsearch目录执行命令添加密码 前面设置空密码,这边直接回车

./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

拷贝安全证书 到其他服务器上
docker cp elastic-certificates.p12 其他服务

docker restart es容器

进入容器

执行 
./bin/elasticsearch-setp-passwords interactvie
有多密码要设置,要记住

修改 kibanna.yml 添加
elasticsearch.username: "elastic"
elasticsearch.password: "密码"

基于Docker安装Elasticsearch
https://masonry440921.github.io/blog/posts/elasticsearch/
Author
mason
Published at
2025-01-08