• ElasticSearch(十一)【集群搭建】


    十一、ES集群的相关概念


    上一篇文章ElasticSearch - 聚合查询

    集群(cluster)

    一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜整合应用索功能一个集群由一个唯一的名字标识,这个名字默认就是elasticsearch。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群

    节点(node)

    一个节点是集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引节点和搜索功能。和集群类似,一个节点也是由一个名字来标识的,默认情况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点

    索引(Index)

    一组相似文档的集合

    映射(Mapping)

    用来定义索引存储文档的结构如:字段、类型等

    文档(Document)

    索引中一条记录,可以被索引的最小单元

    分片(shards)

    ElasticSearch提供了将索引划分成多份的能力,这些份就叫做分片。当你创建一个索引的时候,可以指定想要分片的数量。每个分片本身也就是一个功能完善并且独立的"索引",这个"索引"可以被放置到集群中的任何节点上

    复制(replicas)

    Index的分片中一份或多份副本

    11.1 ElasticSearch集群搭建

    集群规划

    # 1.先准备3个ES节点,对应端口号9201、9202、9203
    - web: 9201 tcp:9301 node-1 elasticsearch.yml
    - web: 9202 tcp:9302 node-2 elasticsearch.yml
    - web: 9203 tcp:9303 node-3 elasticsearch.yml
    
    • 1
    • 2
    • 3
    • 4
    • 注意
      • 所有节点集群名称必须一致,如elasticsearch
      • 每个节点必须有一个唯一名字,node_name
      • 开启每个节点远程连接,network.host:0.0.0.0
      • 指定使用IP地址进行集群节点通信,netword.publish_host
      • 修改 web 端口 tcp 端口,http.port: transport.tcp.port
      • 指定集群中所有节点通信列表,discovery.seed_hosts: node-1 node-2 node-3
      • 允许集群初始化 master 节点节点数,cluster.initial_master_nodes: [“node-1”,“node-2”,“node-3”]
      • 集群最少几个节点可用,gateway.recover_after_nodes: 2
      • 开启每个几点跨域访问,http.cors.enabled: true、http.cors.allow-origin: “*”

    文件目录结构

    - cluster
    	- node-1
    		config/elasticsearch.yml
    		plugins/ik-7.14.0
    	- node-2
    		config/elasticsearch.yml
            plugins/ik-7.14.0
    	- node-3
    		config/elasticsearch.yml
            plugins/ik-7.14.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    elasticsearch.yml(这是前面普通安装/config目录下的文件,修改或添加的地方)

    # 指定集群名字 3个节点必须一致
    cluster.name: es-cluster
    # 指定节点名称,每个节点名字唯一
    node.name: node-1
    # 开放远程链接
    network.host: 0.0.0.0
    # 指定使用发布地址进行集群间通信(自己服务器地址)
    network.publish_host: 192.168.159.100
    # 指定 web 端口
    http.port: 9201
    # 指定 tcp 端口
    transport.tcp.port: 9301
    # 指定所有节点 tcp 通信
    discovery.seed_hosts: ["192.168.159.100:9301","192.168.159.100:9302","192.168.159.100:9303"]
    # 指定初始化集群的节点名称
    cluster.initial_master_nodes: ["node-1","node-2","node-3"]
    # 集群最少几个节点可用
    gateway.recover_after_nodes: 2
    # 解决跨域问题
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    每个elasticsearch.yml文件都在对应节点的/config目录下,使用节点node-1进行修改,如下图所示

    在这里插入图片描述

    在这里插入图片描述

    对应每个node节点创建一个/plugins文件夹,用于存放ES插件,并将IK扩展插件如前面配置放入该文件夹中

    在这里插入图片描述

    在这里插入图片描述

    docker-compose.yml

    version: "3.8"
    networks:
      escluster:
    services:
      elasticsearch01:
        image: elasticsearch:7.14.0
        ports:
          - "9201:9201"
          - "9301:9301"
        networks:
          - "escluster"
        environment:
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        volumes:
          - ./node-1/data:/usr/share/elasticsearch/data
          - ./node-1/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
          - ./node-1/plugins/ik-7.14.0:/usr/share/elasticsearch/plugins/ik-7.14.0
      
      elasticsearch02:
        image: elasticsearch:7.14.0
        ports:
          - "9202:9202"
          - "9302:9302"
        networks:
          - "escluster"
        environment:
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        volumes:
          - ./node-2/data:/usr/share/elasticsearch/data
          - ./node-2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
          - ./node-2/plugins/ik-7.14.0:/usr/share/elasticsearch/plugins/ik-7.14.0
    
      elasticsearch03:
        image: elasticsearch:7.14.0
        ports:
          - "9203:9203"
          - "9303:9303"
        networks:
          - "escluster"
        environment:
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        volumes:
          - ./node-3/data:/usr/share/elasticsearch/data
          - ./node-3/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
          - ./node-3/plugins/ik-7.14.0:/usr/share/elasticsearch/plugins/ik-7.14.0
    
    
    • 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

    注意需要另外开启对外端口9201、9202、9203,如果还是启动不了,那就重启docker

    在这里插入图片描述

    异常错误

    解决ElasticsearchException[failed to bind service\]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes由于docker使用数据挂载的方式,访问节点中的data目录权限不够,需要修改每个节点data文件夹的权限

    chmod -R 777 ./node-1/data/
    chmod -R 777 ./node-2/data/
    chmod -R 777 ./node-3/data/
    
    • 1
    • 2
    • 3

    测试访问:

    • http://ip:9201/
    • http://ip:9202/
    • http://ip:9203/

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    访问接口/_cat/health?v

    在这里插入图片描述

    • Green - 所有数据都可用,主副分片都已经分配好
    • Yellow - 所有数据都可用,但尚未分配一些副本,不影响查询,可能影响恢复
    • Red - 某些数据由于某种原因 存在主分片未分配,对查询会有影响

    由于个人虚拟机磁盘内存不够的问题,导致分片失败,大家可以尝试扩容自己的内存

    11.2 集群状态 Head 插件使用

    GitHub官网https://github.com/mobz/elasticsearch-head

    在这里插入图片描述

    注意】下载Linux源码的,是没有node_mudules文件夹的,需要手动安装node.js

    Linux安装

    # 1.访问github下载Linux安装包(建议解压之后再上传)
    
    # 2.安装git
    yum install git
    
    # 3.将elasticsearch-head下载到本地
    git clone https://github.com/mobz/elasticsearch-head.git
    
    # 4.安装node.js	【注意】没有wget的先安装yum install -y wget
    wget http://cdn.npm.taobao.org/dist/node/latest-v8.x/node-v8.1.2-linux-x64.tar.xz
    
    # 5.解压缩nodejs
    xz -d node-v10.15.3-linux-arm64.tar.xz
    tar -xvf node-v10.15.3-linux-arm64.tar
    
    # 6.配置环境变量
    mv node-v10.15.3-linux-arm64 nodejs
    mv nodejs /usr/nodejs
    vim /etc/profile
    ################# 添加内容如下 #################
    export NODE_HOME=/usr/nodejs
    export PATH=$PATH:$JAVA_HOME/bin:$NODE_HOME/bin
    ###############################################
    
    # 7.进入elasticsearch-head目录
    npm config set registry https://registry.npm.taobao.org
    npm install
    npm run start
    
    # 8.启动访问head插件,默认端口号为9100
    http://ip:9100 查看集群状态
    
    • 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

    Windows安装

    下载上图所示的windows安装包,解压后如下图所示

    在这里插入图片描述

    在当前目录下以管理员身份使用终端,输入以下命令

    # 安装相应依赖
    npm install
    
    # 运行,默认前端端口9100
    npm run start
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    访问测试

    在这里插入图片描述

    连接ES服务其中一个节点

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    Open3D(C++) 最小二乘拟合平面(直接求解法)
    LINUX-多线程同步
    【引语练习题】一般疑问句转化为间接引语
    【华为OD机试真题 JAVA】学生方阵
    element- plus table勾选框顶部勾选框更改成文字,且实现单选操作
    Dubbo 知识点整理
    强化学习中这种loss图正常吗
    Linux网络编程
    指针方案介绍
    FPGA的256点FFT调用Quartus IP核实现VHDL傅里叶变换
  • 原文地址:https://blog.csdn.net/Wei_Naijia/article/details/126923916