1. 前言
ElasticSearch介绍
Elasticsearch是一个基于Lucene的搜索服务器。
它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。
Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。
根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
主要应用场景
全文检索、日志收集系统(ELK)
搭建准备
ElasticSearch必须要有JDK环境,所以本文安装示例是基于已有JDK的前提下。
如未安装可参考blog进行安装:Linux配置jdk环境
2. 资料下载
当前稳定版本为:7.15.2,故选择上一个稳定版本7.14.2
历史版本下载选择地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
CSDN下载
- elasticsearch-7.14.2-windows-x86_64.zip(Windows)
- elasticsearch-7.14.2-darwin-x86_64.tar.gz (Macos)
- elasticsearch-7.14.2-linux-x86_64.tar.gz (Linux)
官网下载
- elasticsearch-7.14.2-windows-x86_64.zip(Windows)
- elasticsearch-7.14.2-darwin-x86_64.tar.gz (Macos)
- elasticsearch-7.14.2-linux-x86_64.tar.gz (Linux)
3. 单机搭建
Windows
-
解压后得到目录:elasticsearch-7.14.2
-
双击elasticsearch.bat启动
-
验证安装
url:http://localhost:9200/
出现下图表示成功:↓
配置IK分词器
GitHub源码地址:https://github.com/medcl/elasticsearch-analysis-ik
CSDN下载:elasticsearch-analysis-ik-7.14.2.zip
GitHub下载:elasticsearch-analysis-ik-7.14.2.zip
需注意ik与es的版本一致
1)创建ik插件目录并解压
2)重启es
Docker
使用Docker安装前提需要有Docker环境,如未安装可参考:centOs在线/离线安装docker
1. 查看docker环境
docker version
2. 拉取es镜像
docker pull elasticsearch:7.14.2
3.调整linux虚拟内存
/proc/sys/vm/max_map_count
具体作用可参考:linux参数之max_map_count
1)查看目前数量(默认65530)
cat /proc/sys/vm/max_map_count
2)调整为262144
sysctl -w vm.max_map_count=262144
4. 运行es镜像
docker run --name elasticsearch -d -e ES_JAVA_POTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:7.14.2
参数说明:↓
ES_JAVA_POTS=“-Xms256m -Xmx256m”:配置java内存参数
discovery.type=single-node:以单机方式启动
-p 9200:9200:映射容器中9200到宿主机的9200端口(es连接端口)
-p 9300:9300:映射容器中9300到宿主机的9300端口(es通信端口)
5. 验证启动状态
请求本地es端口
curl http://127.0.0.1:9200
6. 验证外网访问情况
浏览器请求:http://ip:9200
如无法外网访问,按下列步骤检查:↓
1)检查防火墙端口及云服务器安全组端口是否开放
2)检查es容器中配置是否为(正常默认就是):network.host: 0.0.0.0
3)检查启动时是否添加参数:-e “discovery.type=single-node”
Linux
-
下载/上传ElasticSearch压缩包
[root@jszwjs56ji ~]# [root@jszwjs56ji ~]# sudo mkdir /data/elasticsearch && cd /data/elasticsearch # 下载压缩包 [root@jszwjs56ji elasticsearch]# sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.2-linux-x86_64.tar.gz
-
解压并进入ElasticSearch
[root@jszwjs56ji elasticsearch]# sudo tar -zxvf elasticsearch-7.14.2-linux-x86_64.tar.gz && cd elasticsearch-7.14.2/
-
创建esuser用户(es不允许以root用户启动)
# 添加用户 [root@jszwjs56ji elasticsearch-7.14.2]# sudo adduser esuser # 创建用户密码(需输入两次密码) [root@jszwjs56ji elasticsearch-7.14.2]# sudo passwd esuser Changing password for user esuser. New password: BAD PASSWORD: it does not contain enough DIFFERENT characters BAD PASSWORD: is too simple Retype new password: passwd: all authentication tokens updated successfully. # 赋予目录权限 [root@jszwjs56ji elasticsearch-7.14.2]# sudo chown -R esuser ../elasticsearch-7.14.2 # 切换到esuser用户 [root@jszwjs56ji elasticsearch-7.14.2]# su esuser
-
启动ElasticSearch
CentOs6.x需要额外修改elasticsearch.yml文件,添加配置:↓
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
原因:system_call_filter默认为true,CentOs6.x不支持SecComp导致[esuser@jszwjs56ji elasticsearch-7.14.2]# ./bin/elasticsearch # 以守护进程启动 [esuser@jszwjs56ji elasticsearch-7.14.2]# ./bin/elasticsearch -d
-
验证安装
本地请求9200端口[esuser@jszwjs56ji ~]# curl 127.0.0.1:9200 { "name" : "jszwjs56ji", "cluster_name" : "elasticsearch", "cluster_uuid" : "nsT3ilqXSN-92Ynru1UMBQ", "version" : { "number" : "7.14.2", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "6bc13727ce758c0e943c3c21653b3da82f627f75", "build_date" : "2021-09-15T10:18:09.722761972Z", "build_snapshot" : false, "lucene_version" : "8.9.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
-
开机自启
# 修改rc.local文件 [root@jszwjs56ji elasticsearch-7.14.2]# sudo vim /etc/rc.local # 新增如下两行(指向jdk8路径、elasticsearch启动脚本) export JAVA_HOME=/data/jdk-11.0.22/ sh /data/elasticsearch/elasticsearch-7.14.2/bin/elasticsearch -d
配置IK分词器
GitHub源码地址:https://github.com/medcl/elasticsearch-analysis-ik
CSDN下载:elasticsearch-analysis-ik-7.14.2.zip
GitHub下载:elasticsearch-analysis-ik-7.14.2.zip
需注意ik与es的版本一致
配置ik分词器
一键安装
# 用户需切换为:esuser
[esuser@jsvm-hynode-011 elasticsearch-7.14.2]$ ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.14.2/elasticsearch-analysis-ik-7.14.2.zip
手动安装
# 创建ik目录
[esuser@jszwjs56ji elasticsearch-7.14.2]$ mkdir plugins/ik && cd plugins/ik
# 下载
[esuser@jszwjs56ji ik]$ wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.14.2/elasticsearch-analysis-ik-7.14.2.zip
# 解压
[esuser@jszwjs56ji ik]$ sudo yum install unzip -y
[esuser@jszwjs56ji ik]$ unzip elasticsearch-analysis-ik-7.14.2.zip
# 删除压缩包
[esuser@jszwjs56ji ik]$ rm -f elasticsearch-analysis-ik-7.14.2.zip
# 启动
[esuser@jszwjs56ji ik]$ cd ../../ && sh ./bin/elasticsearch -d
允许其他ip访问
ElasticSearch默认只允许127回环地址,如有需要可参考如下配置步骤
注:需切换回root用户进行如下步骤操作:su root
elasticsearch.yml
sudo vim config/elasticsearch.yml
network.host: 0.0.0.0
node.name: node-1
cluster.initial_master_nodes: ["node-1"]
sysctl.conf
sudo vim /etc/sysctl.conf
# 末尾补充
vm.max_map_count=655360
使sysctl.conf文件生效:sudo sysctl -p
limits.conf
sudo vim /etc/security/limits.conf
# es用户:esuser
esuser soft nofile 65536
esuser hard nofile 65536
* soft nofile 65536
* hard nofile 65536
上述三个文件均修改完后重启es即可,参考上述第4点:启动ElasticSearch
再次访问url:http://外网ip:9200
集群搭建(Linux)
服务器信息
服务器 | ip地址 | es端口 | node-name | 通信端口 |
---|---|---|---|---|
服务器1 | 10.2.1.197 | 9200 | esnode-1 | 9300 |
服务器2 | 10.2.1.122 | 9200 | esnode-2 | 9300 |
服务器3 | 10.2.1.237 | 9200 | esnode-3 | 9300 |
搭建前提
先按照上述单机搭建(Linux)方式(需配置允许其他ip访问步骤)在3台服务器上依次安装
集群配置
- 逐个停止启动的es
[esuser@jsvm-hynode-011 elasticsearch-7.14.2]$ jps 27107 Jps 25749 Elasticsearch [esuser@jsvm-hynode-011 elasticsearch-7.14.2]$ kill -9 25749 [esuser@jsvm-hynode-011 elasticsearch-7.14.2]$ jps 27341 Jps
- 修改elasticsearch.yml文件
vim config/elasticsearch.yml
# 集群名称 cluster.name: hyesearch # 允许成为主节点 node.master: true # 允许存储数据 node.data: true # 节点通信端口 transport.tcp.port: 9300 # 是否压缩传输数据 transport.tcp.compress: true # 数据目录 path.data: /data/elasticsearch/elasticsearch-7.14.2/data # 日志目录 path.logs: /data/elasticsearch/elasticsearch-7.14.2/logs # 访问端口 http.port: 9200 # 集群节点host discovery.seed_hosts: ["10.2.1.197:9300", "10.2.1.122:9300", "10.2.1.237:9300"] # 集群节点名称 cluster.initial_master_nodes: ["esnode-1", "esnode-2", "esnode-3"] # 跨域配置 http.cors.enabled: true http.cors.allow-origin: "*" # esnode-1(10.2.1.197) # 当前节点名称 node.name: esnode-1 # 回环地址 network.host: 10.2.1.197 # esnode-2(10.2.1.122) # 当前节点名称 node.name: esnode-2 # 回环地址 network.host: 10.2.1.122 # esnode-3(10.2.1.237) # 当前节点名称 node.name: esnode-3 # 回环地址 network.host: 10.2.1.237
- 启动es集群
# 删除历史data数据 [esuser@jsvm-hynode-011 elasticsearch-7.14.2]$ rm -rf data/* # 启动 [esuser@jsvm-hynode-011 elasticsearch-7.14.2]$ ./bin/elasticsearch -d
- 验证集群
随意访问其中一台的webUrl:http://ip:9200/_nodes
格式化json可以看到共有3个节点,并且成功的节点有3个。