ElasticSearch是基于Apache Lucene构建的开源搜索引擎。它采用Java编写,提供了简单易用的RESTful API
它的目标就是屏蔽复杂性,从而让全文搜索变得很简单
它也支持大规模的横向扩展,提供PB级别的结构化或非结构化的海量数据处理。当存储机器不够用(存储空间不足)时,可以通过横向添加节点(机器)
通过ElasticSearch的聚合搜索功能来从海量日志中获取统计的指标数据
可以存储海量的数据(TB、PB)
① 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压缩包名
先配置一下,可以避免一个警告:
[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"
}
① 针对前台启动:直接Ctrl + C
② 针对后台启动:使用 kill -9 进程号 来关掉进程
安装完成后,只能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无法正常启动
需要解决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
修改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或者停掉防火墙服务
① 以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中的配置