• ElasticSearch7.X 启用X-Pack在linux上安装部署


    1.安装

    本次安装版本为ElasticSearch7.4.2,由于官网下载慢,推荐到华为开源镜像站(https://mirrors.huaweicloud.com/)下载。

    • 下载安装包:elasticsearch-7.4.2-linux-x86_64.tar.gz或直接在服务器直接下载:wget https://mirrors.huaweicloud.com/elasticsearch/7.4.2/elasticsearch-7.4.2-linux-x86_64.tar.gz
    • 通过FTP工具上传安装到在服务器目录(如:/usr/local/src)
    • 解压安装包: tar -zxvfelasticsearch-7.4.2-linux-x86_64.tar.gz
    • 重命名安装目录:mvelasticsearch-7.4.2-linux-x86_64elasticsearch
    • 修改配置文件:
      进入到es安装目录下的config文件夹中,修改elasticsearch.yml 文件

    cd elasticsearch/config
    vi elasticsearch.yml
    修改如下:

    #配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
    cluster.name: my-es
    #节点名称
    node.name: node-1
    #设置索引数据的存储路径(目录如果不存在需手动创建)
    path.data: /usr/local/src/elasticsearch/data
    #设置日志的存储路径(目录如果不存在需手动创建)
    path.logs: /usr/local/src/elasticsearch/logs
    #设置当前的ip地址,通过指定相同网段的其他节点会加入该集群中
    network.host: 0.0.0.0
    #设置对外服务的http端口
    http.port: 9200
    discovery.seed_hosts: ["127.0.0.1"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    由于我这边环境JDK使用的1.8,而ElasticSearch7.4.2要求JDK版本必须为JDK11+,否则启动会报错,在这种情况下如想在不升级环境JDK版本下启动ES需修改ES的JDK配置,其实ElasticSearch7.X安装包中都自带有JDK(系统无配置JDK环境变量时启动会使用自带JDK),我这里通过修改bin目录下elasticsearch和elasticsearch-cli来指向自带JDK。

    修改bin/elasticsearch

    #!/bin/bash
    
    # CONTROLLING STARTUP:
    #
    # This script relies on a few environment variables to determine startup
    # behavior, those variables are:
    #
    #   ES_PATH_CONF -- Path to config directory
    #   ES_JAVA_OPTS -- External Java Opts on top of the defaults set
    #
    # Optionally, exact memory values can be set using the `ES_JAVA_OPTS`. Note that
    # the Xms and Xmx lines in the JVM options file must be commented out. Example
    # values are "512m", and "10g".
    #
    #   ES_JAVA_OPTS="-Xms8g -Xmx8g" ./bin/elasticsearch
    #配置为elasticsearch自带jdk
    export JAVA_HOME=/usr/local/src/elasticsearch/jdk
    export PATH=$JAVA_HOME/bin:$PATH
    
    source "`dirname "$0"`"/elasticsearch-env
    
    if [ -z "$ES_TMPDIR" ]; then
      ES_TMPDIR=`"$JAVA" -cp "$ES_CLASSPATH" org.elasticsearch.tools.launchers.TempDirectory`
    fi
    
    ES_JVM_OPTIONS="$ES_PATH_CONF"/jvm.options
    JVM_OPTIONS=`"$JAVA" -cp "$ES_CLASSPATH" org.elasticsearch.tools.launchers.JvmOptionsParser "$ES_JVM_OPTIONS"`
    ES_JAVA_OPTS="${JVM_OPTIONS//${ES_TMPDIR}/$ES_TMPDIR}"
    
    #添加jdk判断
    if [ -x "$JAVA_HOME/bin/java" ]; then
       JAVA="/usr/local/src/elasticsearch/jdk/bin/java"
    else
       JAVA=`which java`
    fi
    
    # manual parsing to find out, if process should be detached
    if ! echo $* | grep -E '(^-d |-d$| -d |--daemonize$|--daemonize )' > /dev/null; then
      exec 
    "$JAVA" 
    $ES_JAVA_OPTS 
    -Des.path.home="$ES_HOME" 
    -Des.path.conf="$ES_PATH_CONF" 
    -Des.distribution.flavor="$ES_DISTRIBUTION_FLAVOR" 
    -Des.distribution.type="$ES_DISTRIBUTION_TYPE" 
    -Des.bundled_jdk="$ES_BUNDLED_JDK" 
    -cp "$ES_CLASSPATH" 
    org.elasticsearch.bootstrap.Elasticsearch 
    "$@"
    else
      exec 
    "$JAVA" 
    $ES_JAVA_OPTS 
    -Des.path.home="$ES_HOME" 
    -Des.path.conf="$ES_PATH_CONF" 
    -Des.distribution.flavor="$ES_DISTRIBUTION_FLAVOR" 
    -Des.distribution.type="$ES_DISTRIBUTION_TYPE" 
    -Des.bundled_jdk="$ES_BUNDLED_JDK" 
    -cp "$ES_CLASSPATH" 
    org.elasticsearch.bootstrap.Elasticsearch 
    "$@" 
    <&- &
      retval=$?
      pid=$!
      [ $retval -eq 0 ] || exit $retval
      if [ ! -z "$ES_STARTUP_SLEEP_TIME" ]; then
        sleep $ES_STARTUP_SLEEP_TIME
      fi
      if ! ps -p $pid > /dev/null ; then
        exit 1
      fi
      exit 0
    fi
    
    exit $?
    
    • 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
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

    修改bin/elasticsearch-cli

    #!/bin/bash
    
    set -e -o pipefail
    
    #配置es自带jdk13
    export JAVA_HOME=/usr/local/src/elasticsearch/jdk
    export PATH=$JAVA_HOME/bin:$PATH
    source "`dirname "$0"`"/elasticsearch-env
    
    IFS=';' read -r -a additional_sources <<< "$ES_ADDITIONAL_SOURCES"
    for additional_source in "${additional_sources[@]}"
    do
      source "$ES_HOME"/bin/$additional_source
    done
    
    IFS=';' read -r -a additional_classpath_directories <<< "$ES_ADDITIONAL_CLASSPATH_DIRECTORIES"
    for additional_classpath_directory in "${additional_classpath_directories[@]}"
    do
      ES_CLASSPATH="$ES_CLASSPATH:$ES_HOME/$additional_classpath_directory/*"
    done
    
    # use a small heap size for the CLI tools, and thus the serial collector to
    # avoid stealing many CPU cycles; a user can override by setting ES_JAVA_OPTS
    ES_JAVA_OPTS="-Xms4m -Xmx64m -XX:+UseSerialGC ${ES_JAVA_OPTS}"
    
    #添加jdk判断
    if [ -x "$JAVA_HOME/bin/java" ]; then
       JAVA="/usr/local/src/elasticsearch/jdk/bin/java"
    else
       JAVA=`which java`
    fi
    exec 
    
    • 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

    “$JAVA”
    E S J A V A O P T S − D e s . p a t h . h o m e = " ES_JAVA_OPTS -Des.path.home=" ESJAVAOPTSDes.path.home="ES_HOME"
    -Des.path.conf=“ E S P A T H C O N F " − D e s . d i s t r i b u t i o n . f l a v o r = " ES_PATH_CONF" -Des.distribution.flavor=" ESPATHCONF"Des.distribution.flavor="ES_DISTRIBUTION_FLAVOR”
    -Des.distribution.type=“ E S D I S T R I B U T I O N T Y P E " − c p " ES_DISTRIBUTION_TYPE" -cp " ESDISTRIBUTIONTYPE"cp"ES_CLASSPATH”
    E S M A I N C L A S S " " ES_MAIN_CLASS" " ESMAINCLASS""@”

    • 编辑limits.conf配置文件(解决无法创建本地文件问题,用户最大可创建文件数太小)

      vi /etc/security/limits.conf

      添加如下配置:

      * soft nofile 65536
      * hard nofile 131072
      * soft nproc 2048
      * hard nproc 4096

      注:*代表Linux所有用户名称

    • 编辑/etc/sysctl.conf配置文件(解决最大虚拟内存太小)

      vi/etc/sysctl.conf

      添加如下配置:

      vm.max_map_count=262144

      保存后执行命令:

      sysctl -p

    • 创建启动ES账号
      出于安全问题elasticsearch 不让用root用户直接运行,需要创建一个新用户。
      创建组和用户:
      groupadd elasticsearch
      useradd elasticsearch -g elasticsearch
      授权:
      chown -R elasticsearch:elasticsearch /usr/local/src/elasticsearch
      切换用户:
      su - elasticsearch

    • 启动elasticsearch

      cd bin
      ./elasticsearch或者后台启动:./elasticsearch -d

    • 启动完成,浏览器访问:http://localhost:9200,界面显示如下:

      {
        "name" : "node-1",
        "cluster_name" : "yzcc-es",
        "cluster_uuid" : "qw9Hg3npTDW7L7mg6_DtVQ",
        "version" : {
          "number" : "7.4.2",
          "build_flavor" : "default",
          "build_type" : "tar",
          "build_hash" : "2f90bbf7b93631e52bafb59b3b049cb44ec25e96",
          "build_date" : "2019-10-28T20:40:44.881551Z",
          "build_snapshot" : false,
          "lucene_version" : "8.2.0",
          "minimum_wire_compatibility_version" : "6.8.0",
          "minimum_index_compatibility_version" : "6.0.0-beta1"
        },
        "tagline" : "You Know, for Search"
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17

      至此elasticsearch安装完成,可通过使用ElasticSearch Head插件进行访问。

    2.启用X-Pack

    X-Pack是Elastic Stack扩展功能,提供安全性,警报,监视,报告,机器学习和许多其他功能。 ES7.0+之后,默认情况下,当安装Elasticsearch时,会自动安装X-Pack,无需单独再安装。自6.8以及7.1+版本之后,基础级安全永久免费。
    从上面启动ES并访问我们可以发现在访问ES过程中我们没有任何安全认证就可以直接访问并操作ES,这在生产环境下如果端口号向外暴露的话对数据安全性无法得到保障。当然还有其它解决方案比如使用nginx作代理防护这里就不作过多介绍。

    • 修改es配置文件:

    cd elasticsearch/config
    vi elasticsearch.yml
    新增如下配置项:
    xpack.security.enabled: true

    • 生成节点证书
      借助elasticsearch-certutil命令生成证书:

      bin/elasticsearch-certutil.bat ca -out config/elastic-certificates.p12 -pass “”

    • 执行成功后在config目录下会生成证书文件,如下所示:

    • 配置通信证书
      cd elasticsearch/config
      vi elasticsearch.yml

      新增如下配置项:
      xpack.security.enabled: true
      xpack.security.transport.ssl.enabled: true
      xpack.security.transport.ssl.verification_mode: certificate
      xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
      xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

    • 设置集群密码

    执行设置用户名和密码的命令,这里需要为4个用户分别设置密码,elastic, kibana, logstash_system,beats_system
    bin/elasticsearch-setup-passwords interactive --手动配置每个用户密码模式
    bin/elasticsearch-setup-passwords auto --自动配置每个用户密码模式
    用户elastic为超级管理员,其它用户暂未使用到。

    至此单节点安全配置完毕,重启es后访问9200会出现用户名和密码的提示窗口,我们就可以通过用户elastic生成的密码过行访问了:

    通过Kibana访问:

    以上纯属个人在搭建ES环境所记录下来的操作流程,希望对大家有用,后面我也会介绍Kibana启用登录认证和Logstash同步mysql数据到ES中。

  • 相关阅读:
    Yocto buildhistory介绍
    数据结构“入门”—堆的实现
    数字信号处理——多速率信号处理(3)
    关于CSS 选择器的常见用法
    iOS Callkit与Pushkit 的使用手册总结,折腾了我5天烦死了。
    数智人才培养丨学生学徒阶段成果分享
    一个注解实现SpringBoot接口定制属性加解密
    Pytorch中的torch.index_select对应MindSpore哪个方法
    centos7迁移gitlab(基于docker)
    Nginx 使用自签名证书实现 https 反代 Spring Boot 中碰到的页面跳转问题
  • 原文地址:https://blog.csdn.net/m0_67391907/article/details/126360436