• Docker下elasticsearch8部署、扩容、基本操作实战(含kibana)


    欢迎访问我的GitHub

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

    本篇概览

    • 本篇记录了用docker搭建ElasticSearch8单机版再扩容的过程,既留给自己后面反复使用,也可以为正在部署环境的读者提供一些参考
    • 请注意docker部署ElasticSearch的适用场景:我这边只是在开发过程中使用,这种方式在生产环境是否适合是有待商榷的,在用于生产环境时请慎重考虑
    • 本篇由以下内容构成
    1. 介绍本次实战的环境和版本信息
    2. 快速部署
    3. 验证功能
    4. 新加节点
    5. 一些常用操作介绍

    环境信息

    • 以下是本次实战的环境信息,可以作为参考
    1. 操作系统:macOS Monterey(M1 Pro芯片的MacBook Pro,16G内存)
    2. Docker:Docker Desktop 4.7.1 (77678)
    3. ElasticSearch:8.2.2
    4. Kibana:8.2.2

    准备工作

    • 首先是docker镜像加速,没有加速手段的下载镜像体验会很差,我这边里用的是七牛的镜像加速(https://reg-mirror.qiniu.com),您可以按个人喜好自行配
    • 如果您的环境是Linux,注意要做以下操作,否则es可能会启动失败
      1 用编辑工具打开文件/etc/sysctl.conf
      2 在尾部添加一行配置vm.max_map_count = 262144,如果已存在就修改,数值不能低于262144
      3 修改保存,然后执行命令sudo sysctl -p使其立即生效

    部署es

    • 先创建一个docker网络
    docker network create elastic
    
    • 创建es容器,若本地没有镜像会自动下载,为了省内存,我这里设置ES容器内的java进程只用到1024M内存,您可以根据自己电脑情况调整
    docker run \
    --name es01 \
    --net elastic \
    -p 9200:9200 \
    -e ES_JAVA_OPTS="-Xms1024m -Xmx1024m" \
    -idt elasticsearch:8.2.2
    
    • 进入容器
    docker exec -it es01 /bin/bash
    
    • 重置密码
    bin/elasticsearch-reset-password -u elastic
    
    • 提示是否重置,输入y,控制台会打印新密码,请记住这个密码,稍后要用到
    Password for the [elastic] user successfully reset.
    New value: 3_J35UWr2sIUkyxxxxxx
    
    • 现在验证elastic能否正常响应
    • 在chrome浏览器的地址栏输入https://localhost:9200
    • 此时浏览器会弹出安全提示,如下图,这时候不要用鼠标去点任何地方,直接在键盘上输入thisisunsafe,然后回车
    image-20220529193340940
    • 接下来就会弹出登录页面了,如下图,填写账号elastic,密码是刚才控制台返回的
    image-20220529111851813
    • 如果看到以下信息,证明es启动成功
    image-20220529112221897
    • 如果您在chrome上安装了ElasticSearch Head插件(没错,是chrome浏览器插件),此时已经可以访问es服务了,如下图
    image-20220529114326591
    • es已经就绪,接下来是kibana

    部署和操作kibana

    • 一行命令完成部署
    docker run \
    --name kibana \
    --net elastic \
    -p 5601:5601 \
    -idt kibana:8.2.2
    
    • 生成token,kibana连接es的时候要用到
    docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
    
    • 控制台会生成一长串文本,请保存下来,这是稍后给kibana用来连接es的token
    • 浏览器访问http://localhost:5601/,会弹出输入窗口,如下图,在文本框内输入刚才生成的token内容,再点击Configure Elastic按钮
    image-20220529165840254
    • 然后弹出个输入验证码的页面
    image-20220529170157182
    • 在控制台输入以下命令,顺利拿到验证码
    docker exec -it kibana bin/kibana-verification-code
    
    • 回到网页输入验证码,可以看到初始化页面
    image-20220529170304401
    • 接下来就是常规的安全登录了,如下图,输入es的账号密码即可登录成功
    image-20220529170545388
    • 登录成功,下图选择右边的Explore on my own
    image-20220529170724818
    • eshead显示新增了一些kibana自用的索引
    image-20220529204959621

    集群扩容

    • 目前es服务是单节点,有时候需要对单节点进行扩容,加入新的机器以提升es服务的性能、存储、可用性等,docker下可以很方便的进行扩容,接下来一起试试
    • 与kibana能够访问es类似,新机器加入当前es服务也需要授权token,生成token的命令如下,请在控制台执行
    docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
    
    • 拿到控制台生产的token后(30分钟有效期),执行以下命令即可创建一个新的es容器,与原先的es组成集群,原有的数据会保留,注意将xxxxxx替换成刚刚生成的token
    docker run \
    -e ENROLLMENT_TOKEN="xxxxxx" \
    -e ES_JAVA_OPTS="-Xms1024m -Xmx1024m" \
    --name es02 \
    --net elastic \
    -idt elasticsearch:8.2.2
    
    • 在eshead上可以看到新增的节点
    image-20220529205158965
    • 至此,kibana部署完成,接下来可以做一些CRUD的基本操作,新手可用来快速了解es基本操作,老司机可以直接跳过了

    实战es操作:命令行操作

    • 咱们先用命令行做一些最基本的操作,然后再考虑用kibana

    • 由于es开方的https服务,所以首先把证书从容器中导出来,后面的curl请求都要指定这个证书

    docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .
    
    • 当前目录下新增名为http_ca.crt的文件,就是安全证书了,试试能不能用,控制台输入以下命令,注意把xxxxxx换成您自己的密码
    curl --cacert http_ca.crt -u elastic:xxxxxx https://localhost:9200
    
    • 控制台输出以下信息,证明外部访问es已经成功
    ❯ curl --cacert http_ca.crt -u elastic:xxxxxx https://localhost:9200
    {
      "name" : "279acdab6c7f",
      "cluster_name" : "docker-cluster",
      "cluster_uuid" : "whfRDTzCQym_jwx2OrMgKg",
      "version" : {
        "number" : "8.2.2",
        "build_flavor" : "default",
        "build_type" : "docker",
        "build_hash" : "9876968ef3c745186b94fdabd4483e01499224ef",
        "build_date" : "2022-05-25T15:47:06.259735307Z",
        "build_snapshot" : false,
        "lucene_version" : "9.1.0",
        "minimum_wire_compatibility_version" : "7.17.0",
        "minimum_index_compatibility_version" : "7.0.0"
      },
      "tagline" : "You Know, for Search"
    }
    
    • 建一个索引试试,此索引名为my-book,有六个字段
    curl -X PUT "https://localhost:9200/my-book?pretty" \
    --cacert http_ca.crt \
    -u elastic:xxxxxx \
    -H 'Content-Type: application/json' \
    -d'
    {
      "settings": {
        "number_of_shards": 1
      },
      "mappings": {
        "properties": {
                    "line_id": {
                        "type": "long"
                       },
                    "line_number": {
                         "type": "keyword"
                    },
                   "play_name": {
                        "type": "keyword"
                   },
                   "speaker": {
                        "type": "keyword"
                   },
                   "speech_number": {
                        "type": "long"
                   },
                   "text_entry": {
                        "type": "text"
                   }
              }
      }
    }
    '
    
    • 收到响应
    {
      "acknowledged" : true,
      "shards_acknowledged" : true,
      "index" : "my-book"
    }
    
    • eshead插件也能看到索引创建成功
    image-20220529205948266
    • 用GET命令获取索引信息试试,如下,符合预期
    ❯ curl -X GET \
    https://localhost:9200/my-book\?pretty \
    --cacert http_ca.crt \
    -u elastic:m9ZRFl9wCIiVkLudRopy
    {
      "my-book" : {
        "aliases" : { },
        "mappings" : {
          "properties" : {
            "line_id" : {
              "type" : "long"
            },
            "line_number" : {
              "type" : "keyword"
            },
            "play_name" : {
              "type" : "keyword"
            },
            "speaker" : {
              "type" : "keyword"
            },
            "speech_number" : {
              "type" : "long"
            },
            "text_entry" : {
              "type" : "text"
            }
          }
        },
        "settings" : {
          "index" : {
            "routing" : {
              "allocation" : {
                "include" : {
                  "_tier_preference" : "data_content"
                }
              }
            },
            "number_of_shards" : "1",
            "provided_name" : "my-book",
            "creation_date" : "1653811101586",
            "number_of_replicas" : "1",
            "uuid" : "zX8kWS_IQ-ymdI7vYLOjew",
            "version" : {
              "created" : "8020299"
            }
          }
        }
      }
    }
    
    curl -H 'Content-Type: application/x-ndjson' \
    --cacert http_ca.crt \
    -u elastic:m9ZRFl9wCIiVkLudRopy \
    -s -XPOST https://localhost:9200/_bulk \
    --data-binary @shakespeare_only_one_type.json
    
    • 导入成功后,用eshead可以看到每条记录的详细信息

      image-20220529211718451
    • 接下来试试kibana

    操作kibana

    • 在kibana页面,点击下图红框位置,进入查询页面
    image-20220529212055604
    • 执行查询的操作如下
    image-20220529212603764
    • 看看刚刚导入了多少数据,如下图,十一万

    image-20220529212926138

    • 至此,基于docker部署ElasticSearch-8和Kibana-8的实战就完成了,希望本文能给您一些参考

    欢迎关注博客园:程序员欣宸

    学习路上,你不孤单,欣宸原创一路相伴...

  • 相关阅读:
    经典卷积神经网络 - LeNet
    Webinspect
    字符函数和字符串函数(C语言)
    Nomad 系列-Nomad+Traefik+Tailscale 集成实现零信任安全
    【花雕动手做】有趣好玩的音乐可视化系列小项目(15)--横排LED方管灯
    函数绘图仪 MathGrafix 12.1 Crack
    简易步骤控制器
    【PHP函数封装】分分钟帮你实现数据脱敏处理, 支持手机号码、邮箱、身份证号 中文字符串!
    Python的一些Pythnoic【我自己没读完,待看待再次整理】
    Redis简介
  • 原文地址:https://www.cnblogs.com/bolingcavalry/p/17642368.html