Elasticsearch是一个基于Apache Lucene™的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。
特点:
- 分布式的实时文件存储,每个字段都被索引并可被搜索
- 分布式的实时分析搜索引擎–做不规则查询
- 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
准备工作
安装Centos7、建议内存2G以上、安装java1.8环境
配置文件:elasticsearch.yml(集群配置文件)、jvm.options(jvm配置文件)
1、添加用户
[root@localhost ~]# adduser es
[root@localhost ~]# passwd es
为es用户授予权限
[root@localhost ~]# whereis sudoers
[root@localhost ~]# ls -l /etc/sudoers
[root@localhost ~]# vi /etc/sudoers
Allow root to run any commands anywher
root ALL=(ALL) ALL
es ALL=(ALL) ALL #这个是新增的用户
在保存退出时遇到如下提示是因为这个文件只有可读权限造成的可以通过::wq强制保存退出
[root@localhost ~]# chmod -v u-w /etc/sudoers
[root@localhost ~]# su es
2、Java环境安装
解压安装包
[root@localhost jdk1.8]# tar -zxvf jdk-8u171-linux-x64.tar.gz
设置Java环境变量
[root@localhost jdk1.8.0_171]# vi /etc/profile
在文件最后添加
export JAVA_HOME=/home/elk1/jdk1.8/jdk1.8.0_171
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/LIB:$JRE_HOME/LIB:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
[root@localhost jdk1.8.0_171]# source /etc/profile
[root@localhost jdk1.8.0_171]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
ElasticSerach单机安装
上传elasticsearch安装包到如下目录并解压
/home/elk/soft
[root@localhost elasticserach]# tar -zxvf elasticsearch-6.3.1.tar.gz
[root@localhost elasticserach]# cd elasticsearch-6.3.1/bin
[root@localhost bin]# ./elasticsearch
启动错误1:
错误原因:elasticsearch不能以root用户身份启动
[root@localhost bin]# su es
[es@localhost bin]$ ./elasticsearch
启动错误2:
错误原因:需要在配置文件jvm.options中设置es可使用jvm内存相关参数
[es@localhost bin]$ cd /opt/es/elasticsearch-6.3.1/conf
[es@localhost bin]$ vim jvm.options
根据服务器内存对应设置大小,如果服务器内存不够就会报错(这里我们只做实验操作设定为256m)
启动错误3:错误原因:使用非root用户启动ES,而该用户的文件权限不足而被拒绝执行。
解决方法:给es用户elasticsearch目录的授权
// chown -R 用户名 文件(目录)名
chown -R es /opt/es/elasticsearch-6.3.1
启动elasticsearch
节点sonofelice上的磁盘空间使用率超过了85%,空闲15.2gb,占总磁盘空间的13.4%。将不会在该节点上分配副本了。
虽然不影响es的正常功能使用,如果不想打印:
第一种方式,是简单粗暴的在elasticsearch.yml文件中直接加入下面一行命令:
cluster.routing.allocation.disk.threshold_enabled: false
第二种方式,则是自己控制磁盘空间使用率超过多少的时候不再分配副本。默认是85%,所以才会有上面的日志
cluster.routing.allocation.disk.threshold_enabled: true
cluster.routing.allocation.disk.watermark.low: 30gb
cluster.routing.allocation.disk.watermark.high: 20gb
接下来需要在elasticsearch.yml中配置es的host地址(配置成本机地址,允许访问)
配置完之后重新启动elasticsearch
启动错误4:
意思是linux能用的最大线程数、最大文件数、最大内存数都不够 。
解决方法:修改linux配置文件(配合es的启动)
第一步:切换到root用户修改linux的limit配置文件,设置内存线程和文件
[root@localhost bin]# vim /etc/security/limits.conf
nofile - 打开文件的最大数目
noproc - 进程的最大数目
soft 指的是当前系统生效的设置值
hard 表明系统中所能设定的最大值
在#End of file之前添加
* hard nofile 655360
* soft nofile 131072
* hard nproc 4096
* soft nproc 2048
第二步:修改linux的sysctl配置文件,配置系统使用内存
[root@localhost bin]# vi /etc/sysctl.conf
添加
vm.max_map_count=655360
fs.file-max=655360
vm.max_map_count=655360,因此缺省配置下,单个jvm能开启的最大线程数为其一半
file-max是设置 系统所有进程一共可以打开的文件数量
修改完之后不要忘记执行:
[root@localhost bin]# sysctl -p
最后切换为es用户启动:
浏览器访问成功:
也可以使用下面的命令启动
nohup ./elasticsearch &
代表控制台将日志收集到.out文件,程序启动后还可以回到命令行继续操作。
安装kibana可视化分析elasticsearch:
上传kibana安装包并解压安装包:
[root@localhost es]# tar -xzvf kibana-6.3.1-linux-x86_64.tar.gz
配置配置文件:文件安装目录/conf/kibana.yml
[root@localhost config]# vim kibana.yml
将上面的localhost也做修改
启动kibana:
[root@localhost bin]# nohup ./kibana &
通过浏览器访问成功:
安装中英文分词器插件到elasticsearch:
直接将分词器插件上传到elasticsearch下面的pugins文件夹内,然后重新启动elasticsearch和kibana
IK提供了两个分词算法ik_smart 和 ik_max_word,其中 ik_smart 为最少切分,ik_max_word为最细粒度划分
(1)最小切分:
(2)最细切分:
elasticsearch集群配置:
在生产环境中必需对elasticsearch做集群,只需要在每一台服务器中的es中修改配置文件,es会在集群服务器中选取master结点服务器:
修改配置文件elasticserach.yml
vim /elasticsearch.yml
cluster.name: aubin-cluster #必须相同
# 集群名称(不能重复)
node.name: els1(必须不同)
# 节点名称,仅仅是描述名称,用于在日志中区分(自定义)
#指定了该节点可能成为 master 节点,还可以是数据节点
node.master: true
node.data: true
path.data: /opt/data
# 数据的默认存放路径(自定义)
path.logs: /opt/logs
# 日志的默认存放路径
network.host: 192.168.0.1
# 当前节点的IP地址
http.port: 9200
# 对外提供服务的端口
transport.tcp.port: 9300
#9300为集群服务的端口
discovery.zen.ping.unicast.hosts: ["172.18.68.11", "172.18.68.12","172.18.68.13"]
# 集群个节点IP地址,也可以使用域名,需要各节点能够解析
discovery.zen.minimum_master_nodes: 2
# 为了避免脑裂,主集群节点数最少为 半数+1
冒号后面必须有一个空格
可以使用集群管理工具cerebro对集群进行管理:
开启后可在localhost:9000端口访问