Elasticsearch 01 Elasticsearch概述

1、概念

    ElasticSearch是基于Apache Lucene构建的开源搜索引擎。它采用Java编写,提供了简单易用的RESTful API
    它的目标就是屏蔽复杂性,从而让全文搜索变得很简单
    它也支持大规模的横向扩展,提供PB级别的结构化或非结构化的海量数据处理。当存储机器不够用(存储空间不足)时,可以通过横向添加节点(机器)

2、适用场景

⑴ 海量数据分析引擎

    通过ElasticSearch的聚合搜索功能来从海量日志中获取统计的指标数据

⑵ 站内搜索引擎

⑶ 数据仓库

    可以存储海量的数据(TB、PB)

3、ElasticSearch的安装

⑴ 选择的版本:

    ① JDK:1.8

    ② ElasticSearch:6.0.0(最新版本即可)

    ③ CentOS:
        ⒈ CentOS release 6.8 (Final)
        Tips:可以通过 cat /etc/issue来查看Linux版本

        ⒉ 内核发行号:2.6.32-642.el6.x86_64
        Tips:可以通过 uname -r 来查看Linux内核发行号

⑵ 安装步骤

    确保JDK8已经配置成功,再进行下述步骤

    ① 新建用户,因为ElasticSearch不能通过root用户来启动(否则启动会报错)【root用户操作
        新建用户:adduser 用户名
        设置密码:passwd 用户名

    ② 创建特定的安装目录,并修改目录的所有者为刚才创建的用户【root用户操作
        mkdir -v 目录路径
        chown -R 用户名 目录路径

  示例:
    mkdir -v /myes
    chown -R es /myes

    ③ 复制ES压缩包到安装目录中【root用户操作
        cp -v ES压缩包目录 指定安装目录

  示例:
    cp -v elasticsearch-6.0.0.tar.gz /myes

    ④ 切换到新用户【root用户操作
        su 用户名

        Tips:root到其他用户是不用输入密码的,反之则需要

    ⑤ 解压缩ES压缩包【新用户操作
        tar -zxvf ES压缩包名

4、启动和关闭ElasticSearch

⑴ 启动ES

     先配置一下,可以避免一个警告:

[WARN ][o.e.b.JNANatives         ] unable to install syscall filter: 
java.lang.UnsupportedOperationException: seccomp unavailable: CONFIG_SECCOMP not compiled into kernel, CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER are needed

    配置/config/elasticsearch.yml

bootstrap.memory_lock: false
bootstrap.system_call_filter: false

      禁用系统调用过滤器检查

    注意冒号后面的空格

    不能使用root用户,使用其他用户来启动,否则启动报错

[WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root

    cd 到ES的bin目录下,输入命令: sh elasticsearch

 publish_address {127.0.0.1:9200}, bound_addresses {[::1]:9200}, {127.0.0.1:9200}
 started

    看到日志输出证明启动成功

    这是前台运行,后台运行需要添加参数:
    ./elasticsearch -d

    在Linux系统中的浏览器输入127.0.0.1:9200验证启动是否成功,响应JSON:

{
  "name" : "ES的节点名",
  "cluster_name" : "ES的集群名",
  "cluster_uuid" : "集群的UUID",
  "version" : {
    "number" : "ES的版本号",
    "build_hash" : "此版本的构建散列码",
    "build_date" : "此版本的构建时间",
    "build_snapshot" : false,
    "lucene_version" : "Apache Lucene的版本号",
    "minimum_wire_compatibility_version" : "???",
    "minimum_index_compatibility_version" : "???"
  },
  "tagline" : "You Know, for Search"
}

⑵ 关闭ES

    ① 针对前台启动:直接Ctrl + C
    ② 针对后台启动:使用 kill -9 进程号 来关掉进程

5、配置可供局域网访问

    安装完成后,只能Linux本地测试,局域网上的机器无法访问ES服务,需要配置一下:

    注意在配置yml类型文件时,参数的格式为key: value,冒号和值之间的空格

    ⑴ 在config/elasticsearch.yml中配置:

network.host: 0.0.0.0

    配置ES的监听地址URL,设置为四个0,这样其他机器也可以访问了【关键】
    访问的URL就是ES机器所在的IP

http.port: 9200

    服务端口

  bootstrap.memory_lock: false
  bootstrap.system_call_filter: false

    禁用系统调用过滤器检查,因为很多检查项需要Linux 3.5以上的内核。如果不禁用,则启动ES时会报以下错误:

bootstrap checks failed
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

    导致ES无法正常启动

⑵ 创建修改脚本es.sh【CentOS才会出现的异常;需要由root用户操作】

    需要解决3个问题:
    [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
    [2]: max number of threads [1024] for user [ada] is too low, increase to at least [4096]
    [3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

    脚本内容:

#!/bin/bash
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf
echo "vm.max_map_count = 262144" >> /etc/sysctl.conf
echo "es soft nproc 4096" >> /etc/security/limits.d/90-nproc.conf
sysctl -p

    这里的倒数第2行中的es为要启动ES的用户名称,注意修改

    注意添加执行权限:chmod u+x es.sh

    使用sh执行脚本,可以看到如下输出:

net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
vm.max_map_count = 262144

⑶ 修改log日志文件的所属权【选操作,如果已经是要启动的用户,则无视】

    修改logs/elasticsearch.log

chown 用户名 elasticsearch.log
chgrp 用户名 elasticsearch.log

    否则启动ES时会报错:

ERROR RollingFileManager (/myes/elasticsearch-6.0.0/logs/elasticsearch.log) java.io.FileNotFoundException: /elasticsearch-6.0.0/logs/elasticsearch.log (权限不够) java.io.FileNotFoundException: /elasticsearch-6.0.0/logs/elasticsearch.log (权限不够)

ERROR Could not create plugin of type class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile: java.lang.IllegalStateException: ManagerFactory [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory@????????] unable to create manager for [/myes/elasticsearch-6.0.0/logs/elasticsearch.log] with data ......

ERROR Unable to invoke factory method in class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile: java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender

ERROR Null object returned for RollingFile in Appenders.
ERROR Unable to locate appender "rolling" for logger config "root"

虽然报了很多的错误,但是不影响ES的启动,但为了日志追查,还是修改为好

⑷ 修改防火墙设置

    可以修改/etc/sysconfig/iptables或者停掉防火墙服务

6、Elasticsearch配置说明

⑴ Development和Production模式说明

    ① 以transport的地址是否绑定在localhost为判断的标准network.host
    ② Development模式下在启动时会以warning的方式提示配置检查异常
    ③ Production模式下在启动时会以error的方式提示配置异常并退出

⑵ 参数修改的第二种方式

    当启动Elasticsearch时,在启动命令后面加上要修改的参数,通过-E???来表示。
        格式:
         ./elasticsearch -E要修改的配置1=要修改的参数1 -E要修改的配置2=要修改的参数2

    例如:

  sh elasticsearch -Ehttp.port=8200 -Epath.data=node2

    注意:这种方式只对当前启动有效,并不会改变elasticsearch.yml中的配置。要想长久有效,还是需要修改elasticsearch.yml中的配置

你可能感兴趣的:(Elasticsearch)