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 -zxvf elasticsearch-7.4.2-linux-x86_64.tar.gz
  • 重命名安装目录: mv elasticsearch-7.4.2-linux-x86_64 elasticsearch
  • 修改配置文件:
    进入到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"]

由于我这边环境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 $?

修改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 \
  "$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" \
  -cp "$ES_CLASSPATH" \
  "$ES_MAIN_CLASS" \
  "$@"
  • 编辑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"
    }
    至此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中。

 

Logo

更多推荐