elasticsearch安装和使用

elasticsearch安装和使用,第1张

elasticsearch安装和使用 一.elasticsearch简介

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

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

  • 一个分布式的实时文档存储,每个字段 可以被索引与搜索
  • 一个分布式实时分析搜索引擎
  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
  • 与文档型数据库mongo相比,ES的文档查询与聚合性能更强,集群分片副本的架构更优。

特点:分布式,零配置,自动发现,索引自动分片,索引副本机制,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  ##主机名需要解析
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
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
Job for elasticsearch.service failed because the control process exited with error code. See "systemctl status elasticsearch.service" and "journalctl -xe" for details.
[root@server1 elasticsearch]# cd /var/log/elasticsearch/
[root@server1 elasticsearch]# cat my-es.log ##查看日志

需要设置限制值:

vim /etc/security/limits.conf

elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited

elasticsearch - nproc 4096    ##noproc 是代表最大进程数
elasticsearch - nofile 65535  ##nofile 是代表最大文件打开数

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

[root@server1 elasticsearch]# vim /etc/fstab  ##注释掉swap分区 
[root@server1 elasticsearch]# swapoff -a   ##关闭swap分区
[root@server1 elasticsearch]# vim /usr/lib/systemd/system/elasticsearch.service 

LimitMEMLOCK=infinity   ###在service语句块下添加
[root@server1 elasticsearch]# sysctl vm.max_map_count
vm.max_map_count = 262144

 

 设置完成,重新启动服务

[root@server1 elasticsearch]# systemctl daemon-reload
[root@server1 elasticsearch]# systemctl restart elasticsearch.service
[root@server1 elasticsearch]# netstat -antlup   ##9200端口是否开启

[root@server1 elasticsearch]# curl localhost:9200 

 

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

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

[root@server1 elasticsearch]# ssh-keygen 

[root@server1 elasticsearch]# ssh-copy-id server2
[root@server1 elasticsearch]# ssh-copy-id server3
[root@server1 elasticsearch]# pwd
/var/log/elasticsearch
[root@server1 elasticsearch]# 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]# scp -p elasticsearch.yml server2:/etc/elasticsearch/
elasticsearch.yml                                                     
[root@server1 elasticsearch]# scp /etc/security/limits.conf server2:/etc/security/limits.conf

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

设置完成后检测一下:

 

 在server3中执行相同的 *** 作:

 

 

 

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

三、elasticsearch插件安装

安装一个图形化插件

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

[westos@foundation52 Desktop]$ podman pull docker.io/lmenezes/cerebro
[westos@foundation52 Desktop]$ podman images
[westos@foundation52 Desktop]$ podman run -d --name cerebro -p 9000:9000 docker.io/lmenezes/cerebro
[westos@foundation52 Desktop]$ podman ps -a
[westos@foundation52 Desktop]$ podman start cerebro 
cerebro
[westos@foundation52 Desktop]$ podman ps

  

 前端可以看到页面

用http://172.25.52.1:9200登陆

可以看到集群的三台主机以及状态,master为server1

 

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

[westos@foundation52 Desktop]$ podman pull docker.io/mobz/elasticsearch-head:5
[westos@foundation52 Desktop]$ podman run -d --name head -p 9100:9100 docker.io/mobz/elasticsearch-head:5
[westos@foundation52 Desktop]$ podman images
REPOSITORY                          TAG      IMAGE ID       CREATED        SIZE
docker.io/lmenezes/cerebro          latest   045d7f40bf06   6 months ago   289 MB
docker.io/mobz/elasticsearch-head   5        b19a5c98e43b   4 years ago    862 MB
[westos@foundation52 Desktop]$ podman ps
ConTAINER ID  IMAGE                                COMMAND               CREATED             STATUS                 PORTS                   NAMES
09953f863cd7  docker.io/mobz/elasticsearch-head:5  /bin/sh -c grunt ...  about a minute ago  Up about a minute ago  0.0.0.0:9100->9100/tcp  head
e45158a31e9a  docker.io/lmenezes/cerebro:latest                          about an hour ago   Up about an hour ago   0.0.0.0:9000->9000/tcp  cerebro
[westos@foundation52 Desktop]$ 

 

 访问172.25.52.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 ~]# yum install -y unzip
[root@server1 ~]# unzip elasticsearch-head-master.zip 
[root@server1 ~]# cd elasticsearch-head-master/
[root@server1 elasticsearch-head-master]# ls
[root@server1 elasticsearch-head-master]# yum install -y bzip2
[root@server1 elasticsearch-head-master]# cnpm install
[root@server1 elasticsearch-head-master]# netstat -antlup | grep :9200
[root@server1 elasticsearch-head-master]# cnpm run start &  ##开启打入后台
[root@server1 elasticsearch-head-master]# vim /etc/elasticsearch/elasticsearch.yml 
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
[root@server1 elasticsearch-head-master]# vim /etc/elasticsearch/elasticsearch.yml 
[root@server1 elasticsearch-head-master]# systemctl restart elasticsearch.service 

 9200端口开启

  访问172.25.52.1:9100可以建立索引

 

四、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集群状态

[root@server1 elasticsearch-head-master]# cd /etc/elasticsearch/
[root@server1 elasticsearch]# vim elasticsearch.yml 

# Use a descriptive name for the node:
#
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]# cd /usr/share/elasticsearch/
[root@server1 elasticsearch]# cd bin/
[root@server1 bin]# ls
[root@server1 bin]# systemctl stop elasticsearch.service 
[root@server1 bin]# ./elasticsearch-node repurpose

 

 

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

[root@server2 ~]# cd /etc/elasticsearch/
[root@server2 elasticsearch]# vim elasticsearch.yml 
node.name: server2
node.master: true
node.data: true
node.ingest: false
node.ml: false
[root@server2 elasticsearch]# systemctl restart elasticsearch.service
[root@server3 elasticsearch]# vim /etc/elasticsearch/elasticsearch.yml
node.name: server3
node.master: true
node.data: true
node.ingest: false
node.ml: false
[root@server3 elasticsearch]# systemctl restart elasticsearch.service

访问http://172.25.52.1:9100/  查看调整后的ES集群状态

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5682897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存