elasticsearch安装和使用

  • Post author:
  • Post category:其他



目录


一、elasticsearch简介


二、elasticsearch安装与配置


软件下载


软件安装


修改配置文件


三、elasticsearch插件安装


四、elasticsearch节点角色


五、ES集群


六、elasticsearch节点优化


一、elasticsearch简介

官网:https://www.elastic.co/cn/

Elasticsearch 是一个开源的分布式搜索分析引擎,建立在一个全文搜索引擎库 Apache Lucene基础之上。

Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎:

  • 一个分布式的实时文档存储,每个字段 可以被索引与搜索
  • 一个分布式实时分析搜索引擎
  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。

elasticsearch应用场景:

  • 信息检索
  • 日志分析
  • 业务数据分析
  • 数据库加速
  • 运维指标监控

二、elasticsearch安装与配置

软件下载


下载中心 – Elastic 中文社区

软件安装

[root@server1 ~]# rpm -ivh elasticsearch-7.6.1-x86_64.rpm
[root@server1 ~]# systemctl daemon-reload 

修改配置文件

[root@server1 ~]# cd /etc/elasticsearch/
[root@server1 elasticsearch]# ls
elasticsearch.keystore  jvm.options        role_mapping.yml  users
elasticsearch.yml       log4j2.properties  roles.yml         users_roles
[root@server1 elasticsearch]# vim elasticsearch.yml

cluster.name: my-es   #集群名称
node.name: server1    #主机名需要解析
bootstrap.memory_lock: true    #锁定内存分配
network.host: 0.0.0.0     #主机ip
http.port: 9200    #http服务端口
discovery.seed_hosts: ["server1", "server2","server3"]
cluster.initial_master_nodes: ["server1", "server2","server3"]


此时执行开启命令会报错[root@server1 elasticsearch]# systemctl start elasticsearch.service

我们查看日志

[root@server1 elasticsearch]# cd /var/log/elasticsearch/
[root@server1 elasticsearch]# cat my-es.log 


需要设置限制值

elasticsearch soft memlock unlimited

elasticsearch hard memlock unlimited

elasticsearch – nproc 4096    ##noproc 是代表最大进程数

elasticsearch – nofile 65535  ##nofile 是代表最大文件打开数

不限制最大锁定内存地址空间

[root@server1 elasticsearch]# vim /usr/lib/systemd/system/elasticsearch.service

LimitMEMLOCK=infinity  #在service语句块下添加

关闭swap分区

[root@server1 elasticsearch]# swapoff -a
[root@server1 elasticsearch]# vim /etc/fstab  ##注释掉swap分区


设置完成,重新启动服务

[root@server1 elasticsearch]# systemctl daemon-reload
[root@server1 elasticsearch]# systemctl restart elasticsearch.service 

可以看到9200端口开启

同理,在server2、server3中都安装设置好elasticsearch

在server2、server3中安装好elasticsearch后(rpm -ivh elasticsearch-7.6.1-x86_64.rpm)将配置文件复制给2、3

[root@server1 elasticsearch]# cd /etc/elasticsearch/
[root@server1 elasticsearch]# scp -p elasticsearch.yml server2:/etc/elasticsearch/
elasticsearch.yml                             100% 2854   963.0KB/s   00:00    
[root@server1 elasticsearch]# scp -p elasticsearch.yml server3:/etc/elasticsearch/
elasticsearch.yml                             100% 2854     1.3MB/s   00:00    

[root@server1 elasticsearch]# scp /etc/security/limits.conf server2:/etc/security/limits.conf
limits.conf                                   100% 2552   686.2KB/s   00:00    
[root@server1 elasticsearch]# scp /etc/security/limits.conf server3:/etc/security/limits.conf
limits.conf                                   100% 2552   798.4KB/s   00:00   

同理修改配置文件、关闭swap分区


设置完成后见检测

可以在server1中查看到1与2、3都已相连接


elasticsearch查看日志的命令是 cat /var/log/elasticsearch/my-es.log

三、elasticsearch插件安装

安装一个图形化插件

这里选择用容器的方法安装

[root@foundation37 ~]# podman  pull docker.io/lmenezes/cerebro
[root@foundation37 ~]# podman run -d --name cerebro -p 9000:9000 docker.io/lmenezes
[root@foundation37 ~]# podman ps -a
[root@foundation37 ~]# podman start cerebro 
[root@foundation37 ~]# podman ps

前端可以看到页面

用http://172.25.6.1:9200登陆

可以看到集群的三台主机以及状态

master为server1

同样用容器的方法拉取head,注意需要修改配置文件

podman pull docker.io/mobz/elasticsearch-head:5
podman run -d --name head -p 9100:9100 docker.io/mobz/elasticsearch-head:5
[root@server1 elasticsearch]# vim elasticsearch.yml 
http.cors.enabled: true
http.cors.allow-origin: "*"
[root@server1 elasticsearch]# systemctl restart elasticsearch.service 

访问172.25.6.250:9100

另一种方法:直接安装head插件

下载elasticsearch-head插件:wget https://github.com/mobz/elasticsearch-head/archive/master.zip

head插件本质上是一个nodejs的工程,因此需要安装node:https://mirrors.tuna.tsinghua.edu.cn/nodesource/rpm_9.x/el/7/x86_64/nodejs-9.11.2-1nodesource.x86_64.rpm

[root@server1 ~]# rpm -ivh nodejs-9.11.2-1nodesource.x86_64.rpm

[root@server1 ~]# npm -v
5.6.0
[root@server1 ~]# node -v
v9.11.2
[root@server1 ~]#  npm install  -g cnpm --registry=https://registry.npm.taobao.org
[root@server1 ~]# unzip elasticsearch-head-master.zip
[root@server1 ~]# cd elasticsearch-head-master/
[root@server1 elasticsearch-head-master]# cnpm install
[root@server1 elasticsearch-head-master]# netstat -antlp| grep :9200
[root@server1 elasticsearch]# vim elasticsearch.yml 
http.cors.enabled: true
http.cors.allow-origin: "*"
[root@server1 elasticsearch-head-master]# cnpm run start &

9200端口开启

访问172.25.6.1:9100可以建立索引

在前端我们可以建立一个demo


四、elasticsearch节点角色

• Master:

主要负责集群中索引的创建、删除以及数据的Rebalance等操作。

Master不负责数据的索引和检索,所以负载较轻。当Master节点失联或者挂掉的时候,ES集群会自动从其他Master节点选举出一个Leader。

• Data Node:

主要负责集群中数据的索引和检索,一般压力比较大。

• Coordinating Node:

原来的Client node的,主要功能是来分发请求和合并结果的。所有节点默认就是Coordinating node,且不能关闭该属性。

• Ingest Node:

专门对索引的文档做预处理

五、ES集群

Cluster:集群,包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称,默认是elasticsearch)来决定的

Node:节点(简单理解为集群中的一个服务器),集群中的一个节点,节点也有一个名称(默认是随机分配的),节点名称很重要(在执行运维管理操作的时候),默认节点会去加入一个名称为“elasticsearch”的集群,如果直接启动一堆节点,那么它们会自动组成一个elasticsearch集群,当然一个节点也可以组成一个elasticsearch集群。

Index:索引(简单理解就是一个数据库),包含一堆有相似结构的文档数据,比如可以有一个客户索引,商品分类索引,订单索引,索引有一个名称。一个index包含很多document,一个index就代表了一类类似的或者相同的document。比如说建立一个product index,商品索引,里面可能就存放了所有的商品数据,所有的商品document。

六、elasticsearch节点优化


在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题。


默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。


节点角色是由以下属性控制:


• node.master: false|true

• node.data: true|false

• node.ingest: true|false

• search.remote.connect: true|false

默认情况下这些属性的值都是true


node.master:

这个属性表示节点是否具有成为主节点的资格

注意:此属性的值为true,并不意味着这个节点就是主节点。因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的。


node.data:

这个属性表示节点是否存储数据。


node.ingest:

是否对文档进行预处理。


search.remote.connect:

是否禁用跨集群查询

组合:

第一种组合:(默认)

• node.master: true

• node.data: true

• node.ingest: true

• search.remote.connect: true

这种组合表示这个节点即有成为主节点的资格,又存储数据。

如果某个节点被选举成为了真正的主节点,那么他还要存储数据,这样对于这个节点的压力就比较大了。

测试环境下这样做没问题,但实际工作中不建议这样设置。

第二种组合:(Data node)

• node.master: false

• node.data: true

• node.ingest: false

• search.remote.connect: false

这种组合表示这个节点没有成为主节点的资格,也就不参与选举,只会存储数据。

这个节点称为data(数据)节点。在集群中需要单独设置几个这样的节点负责存储数据。后期提供存储和查询服务。

第三种组合:(master node)

• node.master: true

• node.data: false

• node.ingest: false

• search.remote.connect: false

这种组合表示这个节点不会存储数据,有成为主节点的资格,可以参与选举,有可能成为真正的主节点。

这个节点我们称为master节点。

第四种组合:(Coordinating Node)

• node.master: false

• node.data: false

• node.ingest: false

• search.remote.connect: false

这种组合表示这个节点即不会成为主节点,也不会存储数据,

这个节点的意义是作为一个协调节点,主要是针对海量请求的时候可以进行

第五种组合:(Ingest Node)

• node.master: false

• node.data: false

• node.ingest: true

• search.remote.connect: false

这种组合表示这个节点即不会成为主节点,也不会存储数据,

这个节点的意义是ingest节点,对索引的文档做预处理。


生产集群中可以对这些节点的职责进行划分


• 建议集群中设置3台以上的节点作为master节点,这些节点只负责成为主节点,维护整个集群的状态。

• 再根据数据量设置一批data节点,这些节点只负责存储数据,后期提供建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点的压力也会比较大。

• 所以在集群中建议再设置一批协调节点,这些节点只负责处理用户请求,实现请求转发,负载均衡等功能。


节点需求


• master节点:普通服务器即可(CPU、内存 消耗一般)

• data节点:主要消耗磁盘、内存。

• path.data: data1,data2,data3

这样的配置可能会导致数据写入不均匀,建议只指定一个数据路径,磁盘可以使用raid0阵列,而不需要成本高的ssd。

• Coordinating节点:对cpu、memory要求较高。


调整ES集群状态

server1中

[root@server1 elasticsearch]# vim  /etc/elasticsearch/elasticsearch.yml

node.name: server1
node.master: true
node.data: false
node.ingest: true
node.ml: false
#
[root@server1 elasticsearch]# systemctl restart elasticsearch.service 
Job for elasticsearch.service failed because the control process exited with error code. See "systemctl status elasticsearch.service" and "journalctl -xe" for details.

重启服务失败,因为我们之前在server1中建立了索引,而此时设置不可以储存数据,所以我们需要先清理server1上的数据。看日志可以得知如何清理

[root@server1 elasticsearch]# cat /var/log/elasticsearch/my-es.log 
[root@server1 bin]# ./elasticsearch-node repurpose
[root@server1 ~]# systemctl start elasticsearch


同理,优化server2和server3,让2、3可以存储数据但不可以进行预处理

node.name: server2
node.master: true
node.data: true
node.ingest: false
node.ml: false

调整后的ES集群状态



版权声明:本文为Morganite原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。