Elastic7.8.x实战系列:Elasticsearch的初识与集群搭建(CentOS7.x+JDK8+elasticsearch7.8.1)

前 言

随着工业互联网和大数据应用的不断发展,对海量数据的处理、数据内容快速搜索的需求越来越重要。而且最近本人工作上也接触到的相关技术也越来越多。本文将开启Elastic Stack基础知识的学习和使用。随手留下学习记录,共勉于此。


提示:本文是本人整理资料的原创作品,转载请标出处。

一、Elastic Stack是什么?

Elastic Stack也称为ELK Stack,ELK是三个开源项目的首字缩写,他们是:Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个搜索和分析引擎(本文的重点内容)。Logstash 是服务器端数据处理管道,能同时从多个来源采集数据,转换数据,然后将数据发送到 Elasticsearch,Mysql等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。Elastic Stack 也可以认为是 ELK Stack 的更新换代产品。它又加入了Beats项目,更加能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。重点是所有均免费且开放。提示:详见官方网站

二、认识 Elasticsearch

Elasticsearch是在 Apache Lucene 的基础上开发而成的一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。它以其简单的 REST 风格 API、分布式特性、速度和可扩展性而出名。
Elasticsearch 索引是指相互关联的文档集合,以 JSON 文档的形式存储。每个文档都会在一组键(字段或属性的名称)和它们对应的值(字符串、数字、布尔值、日期、数值组、地理位置或其他类型的数据)之间建立联系。
Elasticsearch 使用的是倒排索引的数据结构,允许十分快速地进行全文本搜索。倒排索引会列出在所有文档中出现的每个特有词汇,并且可以找到包含每个词汇的全部文档。在索引过程中,Elasticsearch 会存储文档并构建倒排索引,用户可以近实时地对文档数据进行搜索使用。通过索引 API 既可以向特定索引中添加 JSON 文档,也可更改特定索引中的 JSON 文档。
由于在速度和可扩展性方面表现出色,而且支持多种类型的数据。因此适用广泛的应用场景:

  • 网站、内容搜索
  • 日志处理和分析
  • 基础设施指标和容器监测
  • 应用程序各项性能指标监测
  • 地理空间数据分析和可视化
  • 各类业务、安全分析
    支持多种编程语言,目前提供下列编程语言的官方客户端:
  • Java
  • JavaScript (Node.js)
  • Go
  • .NET (C#)
  • PHP
  • Perl
  • Python
  • Rub

三、Elasticsearch集群的搭建

1、环境准备

Elasticsearch的版本众多,本集群的搭建是基于CentOS7.x操作系统,选择的是Elasticsearch7.8.1版本。注意必须使用JAVA 8+ 环境才能运行。 准备三台虚拟机,并将以下信息添加进/etc/hosts中:
192.168.156.50 es-n0
192.168.156.51 es-n1
192.168.156.52 es-n2
以上虚拟机配置均为CPU为2核,4G内存的配置。大家可以根据自己的实际情况调整。

2、Elasticsearch安装

提示:此处省略操作系统和Java的安装。
以下操作步骤需要在所有集群节点进行,以首节点es-n0为例:

a、调整系统参数

[root@es-n0 ~]# vim /etc/sysctl.conf 
vm.max_map_count=655360
#添加以下内容到/etc/security/limits.conf文件尾
[root@es-n0 ~]# vim /etc/security/limits.conf
*        soft   nproc  65536
*        hard   nproc  65536
*        soft   nofile  65536
*        hard   nofile  65536
[root@es-n0 ~]# vim /etc/security/limits.d/20-nproc.conf
*        soft    nproc  65536
#关闭防火墙并重启系统
[root@es-n0 ~]# systemctl disable firewalld
[root@es-n0 ~]# reboot

b、下载、解压Elasticsearch

[root@es-n0 ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.1-linux-x86_64.tar.gz
[root@es-n0 ~]# tar zxvf elasticsearch-7.8.1-linux-x86_64.tar.gz -C /usr/local/
[root@es-n0 ~]# cd /usr/local/
#重命名以下目录
[root@es-n0 ~]# mv elasticsearch-7.8.1 elasticsearch

c、创建Elasticsearch运行用户

为了安全,Elasticsearch是不允许直接使用root启动的。 因此需额外创建一个用户来运行Elasticsearch服务。

#创建用户:elasticsearch
[root@es-n0 ~]# adduser elasticsearch
#设置用户账号密码:elasticsearch
[root@es-n0 ~]# passwd elasticsearch 
#将对应的elasticsearch文件夹权限赋给该用户
[root@es-n0 ~]# chown -R elasticsearch:elasticsearch /usr/local/elasticsearch

d、配置Elasticsearch

切换系统用户,使用elasticsearch用户登录。

#切换用户
[root@es-n0 ~]# su elasticsearch
[elasticsearch@es-n0 root]$
#进入elasticsearch的主配置目录,修改JVM配置
[elasticsearch@es-n0 ~]$ cd /usr/local/elasticsearch/
#找到JVM配置参数,一般为2G,不超过32G。
[elasticsearch@es-n0 config]$ vim jvm.options
-Xms2g
-Xmx2g

Elasticsearch的主配置文件为elasticsearch.yml,配置如下内容:

[elasticsearch@es-n0 config]$ vim elasticsearch.yml
cluster.name: elasticsearch
node.name: node-1
path.data: /usr/local/elasticsearch/data
path.logs: /usr/local/elasticsearch/cluster-logs
network.host: 192.168.156.50
http.port: 9200
discovery.seed_hosts: ["192.168.156.50", "192.168.156.51", "192.168.156.52"]
#此处的node需要与node.name设置的名字保持一致,不用跟主机名一致,或者直接IP地址
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
# 是否允许跨域REST请求
http.cors.enabled: true
# 允许 REST 请求来自何处
http.cors.allow-origin: "*"
#开启权限认证后,es-head-master访问elasticsearch需要的配置
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

需要创建配置文件中的datacluster-logs目录。

[elasticsearch@es-n0 config]$ cd ..
[elasticsearch@es-n0 elasticsearch]$ mkdir -p data cluster-logs
[elasticsearch@es-n0 elasticsearch]$ ll
total 1496
drwxr-xr-x.  2 elasticsearch elasticsearch   4096 Jul 22  2020 bin
drwxr-xr-x.  2 elasticsearch elasticsearch  16384 Apr 25 20:13 cluster-logs
drwxr-xr-x.  5 elasticsearch elasticsearch    222 Aug 13 14:44 config
drwxr-xr-x.  3 elasticsearch elasticsearch     19 Aug 14  2020 data
drwxr-xr-x.  9 elasticsearch elasticsearch    107 Jul 22  2020 jdk
drwxr-xr-x.  3 elasticsearch elasticsearch   4096 Jul 22  2020 lib
-rw-r--r--.  1 elasticsearch elasticsearch  13675 Jul 22  2020 LICENSE.txt
drwxr-xr-x.  2 elasticsearch elasticsearch   4096 Aug 12 16:38 logs
drwxr-xr-x. 47 elasticsearch elasticsearch   4096 Jul 22  2020 modules
-rw-r--r--.  1 elasticsearch elasticsearch 544318 Jul 22  2020 NOTICE.txt
drwxr-xr-x.  2 elasticsearch elasticsearch      6 Jul 22  2020 plugins
-rw-r--r--.  1 elasticsearch elasticsearch   8165 Jul 22  2020 README.asciidoc

OK,基本的配置已经完成。

e、启动Elasticsearch服务

Elasticsearch启动时确保当前用户为elasticsearch

[elasticsearch@es-n0 elasticsearch]$ whoami 
elasticsearch
#启动
[elasticsearch@es-n0 elasticsearch]$ ./bin/elasticsearch
[2021-08-13T14:56:05,280][INFO ][o.e.n.Node               ] [node-1] version[7.8.1]...
[2021-08-13T14:56:05,326][INFO ][o.e.n.Node               ] [node-1] JVM home ...
......
[2021-08-13T14:56:09,864][INFO ][o.e.p.PluginsService     ] [node-1] loaded module... 
[2021-08-13T14:56:18,844][INFO ][o.e.n.Node               ] [node-1] initialized
[2021-08-13T14:56:18,845][INFO ][o.e.n.Node               ] [node-1] starting ...
......
[2021-08-13T14:56:20,943][INFO ][o.e.n.Node               ] [node-1] started

当出现started时表示启动完成。
另外,后台运行有两种方式可用:

# 方式一:参数方式
[elasticsearch@es-n0 elasticsearch]$ ./bin/elasticsearch -d
# 方式二:系统nohup方式
[elasticsearch@es-n0 elasticsearch]$ nohup ./bin/elasticsearch &

f、单机服务测试

安装完后需要进行单机测试:

[elasticsearch@es-n0 elasticsearch]$ curl 192.168.156.50:9200
{
  "name" : "node-1",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "dmZNmDdxRiaOT5PtuHW9dA",
  "version" : {
    "number" : "7.8.1",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "b5ca9c58fb664ca8bf9e4057fc229b3396bf3a89",
    "build_date" : "2020-07-21T16:40:44.668009Z",
    "build_snapshot" : false,
    "lucene_version" : "8.5.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

正常显示以上JSON文本,即视为安装成功。

g、集群剩余节点的安装配置

集群剩余节点的安装也没啥特殊的地方,只要仔细重复执行a ~ f 步骤即可,就不再过多啰嗦了。 唯一需要注意的地方是配置文件elasticsearch.yml的内容修改。下面专门贴出来:

# es-n1节点上
[elasticsearch@es-n1 config]$ vim elasticsearch.yml
cluster.name: elasticsearch
node.name: node-2
path.data: /usr/local/elasticsearch/data
path.logs: /usr/local/elasticsearch/cluster-logs
network.host: 192.168.156.51
http.port: 9200
discovery.seed_hosts: ["192.168.156.50", "192.168.156.51", "192.168.156.52"]
#此处的node需要与node.name设置的名字保持一致,不用跟主机名一致,或者直接IP地址
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
# 是否允许跨域REST请求
http.cors.enabled: true
# 允许 REST 请求来自何处
http.cors.allow-origin: "*"
#开启权限认证后,es-head-master访问elasticsearch需要的配置
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
# es-n2节点上
[elasticsearch@es-n2 config]$ vim elasticsearch.yml
cluster.name: elasticsearch
node.name: node-3
path.data: /usr/local/elasticsearch/data
path.logs: /usr/local/elasticsearch/cluster-logs
network.host: 192.168.156.52
http.port: 9200
discovery.seed_hosts: ["192.168.156.50", "192.168.156.51", "192.168.156.52"]
#此处的node需要与node.name设置的名字保持一致,不用跟主机名一致,或者直接IP地址
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
# 是否允许跨域REST请求
http.cors.enabled: true
# 允许 REST 请求来自何处
http.cors.allow-origin: "*"
#开启权限认证后,es-head-master访问elasticsearch需要的配置
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

h、启动集群并查看集群状态

Elasticsearch集群的启动,主要就是把各个节点上的Elasticsearch服务启动完成即可,并没有特别的地方,而且各节点是均等的,启动没有先后次序。集群会根据各节点的状态随机选择一个Master主节点,其余节点为Slave节点。

#查看集群节点状态:
[elasticsearch@es-n0 ~]$ curl -X GET "192.168.156.50:9200/_cat/nodes?v"
ip             heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.156.51           39          54   0    0.00    0.01     0.05 dilmrt    *      node-2
192.168.156.50           50          96   1    0.00    0.01     0.05 dilmrt    -      node-1
192.168.156.52           32          56   0    0.00    0.01     0.05 dilmrt    -      node-3
#查看集群健康状态:
[elasticsearch@es-n0 ~]$ curl -X GET "192.168.156.50:9200/_cat/health?v"
epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1628841534 07:58:54  elasticsearch green           3         3     40  20    0    0        0             0                  -                100.0%
#查看集群中索引文档的状态
[elasticsearch@es-n0 ~]$ curl -X GET "192.168.156.50:9200/_cat/indices?v"
health status index                          uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  close  wcm                            lKrKm-XgSh-3MUMj6MPKqw   1   1                                                  
green  open   queue-doc                      If-zY-__TDWdSS-l858-_g   1   1        189            0     93.3kb         46.6kb

至此,Elasticsearch集群搭建完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值