Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:
- 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
- 实时分析的分布式搜索引擎。
- 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
像天猫、京东这样的商城,用户访问商城的首页,一般都会直接搜索来寻找自己想要购买的商品。而商品的数量非常多,而且分类繁杂。
如果能正确的显示出用户想要的商品,并进行合理的过滤,尽快促成交易,是搜索系统要研究的核心。
面对这样复杂的搜索业务和数据量,使用传统数据库搜索就显得力不从心,一般我们都会使用全文检索技术,比如Solr,Elasticsearch。
Elastic官网:https://www.elastic.co/cn/
Elastic有一条完整的产品线及解决方案:Elasticsearch、Kibana、Logstash等,前面说的三个就是大家常说的ELK技术栈。(这里只考虑es,剩余两个暂不讨论)
Elasticsearch(官网:https://www.elastic.co/cn/products/elasticsearch )是Elastic Stack 的核心技术。详细介绍参考官网
Elasticsearch具备以下特点:
- 分布式,无需人工搭建集群(solr就需要人为配置,使用Zookeeper作为注册中心)
Restful风格,一切API都遵循Rest原则,容易上手近实时搜索,数据更新在Elasticsearch中几乎是完全同步的。
需要jdk1.8以上
本文章为单机服务器安装es集群,慎重!!!!!我后来发现我搭建es集群后内内存占用达到了80%以上,后续改为单机版!
出于安全考虑,elasticsearch默认不允许以root账号运行。
[root@iZ8vbbl3mc99e3srnnx520Z data]# useradd esuser [root@iZ8vbbl3mc99e3srnnx520Z data]# passwd esuser2.2 下载安装包
https://www.elastic.co/cn/downloads/elasticsearch
[root@light environment]# tar -zxvf elasticsearch-7.15.2-linux-x86_64.tar.gz
改名es1
需要修改config文件夹中的两个配置文件:
Elasticsearch基于Lucene的,而Lucene底层是java实现,因此我们需要配置jvm参数。
2.4.1编辑jvm.options:[root@light config]# vim jvm.options2.4.2编辑elasticsearch.yml修改数据和日志目录
[root@light config]# vim elasticsearch.yml
#集群的名称,同一个集群该值必须设置成相同的 cluster.name: my-application #该节点的名字 node.name: node1 #该节点有机会成为master节点 node.master: true #该节点可以存储数据 node.data: true #数据存储路径 path.data: /data/es/es1/data #日志存储路径 path.logs: /data/es/es1/logs #shard的数目 #index.number_of_shards: 5 #数据副本的数目 #index.number_of_replicas: 3 #该参数用于同时设置bind_host和publish_host network.host: 0.0.0.0 #设置绑定的IP地址,可以是IPV4或者IPV6 #network.bind_host: ip #设置其他节点与该节点交互的IP地址 #network.publish_host: ip #设置节点之间交互的端口号 transport.tcp.port: 9301 #设置对外服务的http端口号 http.port: 9201 #设置是否压缩tcp上交互传输的数据 transport.tcp.compress: true #设置http内容的最大大小 http.max_content_length: 100mb bootstrap.memory_lock: false bootstrap.system_call_filter: false #设置集群中自动发现其他节点时ping连接的超时时间 discovery.zen.ping_timeout: 30s #是否启用多播发现机制 #discovery.zen.ping.multicast.enabled: false #最小具备master资格的节点 discovery.zen.minimum_master_nodes: 2 #集群中的其他节点信息,默认端口为9300 discovery.zen.ping.unicast.hosts: ["ip:9301","ip:9302","ip:9303"] #设置初始化主节点 cluster.initial_master_nodes: ["node1"] http.cors.enabled: true http.cors.allow-origin: "*"
注意:
- ip设置成自己服务器的ip
- 需要开放六个端口
- 节点名称、数据存储路径、日志存储路径需要对应
[root@light /]# mkdir -p /data/es/es1/data [root@light /]# mkdir -p /data/es/es1/logs
- 重复2.3和2.4步骤设置es2和es3节点,注意修改端口
[root@light /]# cd /data [root@light data]# chown -R esuser.esuser es [root@light data]# chmod 777 es2.4.4修改/etc/security/limits.conf文件
[root@light es]# vim /etc/security/limits.conf
文件最后加入以下内容:
* soft nofile 65535 * hard nofile 65535
设置nofile意义:#任何用户可以打开的最大的文件描述符数量,默认1024,这里的数值会限制tcp连接
设置nproc意义:#任何用户可以打开的最大进程数
具体参数说明详见linux中/etc/security/limits.conf配置文件说明
[root@light es]# vim /etc/sysctl.conf
文件最后一行增加
vm.max_map_count=655350
[root@light resource]# chown -R esuser.esuser es [root@light resource]# chmod 777 es3.2切换到esuser用户并启动
这里需要开放9200和9300端口,阿里云服务器在“网络与安全-安全组-配置规则-入方向”中配置
[root@light data]# su esuser ## -d代表后台启动 [esuser@light data]$ /resource/es/es1/bin/elasticsearch -d [esuser@light data]$ /resource/es/es2/bin/elasticsearch -d [esuser@light data]$ /resource/es/es3/bin/elasticsearch -d
可能会报以下错误:
3.2.1 jdk版本过低(https://blog.csdn.net/qq_43013511/article/details/119775092?spm=1001.2014.3001.5501)
原因是我linux中jdk的版本为1.8,但是需要jdk11以上的,稳妥起见我把jdk升级到了12,jdk安装参见jdk安装
报错图片是网上找的,但是大致是main方法这个报错
赋权:
#chown -R 普通用户名 要赋权限的用户名 chown -R esuser //environment/elasticsearch-7.15.2
当出现以下内容代表启动成功:
[esuser@light config]$ curl http://127.0.0.1:9201/_cluster/health3.3.2查看节点状态 4、开机自启动 4.1 在/etc/init.d/目录创建es文件
[root@light elasticsearch-7.15.2]# vim /etc/init.d/es
内容如下:
#!/bin/sh #chkconfig: 2345 80 05 #description: elasticsearch export JAVA_HOME=/usr/local/jdk-12.0.2 export JAVA_BIN=/usr/local/jdk-12.0.2/bin export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME JAVA_BIN PATH CLASSPATH case "$1" in start) # 这里 esuser 是你的 es用户 ‘< 4.2 修改上述文件权限[root@light elasticsearch-7.15.2]# chmod 777 /etc/init.d/es4.3 添加和删除服务并设置启动方式(chkconfig具体使用另行百度)[root@light elasticsearch-7.15.2]# chkconfig --add es [root@light elasticsearch-7.15.2]# chkconfig --del es [root@light elasticsearch-7.15.2]# chkconfig --list4.4 开机启动[root@light elasticsearch-7.15.2]# chkconfig es on // 设置开机启动 [root@light elasticsearch-7.15.2]# chkconfig es off // 关闭开机启动4.5 启动和关闭服务[root@light elasticsearch-7.15.2]# service es start // 启动服务 [root@light elasticsearch-7.15.2]# service es stop // 关闭服务 [root@light elasticsearch-7.15.2]# service es restart // 重启服务5、head插件安装 5.1安装node点击此处下载nodejs
5.1.1上传并解压nodejs
此处我解压到/usr/local文件夹中
5.1.2 修改/etc/profile文件
在/etc/profile文件新增以下内容:
#SET PATH FOR NODEJS export PATH=$PATH:/usr/local/node-v16.13.0/bin保存退出后执行:
[root@light local]# source /etc/profile5.1.3 软连接ln -s /usr/local/nodejs/bin/npm /usr/local/bin/ ln -s /usr/local/nodejs/bin/node /usr/local/bin/5.1.4 测试nodejs是否安装成功 5.2下载zip并解压点此下载
[root@light local]# unzip ./elasticsearch-head-master.zip移动到/usr/local文件夹下
5.3 配置 5.3.1 修改es节点中的config/elasticsearch.yml配置进入elasticsearch的安装目录修改elasticsearch的配置文件elasticsearch.yml,末尾添加,主要的作用就是允许跨域请求
http.cors.enabled: true http.cors.allow-origin: "*"5.3.2 修改es-head的app.js配置进入elasticsearch-head-master的_site目录 cd /usr/local/elasticsearch-head-master/_site修改app.js(这里建议直接搜索文本内容9200)
5.3.3 修改Gruntfile.js
localhost修改为自己服务器的地址,端口默认为9200,我自己修改为92015.3.4 安装依赖包
大致的意思就是设置允许那些ip可以访问head,出于安全考虑设置成自己的ip,我这里测试服务器就设置成允许所有用户访问。配置完成后我们使用npm 安装head需要的包:
cd elasticsearch-head #启动cmd进入head所在的文件夹 npm install npm run start5.4 测试通过浏览器访问你设置的ip端口号,看到如下画面代表你的head已经可以正常使用了。
5.5设置自启动 5.5.1新建eshead服务
[root@light /]# cd /etc/init.d [root@light init.d]# vim eshead5.5.2复制#!/bin/bash # #chkconfig: 345 63 37 #description: elasticsearch-head-master #processname: elasticsearch-head-master export NODE_HOME=/usr/local/node-v16.13.0-linux-x64 export JAVA_HOME=/usr/local/jdk-12.0.2 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export NODE_PATH=$NODE_HOME/lib/node_modules ESHEAD_HOME=/usr/local/elasticsearch-head-master case $1 in start) cd $ESHEAD_HOME nohup npm run start >/usr/local/elasticsearch-head-master/nohup.out 2>&1 & echo "eshead is started" ;; stop) pid=`lsof -t -i:9100` kill -9 $pid echo "eshead is stop" ;; restart) pid=`lsof -t -i:9100` kill -9 $pid echo "eshead is stopped" sleep 1 cd $ESHEAD_HOME nohup npm run start >/usr/local/elasticsearch-head-master/nohup.out 2>&1 & echo "eshead is started" ;; *) echo "start|stop|restart" ;; esac exit 05.5.3 操作[root@light init.d]# chmod 777 eshead ## 赋权 [root@light init.d]# chkconfig --add eshead ## 添加服务到开机项 [root@light init.d]# chkconfig eshead on ## 设置为开机启动 [root@light init.d]# service eshead start ## 测试



