• docker中使用docker-compose搭建Elasticsearch 7.8.0集群及安装IK分词器


    • 创建如下文件夹
    mkdir -p /usr/local/microservices/elasticSearch/{es_data01,es_data02,es_data03,es_conf/_data,es_plugins}
    
    • 1
    • /usr/local/microservices/elasticSearch/es_conf/_data目录下编写ES的yml文件
    vim  es01.yml
    
    • 1

    文件内容:
    注意:需要修改文件中 network.publish_host,discovery.seed_hosts 两个配置项的IP

    cluster.name: elasticsearch-cluster
    node.name: es-node1
    network.bind_host: 0.0.0.0
    network.publish_host: 192.168.31.89  #修改为docker的宿主机ip
    http.port: 9200   #这个是容器内部的,所以不用改
    transport.tcp.port: 9300   #这个是容器内部的,所以不用改
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    node.master: true 
    node.data: true  
    discovery.seed_hosts: ["192.168.31.89:9300","192.168.31.89:9301","192.168.117.232:9302"]  #修改为docker的宿主机ip
    discovery.zen.minimum_master_nodes: 2
    indices.query.bool.max_clause_count: 10240
    cluster.initial_master_nodes: es-node1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    vim  es02.yml
    
    • 1

    文件内容:
    注意:需要修改文件中 network.publish_host,discovery.seed_hosts 两个配置项的IP

    cluster.name: elasticsearch-cluster
    node.name: es-node2
    network.bind_host: 0.0.0.0
    network.publish_host: 192.168.31.89  #修改为docker的宿主机ip
    http.port: 9200  #这个是容器内部的,所以不用改
    transport.tcp.port: 9300   #这个是容器内部的,所以不用改
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    node.master: true 
    node.data: true  
    discovery.seed_hosts: ["192.168.31.89:9300","192.168.31.89:9301","192.168.117.232:9302"] #修改为docker的宿主机ip
    discovery.zen.minimum_master_nodes: 2
    indices.query.bool.max_clause_count: 10240
    cluster.initial_master_nodes: es-node1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    vim  es03.yml
    
    • 1

    文件内容:
    注意:需要修改文件中 network.publish_host,discovery.seed_hosts 两个配置项的IP

    cluster.name: elasticsearch-cluster
    node.name: es-node3
    network.bind_host: 0.0.0.0
    network.publish_host: 192.168.31.89  #修改为docker的宿主机ip
    http.port: 9200  #这个是容器内部的,所以不用改
    transport.tcp.port: 9300   #这个是容器内部的,所以不用改
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    node.master: true 
    node.data: true  
    discovery.seed_hosts: ["192.168.31.89:9300","192.168.31.89:9301","192.168.117.232:9302"] #修改为docker的宿主机ip
    discovery.zen.minimum_master_nodes: 2
    indices.query.bool.max_clause_count: 10240
    cluster.initial_master_nodes: es-node1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • /usr/local/microservices/elasticSearch目录下编写docker-compose.yml文件
    vim docker-compose.yml
    
    • 1

    文件内容:

    version: '2.2'
    services:
      es01:
        image: elasticsearch:7.8.0
        container_name: es01
        environment:
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
          - TAKE_FILE_OWNERSHIP=true
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - ./es_data01:/usr/share/elasticsearch/data 
          - ./es_conf/_data/es01.yml:/usr/share/elasticsearch/config/elasticsearch.yml
          - ./es_plugins:/usr/share/elasticsearch/plugins
        ports:
          - 9200:9200
          - 9300:9300 
        networks:
          - es-net
        restart: always  
      es02:
        image: elasticsearch:7.8.0
        container_name: es02
        environment:
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
          - TAKE_FILE_OWNERSHIP=true
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - ./es_data02:/usr/share/elasticsearch/data 
          - ./es_conf/_data/es02.yml:/usr/share/elasticsearch/config/elasticsearch.yml
          - ./es_plugins:/usr/share/elasticsearch/plugins
        ports:
          - 9201:9200
          - 9301:9300 
        networks:
          - es-net
        restart: always 
      es03:
        image: elasticsearch:7.8.0
        container_name: es03
        environment:
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
          - TAKE_FILE_OWNERSHIP=true
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - ./es_data03:/usr/share/elasticsearch/data 
          - ./es_conf/_data/es03.yml:/usr/share/elasticsearch/config/elasticsearch.yml
          - ./es_plugins:/usr/share/elasticsearch/plugins
        ports:
          - 9202:9200
          - 9302:9300
        networks:
          - es-net
        restart: always
        
    networks:
       es-net:
          
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 启动ES集群
    docker-compose up -d
    
    • 1
    • 查看是否启动成功
    docker ps
    
    • 1

    在这里插入图片描述

    • 测试连接

    注意,此处启动后需要大概等1分钟的样子才能执行测试语句,不然会出现如下错误,具体原因本人还不清楚,知道的小伙伴,可以下方评论告诉我,谢谢

    错误如下:
    curl: (56) Recv failure: Connection reset by peer
    
    • 1
    • 2
    curl localhost:9200
    
    • 1

    出现如下内容则表示搭建成功:
    在这里插入图片描述
    常见问题:
    1.执行curl localhost:9200后不能出现上图内容,使用docker logs 容器ID命令查看日志,出现如下错误:

     [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase
    
    • 1

    解决方案:

    vi /etc/sysctl.conf
    
    • 1

    在文件末尾新增如下内容:

    vm.max_map_count = 655360
    
    • 1

    刷新系统配置

    sysctl  -p
    
    • 1

    2.在docker宿主机上执行curl localhost:9200后可以出现上图内容,但是外网不能连接

    在浏览器通过外网进行访问

    http://docker宿主机IP:9200/
    http://docker宿主机IP:9201/
    http://docker宿主机IP:9202/
    
    • 1
    • 2
    • 3

    正常情况会出现如下页面:
    在这里插入图片描述

    若访问不到,可尝试如下解决办法:
    2.1.检查防火墙,9200,9201,9202,这三个端口是否开放
    2.2.重启docker,重启ES集群

    3.出现503错误

    {
        "error": {
            "root_cause": [
                {
                    "type": "cluster_block_exception",
                    "reason": "blocked by: [SERVICE_UNAVAILABLE/1/state not recovered / initialized];"
                }
            ],
            "type": "cluster_block_exception",
            "reason": "blocked by: [SERVICE_UNAVAILABLE/1/state not recovered / initialized];"
        },
        "status": 503
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    解决方案:
    /usr/local/microservices/elasticSearch/下的es_data01,es_data02,es_data03,文件夹中的内容删除再重启

    在这里插入图片描述

    2.将下载好的elasticsearch-analysis-ik-7.8.0.zip文件上传至/usr/local/microservices/elasticSearch/es_plugins目录下

    3.将压缩包移动到容器

    docker cp /usr/local/microservices/elasticSearch/es_plugins/elasticsearch-analysis-ik-7.8.0.zip  es01:/usr/share/elasticsearch/plugins
    
    • 1

    4.进入es01容器

    docker exec -it es01 /bin/bash
    
    • 1

    5.创建目录

    mkdir /usr/share/elasticsearch/plugins/ik
    
    • 1

    6.将文件压缩包移动到ik目录下

    mv /usr/share/elasticsearch/plugins/elasticsearch-analysis-ik-7.8.0.zip  /usr/share/elasticsearch/plugins/ik
    
    • 1

    5.进入目录

    cd /usr/share/elasticsearch/plugins/ik
    
    • 1

    6.解压

    unzip elasticsearch-analysis-ik-7.8.0.zip  
    
    • 1

    7.退容器

    exit
    
    • 1

    8.重启es集群
    /usr/local/microservices/elasticSearch/目录下执行

    #停止
    docker-compose stop
    #启动
    docker-compose up -d
    
    • 1
    • 2
    • 3
    • 4
    • 测试Ik分词器
      1.未使用分词器
      在这里插入图片描述

    2.使用分词器后
    在这里插入图片描述

    至此,搭建成功

  • 相关阅读:
    element UI表格中设置文字提示(tooltip)或弹出框(popover)时候注意的地方
    关于技术人员成长的一些建议
    51单片机 LCD1602
    Linux操作系统7:文件系统及磁盘管理(二)
    【大家的项目】可 Deferred 就绪的 Future 实现类
    windows qemu安装飞腾Aarch64 操作系统 亲测
    C# winform入门测试项目,readonly只读修饰符入门必知基础测试,不可访问,因为具有一定的保护级别
    神经网络解决非线性问题,非线性回归 神经网络
    Qt实现json解析
    网站为什么要进行内容监控审核?国科云谈网站内容监控的必要性
  • 原文地址:https://blog.csdn.net/qq_46122292/article/details/125522363