Elasticsearch安装及简单使用总结
1.Elasticsearch介绍
1.1简介
https://www.elastic.co/cn/products/enterprise-search这是官网,有文档,有视频,看不懂就用谷歌浏览器自带翻译功能(谷歌打钱!)。我只看过文档,文档版本很扎心,要么是7系列的、要么是很久的版本。
Elasticsearch是一个搜索引擎,基础单位是document(文档)。三维立体式存储、查询需要的资源。现在主流的使用方式是Elasticsearch+mysql,理由嘛,直接查速度太慢,将数据以文档的形式用Elasticsearch查询速度会得到提升。
1.2版本与文档
现在Elasticsearch安装包主要分为三大类,分别为7系列(写该文档时最新版本)、6系列(处于过渡阶段,比较难受)、5系列(旧版本有相应的文档,但是网上资源不太多)。Elasticsearch每代会有一些较大的改变(我觉得)。
目前经过短暂的使用(没错,我安装过6和7系列的),5、6、7的差别大体如下:
- 结构上,5、6都是index、type、document(索引、类型、文档),这和mysql的database、table、data(库、表、数据)的结构很相似,网上也有大量的文章会这样对比来解释Elasticsearch,方便刚接触的人熟悉。到了7系列后,Elasticsearch改为index、document结构了。
注意了,这里有个坑!这里有个坑!这里有个坑! 虽然6系列和5系列看起来一样,5系列和MySQL一样,一个index下有多个type,一个type有多个document,type是堆叠的;6系列的index却只能有一个type,对,一个index只有一个type,一个type有复数个document;7系列完全去掉了6系列的type。关于type,可以对你的文档进行分类,使用时注意一下版本就好了。 - 功能上,一些字段也会发生改变,注意自己的系统与文档版本是否一致。这里简单举一个模糊查询例子。
从5系列开始,关键字"filtered"被淘汰。
GET _search
{
"query": {
"filtered": {
"query": {
"match": {
"text": "quick brown fox"
}
},
"filter": {
"term": {
"status": "published"
}
}
}
}
}
替换后
GET _search
{
"query": {
"bool": {
"must": {
"match": {
"text": "quick brown fox"
}
},
"filter": {
"term": {
"status": "published"
}
}
}
}
}
2.需要准备的软件包
2.1JDK安装包
第一个坑,JDK版本建议选择1.8。低于1.8,Elasticsearch会报出JDK版本太低,部分功能无法实现的提示;高于1.8的jdk版本不支持CMS,Elasticsearch启动会提示找不到CMS相关文件。(以上情况基于6系列、7系列)
第二个坑,Linux安装jdk会发现有openjdk版本。如果你安装了,恭喜你中奖了,Elasticsearch不认openjdk,你得去官网重新下载。
2.2Elastricsearch安装包
安装包这边只有一个坑要注意,就是你所有需要安装Elasticsearch的服务器上的安装包版本必须一致,一个是6.3.0,另一个是6.3.2,安装好的Elasticsearch是不会相互识别到的。
3.安装Elasticsearch需要的环境
3.1JDK环境
1.JDK安装前记得先查看一下系统里的JDK,可能会有预装。
查看自带jdk:rpm -qa|grep gcj
,可能会出现下面情况:
libgcj-4.1.2-44.el5
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
使用rpm -e --nodeps libgcj-4.1.2-44.el5
删除即可。
2.使用rpm -qa|grep jdk
查看
jdk-1.6.0_22-fcs
使用rpm -e --nodeps jdk-1.6.0_22-fcs
删除
3.jdk我是直接下到电脑上远程上传到Linux虚拟机上的,放到你准备好的文件解压即可。
解压命令:
tar -vxf
解压完成后,配置环境变量
vim /etc/profile
回车后,在最下面添加下面语句
记得换成自己的Java路径
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_181
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
编辑完esc键后输入:wq
保存退出,刷新一下:
source /etc/profile
输入java -version
,查看Java是否安装成功
3.2防火墙
很多Linux默认状态下防火墙是关闭的,Elasticsearch会在9200到9300自动搜索,所以要提前把相应的端口打开,打开你需要使用的端口即可,没必要全打开。
Centos7
查看防火墙状态
查看防火墙状态 systemctl status firewalld
开启防火墙 systemctl start firewalld
关闭防火墙 systemctl stop firewalld
开启防火墙 service firewalld start
若遇到无法开启
先用:systemctl unmask firewalld.service
然后:systemctl start firewalld.service
----------------------------------------------------------------------
查看对外开放的端口状态
查询已开放的端口 netstat -anp
查询指定端口是否已开 firewall-cmd --query-port=666/tcp
提示 yes,表示开启;no表示未开启。
windows使用telnet 192.168.xxx.xxx 端口号
检测是否成功,地址和端口号之间有空格。
4.安装Elasticsearch
4.1在单台服务器上搭建多个节点
在Linux,root权限下输入(保险一点)
wget https://artifacts.elastic.co/downloads/elastricsearch/elasticsearch-6.3.2.tar.gz
解压:
tar -vxf elasticsearch-6.3.2.tar.gz
到解压后的elasticsearch文件目录下进入到config文件夹,vim elasticsearch.yml
,进入到你的配置文件里
cluster.name是集群的名字,elasticsearch会根据名称去寻找相同的节点。我这的名字多加了一个r。
node.name是节点的名称,如果自己没有填写,elasticsearch会自动为每个节点取一个名称。
node.data:true可以存储数据,false不可。
network.host:填写你的服地址
http.port:填写你可被外部访问到的端口号
transport.tcp.port:填写你的节点之间内部通信的端口号
discovery.zen.ping.unicast.hosts:依次填写"服务器地址:端口",第一个一般为主节点。各节点配置文件里地址顺序须一样。
http.cors.enabled:http.cors.enabled为true,可跨域访问,其余照着搞就完事了。
主节点与一般节点配置文件的区别:
主节点配置文件中需要添加node.master:true
一般节点配置为false(false就无法成为主节点,慎用)
注意:
- 如果是同一台服务器,注意两个节点的通讯端口(http.port和transport.tcp.port)要不一样!
- 一台服务器搭建的时候,端口不通的错误不易被发现,建议远程测试一下。
- 如果条件允许,建议不要只使用一台服务器搭建多节点,如果服务器down了,数据就会存在丢失,影响整个系统;使用多台服务器搭建,elasticsearch创建index可以使用副分片存储备份数据同时查询时也会提高响应速度。
- 如果你的
node.master:true
,两个端口号都要保证是可以访问的。因为true,代表这个节点可以参与选举,即有机会成为主节点。
4.2在多台服务器上搭建多个节点
多台服务器搭建与一台服务器多节点搭建大致相同,不同点主要是elasticsearch.yml。这里说一下不同点:
- 端口号,两个端口号(http.port和transport.tcp.port)不用考虑冲突的问题,因为服务器之间的地址是不一样的。
- 记得别把服务器地址搞错了。
- 如果你的
node.master:true
,两个端口号都要保证是可以访问的。因为true,代表这个节点可以参与选举,即有机会成为主节点。
4.3启动
配置好后,此时应该还是root权限,建立一个用户组,在该用户组创建用户。给该用户授予elasticsearch的权限,因为root是无法启动的,对,会报错(Exception in thread "main" java.lang.RuntimeException: don't run elasticsearch as root.
)。
#创建新用户
adduser es
#设置密码
passwd es
#后面会让输入两次密码
#文件夹归属组
#chown -R [用户]:[所属组] 目录(建议使用全路径地址)
chown -R es:es elasticsearch-6.3.2/
注意:
这里赋权,建议使用chown -R
,不要使用chown
。
赋权完成后,使用su es(es是我们上面创建的用户)
切换到我们创建的用户权限下,在bin
目录使用sh elasticsearch
启动。