Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:
分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
实时分析的分布式搜索引擎。
可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据
像天猫、京东这样的商城,用户访问商城的首页,一般都会直接搜索来寻找自己想要购买的商品。而商品的数量非常多,而且分类繁杂。
如果能正确的显示出用户想要的商品,并进行合理的过滤,尽快促成交易,是搜索系统要研究的核心。
面对这样复杂的搜索业务和数据量,使用传统数据库搜索就显得力不从心,一般我们都会使用全文检索技术,比如Solr,Elasticsearch。
Elastic官网:https://www.elastic.co/cn/
Elastic有一条完整的产品线及解决方案:Elasticsearch、Kibana、Logstash等,前面说的三个就是大家常说的ELK技术栈。
Elasticsearch(官网:https://www.elastic.co/cn/products/elasticsearch )是Elastic Stack 的核心技术。详细介绍参考官网
Elasticsearch具备以下特点:
分布式,无需人工搭建集群(solr就需要人为配置,使用Zookeeper作为注册中心)
Restful风格,一切API都遵循Rest原则,容易上手近实时搜索,数据更新在Elasticsearch中几乎是完全同步的。
CentOS8.0、jdk1.8
[root@hecs-292215 ~]# groupadd es
[root@hecs-292215 ~]# useradd -g es es
[root@hecs-292215 ~]# passwd es
Changing password for user es.
New password:
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password:
Sorry, passwords do not match.
passwd: Authentication token manipulation error
[root@hecs-292215 ~]# passwd es
Changing password for user es.
New password:
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password:
passwd: all authentication tokens updated successfully.
[root@hecs-292215 ~]#
[root@hecs-292215 ~]# su es
[es@hecs-292215 root]$ cd ~
[es@hecs-292215 ~]$ pwd
/home/es
[es@hecs-292215 ~]$ ls
[es@hecs-292215 ~]$ cd es
bash: cd: es: No such file or directory
[es@hecs-292215 ~]$ mkdir elasticsearch
[es@hecs-292215 ~]$ ls
elasticsearch
[es@hecs-292215 ~]$ ls -l
total 4
drwxrwxr-x 2 es es 4096 Nov 21 14:52 elasticsearch
[es@hecs-292215 ~]$
[es@hecs-292215 ~]$ ls
elasticsearch
[es@hecs-292215 ~]$ cd elasticsearch/
[es@hecs-292215 elasticsearch]$ ls
elasticsearch-7.12.0-linux-x86_64.tar.gz
[es@hecs-292215 elasticsearch]$ java -version
java version "1.8.0_341"
Java(TM) SE Runtime Environment (build 1.8.0_341-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.341-b10, mixed mode)
[es@hecs-292215 elasticsearch]$
tar -zxvf elasticsearch-7.12.0-linux-x86_64.tar.gz
5. 切换root用户修改配置
vi /etc/security/limits.conf
末尾新增下面四行:(修改后自动生效) es soft nofile 65536 es hard nofile 65536 es soft nproc 4096 es hard nproc 4096
vi /etc/sysctl.conf
末尾新增下面一行:(修改后执行sysctl -p生效)
vm.max_map_count=262144
vim /home/es/elasticsearch/elasticsearch-7.12.0/config/elasticsearch.yml
修改如下7个配置:
cluster.name: CollectorDBCluster
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
network.host: 10.153.61.71
http.port: 9200
node.name: node-1
cluster.initial_master_nodes: ["node-1"]
注意:一定要将elasticsearch.yml中的#cluster.initial_master_nodes: ["node-1","node-2"]注释去掉,并将“node-2”去掉
各配置项含义: cluster.name 集群名称,各节点配成相同的集群名称。 node.name 节点名称,各节点配置不同。 node.master 指示某个节点是否符合成为主节点的条件。 node.data 指示节点是否为数据节点。数据节点包含并管理索引的一部分。 path.data 数据存储目录。 path.logs 日志存储目录。 bootstrap.memory_lock 内存锁定,是否禁用交换。 bootstrap.system_call_filter 系统调用过滤器。 network.host 绑定节点IP。 http.port 端口。 discovery.zen.ping.unicast.hosts 提供其他 Elasticsearch 服务节点的单点广播发现功能。 discovery.zen.minimum_master_nodes 集群中可工作的具有Master节点资格的最小数量,官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量。 discovery.zen.ping_timeout 节点在发现过程中的等待时间。 discovery.zen.fd.ping_retries 节点发现重试次数。 http.cors.enabled 是否允许跨源 REST 请求,用于允许head插件访问ES。 http.cors.allow-origin 允许的源地址。
[es@hecs-292215 config]$ vim jvm.options
Elasticsearch基于Lucene的,而Lucene底层是java实现,因此我们需要配置jvm参数。
编辑jvm.options
修改默认配置:-Xms1g -Xmx1g(此处可选择不修改)
后台启动:
[es@hecs-292215 elasticsearch]$ ls -l
total 319836
drwxrwxr-x 2 es es 4096 Nov 21 15:44 data
drwxr-xr-x 9 es es 4096 Mar 18 2021 elasticsearch-7.12.0
-rw-r--r-- 1 root root 327497331 Nov 21 15:03 elasticsearch-7.12.0-linux-x86_64.tar.gz
drwxrwxr-x 2 es es 4096 Nov 21 15:44 logs
[es@hecs-292215 elasticsearch]$ cd elasticsearch-7.12.0
[es@hecs-292215 elasticsearch-7.12.0]$ ls
bin config jdk lib LICENSE.txt logs modules NOTICE.txt plugins README.asciidoc
[es@hecs-292215 elasticsearch-7.12.0]$ .cd bin
bash: .cd: command not found
[es@hecs-292215 elasticsearch-7.12.0]$ ls
bin config jdk lib LICENSE.txt logs modules NOTICE.txt plugins README.asciidoc
[es@hecs-292215 elasticsearch-7.12.0]$ cd bin
[es@hecs-292215 bin]$ ls
elasticsearch elasticsearch-croneval elasticsearch-migrate elasticsearch-setup-passwords elasticsearch-syskeygen x-pack-watcher-env
elasticsearch-certgen elasticsearch-env elasticsearch-node elasticsearch-shard elasticsearch-users
elasticsearch-certutil elasticsearch-env-from-file elasticsearch-plugin elasticsearch-sql-cli x-pack-env
elasticsearch-cli elasticsearch-keystore elasticsearch-saml-metadata elasticsearch-sql-cli-7.12.0.jar x-pack-security-env
[es@hecs-292215 bin]$ ./elasticsearch -d
查看启动日志: cat /home/es/elasticsearch/logs/elasticsearch.log
[root@hecs-292215 ~]# firewall-cmd --list-ports
8848/tcp
[root@hecs-292215 ~]# firewall-cmd --zone=public --add-port=9200/tcp --permanent
success
[root@hecs-292215 ~]# systemctl restart firewalld.service
[root@hecs-292215 ~]# firewall-cmd --list-ports
8848/tcp 9200/tcp
[root@hecs-292215 ~]#
curl http://ip:9200
搭建完毕!
备注:
1.查找ES进程
ps -ef | grep elastic
2.杀掉ES进程
kill -9 2382(进程号)
3.重启ES
elasticsearch -d (常驻)
然后使用./bin/elasticsearch -d 后台启动elasticsearch,去掉-d则是前端启动elasticsearch
如果涉及jdk版本的错误:
因为自己配置了环境变量JAVA_HOME,而ElasticSearch就是用了这个环境变量对应的java来运行,即发现jdk版本不对,另外还warning,JAVA_HOME环境变量已经弃用了,使用ES_JAVA_HOME代替:
因为ElasticSearch包中包含了JDK,所以我们可以直接使用,有两种使用办法:
1、添加环境变量ES_JAVA_HOME指向ElasticSearch包中包含了JDK目录
2、修改bin/elasticsearch-env中代码,我们注释掉JAVA_HOME部分的判断: