美文网首页
docker-compose安装ES集群以及kibanna并配置

docker-compose安装ES集群以及kibanna并配置

作者: 怎么肥细 | 来源:发表于2023-01-10 10:45 被阅读0次

    配置文件

    在同一个目录下新建配置文件
    vim docker-compose.yml

    挂载的目录记得提前建好

    version: '3'
    networks:
      es-net:
        external: true
    services:
     kibana:
      image: kibana:7.17.4
      restart: always  
      container_name: kibana
      environment:
        - XPACK_GRAPH_ENABLED=true
        - TIMELION_ENABLED=true
      volumes:
        - ./kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
      networks:
        - es-net
      ports:
        - '15602:5601' 
    
     elasticsearch1:
      image: elasticsearch:7.17.4
      restart: always  
      container_name: es-master
      volumes:
        - ./data/master:/usr/share/elasticsearch/data
        # 后面挂载分词器的目录
        - ./plugins:/usr/share/elasticsearch/plugins
        - ./elasticsearch_master.yml:/usr/share/elasticsearch/config/elasticsearch.yml
        # 这个是把生成的证书挂载到es节点容器内,后面配置密码时会用到,es集群不需要配置密码的可以删除
        # 这个账号密码的映射需要在配置好账号密码,并且把.p12文件从容器中复制出来了,再进行映射,刚开始先注释
        # 不然映射会自动创建好名为elastic-certificates.p12的文件,在配置时就会报错,导致容器一直重启
        - ./config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
      networks:
        - es-net
      environment:
        - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      ports:
        - '19210:9200'
        - '19310:9300'
      privileged: true
    
     elasticsearch2:
      image: elasticsearch:7.17.4
      restart: always  
      container_name: es-slave1
      volumes:
        - ./data/slave1:/usr/share/elasticsearch/data
        - ./plugins:/usr/share/elasticsearch/plugins
        - ./elasticsearch_slave1.yml:/usr/share/elasticsearch/config/elasticsearch.yml
        - ./config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
      networks:
        - es-net
      environment:
        - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      ports:
        - '19220:9200'
        - '19320:9300'
      privileged: true
    
     elasticsearch3:
      image: elasticsearch:7.17.4
      restart: always
      container_name: es-slave2
      volumes:
        - ./data/slave2:/usr/share/elasticsearch/data
        - ./plugins:/usr/share/elasticsearch/plugins
        - ./elasticsearch_slave2.yml:/usr/share/elasticsearch/config/elasticsearch.yml
        - ./config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
      networks:
        - es-net
      environment:
        - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      ports:
        - '19230:9200'
        - '19330:9300'
      privileged: true
    

    es-master服务器配置文件
    vim elasticsearch_master.yml
    discovery.seed_hosts直接填容器名,因为es的三个节点使用的是同一个network;

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

    es-slave1服务器配置文件
    vim elasticsearch_slave1.yml

    cluster.name: es-cluster
    node.name: es-node-2
    network.host: 0.0.0.0
    node.master: true
    node.data: true
    discovery.seed_hosts: ["es-master", "es-slave1", "es-slave2"]
    discovery.zen.minimum_master_nodes: 3
    cluster.initial_master_nodes: es-node-1
    node.max_local_storage_nodes: 3
    

    es-slave2服务器配置文件
    vim elasticsearch_slave2.yml

    cluster.name: es-cluster
    node.name: es-node-3
    network.host: 0.0.0.0
    node.master: true
    node.data: true
    discovery.seed_hosts: ["es-master", "es-slave1", "es-slave2"]
    discovery.zen.minimum_master_nodes: 3
    cluster.initial_master_nodes: es-node-1
    node.max_local_storage_nodes: 3
    

    新建kibana文件夹
    mkdir kibana
    vim kibana/kibana.yml
    elasticsearch.hosts要填宿主机ip加映射出来的端口

    server.name: kibana
    server.host: "0"
    # 可以填容器名加端口,也可以用宿主机ip和映射的端口
    elasticsearch.hosts: [ "http://es-master:9200/", "http://es-slave1:9200", "http://es-slave2:9200" ]
    xpack.monitoring.ui.container.elasticsearch.enabled: true
    i18n.locale: zh-CN
    elasticsearch.username: "elastic"
    elasticsearch.password: "66668888"
    server.port: 5601
    

    新建data文件夹
    mkdir data
    在data文件夹中建立如下三个文件夹


    image.png

    在docker-compose.yml文件所在的目录执行如下命令
    docker-compose up -d --build
    如果配置文件名不是docker-compose.yml,可使用
    docker-compose -f 文件名 up -d

    使用http://宿主机ip:port/_cat/nodes查看集群
    正常情况如下图


    image.png

    访问kibana
    http://宿主机ip:port/

    PS:访问成功的话,es集群和kibana已经搭建完成了,假如不需要给ES集群配置密码的话

    es集群、kibana配置用户密码

    1. 编辑每个节点的elasticsearch.yml
      加入如下配置:
    # 开启x-pack功能,并指定证书位置
    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    # 下面两个配置在生成elastic-certificates.p12文件时无需配置,会报错的,一样导致容器一直重启
    # 在生成好elastic-certificates.p12文件后并且映射进容器了,再解开注释
    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
    # 我这里报了一个找不到配置文件的错误
    # 正常是下面这样的,由于是docker容器中配置,,所以写的是绝对路径
    # xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
    # xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
    

    配置好了的话,就可以通过
    docker exec -it es-master /bin/bash
    这个命令进入容器开始生成证书
    随便选择一个es节点进入即可
    输入如下命令生成证书

    ./bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""
    # 根据提示输入y即可
    

    执行完毕后即可在elasticsearch/config目录下看到名为elastic-certificates.p12的证书文件
    记录下路径及文件名:
    快捷键ctrl+D退出容器
    我的路径是: /usr/share/elasticsearch/config/elastic-certificates.p12

    这个路径即是配置文件中的路径 image.png

    执行命令新建文件夹: mkdir config
    通过docker命令把证书文件复制到config文件中,上面docker-compose.yml文件中已经做了挂载

    docker cp es-master:/usr/share/elasticsearch/config/elastic-certificates.p12 ./config
    

    确保配置文件的新内容已经重新挂载进入容器并且当前用户拥有执行权限再映射进所有容器中
    chomd +x elastic-certificates.p12
    重启es集群
    如果发现新加配置文件内容没有进入容器中
    docker ps 查看所有启动的容器
    docker rm -f 容器名
    重新运行 docker-compose up -d --build

    重新进入es集群中一个容器
    创建Elasticsearch集群密码
    docker exec -it es-master /bin/bash
    执行命令

    ./bin/elasticsearch-setup-passwords -h
    
    image.png

    自动创建密码

    ./bin/elasticsearch-setup-passwords auto
    # 对应账号的密码会自动生成,一定要拷贝下来!!!!
    

    手动创建密码

    ./bin/elasticsearch-setup-passwords interactive
    # 先输入y
    # 然后依次给es预设的账号设置密码
    ### ps:有七八个账号要设置,要么一一记录下来,要么设置成一样的
    

    设置完成后,访问kibana或者es就需要账号密码了
    测试下:
    http://宿主机ip:port/_cat/nodes
    输入账号:elastic
    输入密码: ***********


    image.png

    访问成功

    添加ik分词器

    我这里是自己下载分词器并上传到服务器
    分词器下载地址
    版本很多,选择自己想要的,最好是和es相对应的版本
    我是7.17.4
    https://github.com/medcl/elasticsearch-analysis-ik/releases
    把分词器上传到挂载目录plugins中

    # 解压zip文件需要安装一个zip的工具
    sudo apt-get install zip
    # 解压并指定文件夹名称为ik
    unzip elasticsearch-analysis-ik-7.17.4.zip -d ik
    # 删除elasticsearch-analysis-ik-7.17.4.zip
    rm -rf elasticsearch-analysis-ik-7.17.4.zip
    

    添加自己的词库
    词库是啥嘞,就是你在这个词库文件中加入词语;如:人们必须有信
    当es在使用ik对这句话进行分词时"人们必须有信仰"
    就会把"人们必须有信"做为一次单独的词

    这是我用的开发人员通"用词库,下载下来可以直接使用
    链接:https://pan.baidu.com/s/1Jr9LGjSTQQyK7gDscbeNTg
    提取码:cmcc
    把词库文件上传到plugins/ik/config/目录下
    修改plugins/ik/config/IKAnalyzer.cfg.xml配置文件
    红框中改为你的词库文件全称

    image.png

    确保生效,我把所有的容器删了重新编排了一次
    docker rm -f es-master es-slave1 es-slave2
    docker-compose up -d --build
    测试默认分词器和ik分词器
    下面的分词的粒度不同,自己去kibana上测试吧

    GET _analyze
    {
      "text": "d图像!"
    }
    
    GET _analyze
    {
      "analyzer": "ik_smart", 
      "text": "d图像"
    }
    
    GET _analyze
    {
      "analyzer": "ik_max_word", 
      "text": "d图像"
    }
    

    相关文章

      网友评论

          本文标题:docker-compose安装ES集群以及kibanna并配置

          本文链接:https://www.haomeiwen.com/subject/uzfmcdtx.html