ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便(后续用ES代替)
ES官网:https://www.elastic.co/cn/
Docker安装ES官网教程:https://www.elastic.co/guide/en/elasticsearch/reference/6.7/docker.html
ES配置文件详解(参考博客):https://www.cnblogs.com/sunxucool/p/3799190.html
1.jdk安装:es的安装时必须要有java的环境,所以我们要先安装jdk,版本我们选择1.8,这样对es的版本兼容更多,如果以后想换其他的es版本比较方便
(1)在Linux系统下安装jdk1.8,使用MobaXterm作为连接工具,因为他可以直接选择文件夹进行文件的上传,我们这里上传jdk-8u171-linux-x64.tar.gz(目前下载jdk好像需要注册Oracle账号)
①在usr下创建java文件夹
mkdir java
②将上传的压缩包移动到/usr/java下
mv jdk-8u171-linux-x64.tar.gz /usr/java
③解压文件
tar zxvf jdk-8u121-linux-x64.tar.gz
具体操作后的效果如下:
④使用vi编辑器,配置java环境变量
sudo vi /etc/profile
在文件最后,添加如下配置,设置java环境变量
#Java Env
export JAVA_HOME=/usr/jdk1.8.0_121
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
效果如下:
⑤退出vi编辑器,使环境变量设置立即生效:
source /etc/profile
⑥查看jdk版本:
java -version
2.安装ES:安装ES可以从官网下载压缩包进行安装,但是目前docker比较流行方便,拉取相对应的镜像,所以采用docker进行ES集群的安装,ES的版本我们选择5.6.16,需要注意的是ES的集群至少需要三台才能达到集群效果
(1)拉取ES镜像:
docker pull elasticsearch:5.6.16
命令执行结束后,可以使用docker images 查询镜像是否下载成功,如下
(2)使用docker安装ES时,为了方便以后修改配置文件相关的东西,我们使用文件挂载的方式启动docker,所以我们要准备一些文件夹存放数据,然后对文件夹的权限进行修改,为启动ES做准备
①创建docker文件挂载目录,并开发端口通信
进入勽目录下:
cd /usr
创建ES配置的文件夹:
mkdir -p jayes/ES/config
进入ES目录:
cd ES
创建ES数据存放的文件
mkdir data1
mkdir data2
mkdir data3
开发端口通信:后续ES配置文件中所需要的端口,不然ES之间无法进行通信
firewall-cmd --add-port=9300/tcp
firewall-cmd --add-port=9301/tcp
firewall-cmd --add-port=9302/tcp
将data1、data2、data3文件夹开启777权限,防止启动ES时出现没有权限操作文件夹的报错:
chmod 777 data1 data2 data3
(3)创建ES的配置文件,因为之后使用docker启动可以使用目录挂载,所以我们在/usr/jayes/ES/config下创建相应的配置文件即可(配置文件中是作者的服务器IP,使用时需要根据实际情况修改)
es-master.yml
#集群名
cluster.name: jay-es
#节点名
node.name: jay-master
#设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,指绑定这台机器的任何一个ip
network.bind_host: 0.0.0.0
#设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址
network.publish_host: 118.25.153.239
#设置对外服务的http端口,默认为9200
http.port: 9200
#设置节点之间交互的tcp端口,默认是9300
transport.tcp.port: 9300
#是否允许跨域REST请求
http.cors.enabled: true
#允许 REST 请求来自何处
http.cors.allow-origin: "*"
#节点角色设置
node.master: true
node.data: true
#有成为主节点资格的节点列表
discovery.zen.ping.unicast.hosts: ["118.25.153.239:9300","118.25.153.239:9301","118.25.153.239:9302"]
#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1)
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 2
es-nodeone.yml
#集群名
cluster.name: jay-es
#节点名
node.name: jay-nodeone
#设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,指绑定这台机器的任何一个ip
network.bind_host: 0.0.0.0
#设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址
network.publish_host: 118.25.153.239
#设置对外服务的http端口,默认为9200,该节点为9201
http.port: 9201
#设置节点之间交互的tcp端口,默认是9300,该es的ip端口为9301
transport.tcp.port: 9301
#是否允许跨域REST请求
http.cors.enabled: true
#允许 REST 请求来自何处
http.cors.allow-origin: "*"
#节点角色设置
node.master: true
node.data: true
#有成为主节点资格的节点列表
discovery.zen.ping.unicast.hosts: ["118.25.153.239:9300","118.25.153.239:9301","118.25.153.239:9302"]
#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1)
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 2
es-nodetwo.yml
#集群名
cluster.name: jay-es
#节点名
node.name: jay-nodetwo
#设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,指绑定这台机器的任何一个ip
network.bind_host: 0.0.0.0
#设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址
network.publish_host: 118.25.153.239
#设置对外服务的http端口,默认为9200,该节点为9202
http.port: 9202
#设置节点之间交互的tcp端口,默认是9300,该es的ip端口为9302
transport.tcp.port: 9302
#是否允许跨域REST请求
http.cors.enabled: true
#允许 REST 请求来自何处
http.cors.allow-origin: "*"
#节点角色设置
node.master: true
node.data: true
#有成为主节点资格的节点列表
discovery.zen.ping.unicast.hosts: ["118.25.153.239:9300","118.25.153.239:9301","118.25.153.239:9302"]
#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1)
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 2
(3)调高JVM线程数限制数量:ES对JVA的线程数有最低要求,如果不配置的话在启动时会报错,报出如下错误:
bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
①修改配置文件:sysctl.conf
vim /etc/sysctl.conf
②在配置文件加入如下配置值
vm.max_map_count=262144
③启用修改后的配置
sysctl -p
(4)启动ES集群
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -di -p 9200:9200 -p 9300:9300 -v /usr/jayes/ES/config/es-master.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/jayes/ES/data1:/usr/share/elasticsearch/data --name ES01 docker.elastic.co/elasticsearch/elasticsearch:5.6.16
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -di -p 9201:9201 -p 9301:9301 -v /usr/jayes/ES/config/es-nodeone.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/jayes/ES/data2:/usr/share/elasticsearch/data --name ES02 docker.elastic.co/elasticsearch/elasticsearch:5.6.16
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -di -p 9202:9202 -p 9302:9302 -v /usr/jayes/ES/config/es-nodetwo.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/jayes/ES/data3:/usr/share/elasticsearch/data --name ES03 docker.elastic.co/elasticsearch/elasticsearch:5.6.16
注意:设置-e ES_JAVA_OPTS="-Xms256m -Xmx256m" 是因为/etc/elasticsearch/jvm.options 默认jvm最大最小内存是2G,启动容器后 可用docker stats命令查看
(5)检测ES集群搭建是否成功
http://118.25.153.239:9200/_cat/nodes?pretty
注意:输入上诉地址后可能会在页面显示如下报错, { "error" : { "root_cause" : [ { "type" : "master_not_discovered_exception", "reason" : null } ], "type" : "master_not_discovered_exception", "reason" : null }, "status" : 503 },因为使用docker安装ES时,会自动去下载x-pack,它相当于一个权限拦截使用,具体不在这里说明,因为使用它需要收费,所以我们选择不使用,将其卸载,卸载后就可以正常显示图片所示,操作如下
a.查看所有容器
docker ps
b.进入es容器
docker exec -it 容器名or容器id /bin/bash
c.卸载x-pack插件
./bin/elasticsearch-plugin remove x-pack
d.删除配置文件(由于配置文件保护,需要手动删除)
cd /usr/share/elasticsearch/config
rm -rf x-pack
(6)安装ES图形化操作工具:elasticsearch-head
①拉取elasticsearch-head镜像
docker pull mobz/elasticsearch-head:5
②使用docker启动
docker run -di -p 9100:9100 --name es-manager mobz/elasticsearch-head:5
注意:* 为master节点,服务器内存太小,只能启动两个es容器,第三个会报错,所以展示中只有两个,但是ES集群最低是三个