• docker 部署 ES集群


    docker 部署 ES集群

    1. 安装docker

    在/opt/software 目录下新建docker目录,上传docker_build.sh脚本并执行

    sh docker_build.sh
    
    • 1
    #!/bin/bash
    yum -y install gcc
    yum -y install gcc-c++
    ##验证gcc版本
    gcc -v
    
    ##卸载老版本
    yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    ##更新yum软件包索引
    yum makecache fast
    ## 安装docker ce
    yum -y install docker-ce
    ## 启动docker
    systemctl start docker 
    docker version
    ## 创建加速器
    cd /etc/docker
    if [ ! -f "$daemon.json" ]; then
      touch "$daemon.json"
    else
      rm -rf daemon.json
      touch "$daemon.json"
    fi
    tee /etc/docker/daemon.json <<-'EOF'
    {
    	"registry-mirrors": ["输入自己的加速器地址"]
    }
    EOF
    systemctl daemon-reload
    systemctl restart docker
    
    • 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

    2. 创建es配置文件

    在/opt/software/es/config下新建 elasticsearch.yml 文件并编辑

    每台服务器注意区分节点名称及IP

    #集群名称 所有节点名称一致
    cluster.name: scan-es-clusters
    
    #当前该节点的名称,每个节点不能重复scan-es-node-1,scan-es-node-2,scan-es-node-3...
    node.name: scan-es-node-1
    
    #当前该节点是不是有资格竞选主节点
    node.master: true
    
    #当前该节点是否存储数据
    node.data: true
    
    #设置索引分片数
    #index.number_of_shards: 20
    
    #设置索引副本数
    #index.number_of_replicas: 1
    
    #设置为公开访问
    network.host: 0.0.0.0
    
    #设置其它节点和该节点交互的本机器的ip地址
    network.publish_host: 192.168.3.126
    
    # 设置映射端口
    http.port: 9200
    
    # 内部节点之间沟通端口
    transport.tcp.port: 9300
    
    #支持跨域访问
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    
    #配置集群的主机地址
    discovery.seed_hosts: ["192.168.3.126", "192.168.3.127", "192.168.3.128"]
    #初始主节点,使用一组初始的符合主条件的节点引导集群
    cluster.initial_master_nodes: ["scan-es-node-1", "scan-es-node-2", "scan-es-node-3"]
    #节点等待响应的时间,默认值是30秒,增加这个值,从一定程度上会减少误判导致脑裂
    discovery.zen.ping_timeout: 30s
    
    #配置集群最少主节点数目,通常为 (可成为主节点的主机数目 / 2) + 1
    discovery.zen.minimum_master_nodes: 2
    #配置集群最少正常工作节点数
    #gateway.recover_after_nodes: 2
    
    #禁用交换内存,提升效率
    bootstrap.memory_lock: true
    
    # http传输内容的最大容量
    http.max_content_length: 200mb
    
    • 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

    3. 服务器优化配置

    1. root用户修改/etc/security/limits.conf,添加如下,提高进程及资源使用限制上限
    * soft nofile 65536
    * hard nofile 65536
    * soft nproc 32000
    * hard nproc 32000
    * hard memlock unlimited
    * soft memlock unlimited
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 执行命令使其生效
    source /etc/profile
    
    • 1
    1. 修改/etc/systemd/system.conf,添加如下
    DefaultLimitNOFILE=65536
    DefaultLimitNPROC=32000
    DefaultLimitMEMLOCK=infinity
    
    • 1
    • 2
    • 3
    1. 重启服务器,或执行下面两个命令使其配置生效
    systemctl daemon-reload
    systemctl daemon-reexec
    
    • 1
    • 2
    1. 修改虚拟内存最大映射数
      系统虚拟内存默认最大映射数为65530,无法满足ES系统要求,需要调整为262144以上。
    vim /etc/sysctl.conf
    
    #添加参数
    vm.max_map_count = 262144
    
    • 1
    • 2
    • 3
    • 4
    1. 重新加载/etc/sysctl.conf配置
    sysctl -p
    
    • 1

    4. 安装es 7.17.4

    1. 拉取镜像

      docker pull elasticsearch:7.17.4
      
      • 1
    2. es 数据挂在的目录设置读写权限

      chmod -R 777 /data/elasticsearch/
      
      • 1
    3. 启动es

      注意:我们启动参数设置的-Xms4g -Xmx4g,根据服务器内存实际情况调整。
      ● Xms 为jvm启动是分配的最大内存
      ● Xmx 为jvm运行过程分配的最大内存
      ● Xss 为jvm启动的每个线程分配的内存大小,jdk1.5+默认1M

      docker run -d -p 9200:9200 -p 9300:9300 \
      -e "ES_JAVA_OPTS=-Xms4g -Xmx4g" \
      -v /opt/software/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
      -v /opt/software/es/plugins:/usr/share/elasticsearch/plugins \
      -v /data/elasticsearch/data:/usr/share/elasticsearch/data \
      --name elasticsearch  \
      --restart=always \
      elasticsearch:7.17.4
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    4. 使用docker ps -a 发现容器频繁启动,查看日志发现有报错,重启一下服务器

      docker ps -a
      
      docker logs -f elasticsearch
      
      ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
      bootstrap check failure [1] of [1]: memory locking requested for elasticsearch process but memory is not locked
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

    5. 安装head插件(版本太老,不推荐)

    1. 拉取镜像

      docker pull mobz/elasticsearch-head:5-alpine
      
      • 1
    2. 启动ElasticSearch-head

      docker run -d -p 9100:9100 \
      --name elasticsearch-head \
      --restart=always \
      mobz/elasticsearch-head:5-alpine
      
      • 1
      • 2
      • 3
      • 4
    3. ElasticSearch-Head请求Content-Type问题及连接服务器问题
      进入elasticsearch-head容器内部,修改vendor.js及app.js文件

    docker exec -it 容器id /bin/sh
    
    vi /usr/src/app/_site/vendor.js
    
    6886行 contentType: "application/x-www-form-urlencoded 
       改成 contentType: "application/json;charset=UTF-8"
       
    7573行 var inspectData = s.contentType === "application/x-www-form-urlencoded" &&` 
      改成 var inspectData = s.contentType === "application/json;charset=UTF-8" &&
      
      
    vi /usr/src/app/_site/app.js
    4328行 this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
    将localhost修改为对应es服务器的IP地址,例如192.168.3.126
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    1. 退出并重启容器

      ctrl + p + q
      
      docker restart 容器id
      
      • 1
      • 2
      • 3
    2. web访问

      http://192.168.3.126:9100/
      
      http://192.168.3.127:9100/
      
      http://192.168.3.128:9100/
      
      • 1
      • 2
      • 3
      • 4
      • 5

    6. 安装kibana插件

    1. ifconfig查看docker网卡IP,例如:172.17.0.1

      ifconfig
      
      • 1
    2. 拉取镜像

      docker pull kibana:7.17.4
      
      • 1
    3. 启动容器

      docker run -d -p 5601:5601 -e ELASTICSEARCH_HOSTS=http://172.17.0.1:9200 --name kibana --restart=always kibana:7.17.4
      
      • 1
    4. web访问

      http://192.168.3.126:5601
      
      http://192.168.3.127:5601
      
      http://192.168.3.128:5601
      
      • 1
      • 2
      • 3
      • 4
      • 5
  • 相关阅读:
    java计算机毕业设计列车票务信息管理系统源程序+mysql+系统+lw文档+远程调试
    操作系统导论-第四章作业(待更)
    【我的OpenGL学习进阶之旅】着色器GLSL运行时报错 GLSL compile error: Premature end of line
    开源项目在线化 中文繁简体转换/敏感词/拼音/分词/汉字相似度/markdown 目录
    知识点链接总结
    Build Data Visualization Apps
    数据仓库性能测试方法论与工具集
    Node学习笔记之MongoDB
    C#《原CSharp》第四回 人常见岁月更替 却难知人文相继
    Redis的启动方法
  • 原文地址:https://blog.csdn.net/u013071014/article/details/127805462