随着项目的运行的时间的加长,日志信息也会不断的增大,迫切的需要一款功能强大,能高效的搜索日志的相关内容,最好是支持图表展示和实施流量统计的相关系统过来支撑我们的系统,那么就必不可少的需要提下我们的Elastic的相关组件了,其中Elasticsearch是系统的基石,所以我们接下里的博客就了解下Elasticsearch,从而一步步的搭建我们需要的日志系统。工具善其事,必先利其器,我们先来搭建下Elasticsearch所需要的运行环境,再一步一步的了解Elasticsearch。
环境搭建的软硬件
系统 | 软件版本 |
---|---|
CentOS Linux release 7.5.1804 (Core) | elasticsearch-7.3.0-linux-x86_64 |
安装
我们这里采用tar.gz的安装方式来安装
我们这里使用rzsz的方式来上传文件
## 安装rzsz的环境
yum install lrzsz -y
## 安装成功之后 ,上传文件 输入命令 rz 就会弹出文件选择框,选择文件之后,上传该文件到当前路径下
rz
## 查看是否上传成功
ls
文件上传成功之后,我们来解压文件,由于es需要非root用户来启动,所以我们还需要创建一个用户,并且给这个用户赋权,来启动我们的Elasticsearch
## 解压Elasticsearch的tar.gz文件
tar -zxvf elasticsearch-7.3.0-linux-x86_64.tar.gz
## 新建一个用户
useradd -d /usr/local/elasticsearch-7.3.0 -m es
## 为es设置密码, 密码需要输入两次,校验不通过可以不用管他
passwd es
## 给es用户为 elasticsearch-7.3.0文件夹授权
chmod -R 777 /usr/local/elasticsearch-7.3.0
## 进入Elasticsearch的安装目录下,创建data文件夹来存放数据
mkdir data
接下来我们来修改配置文件
取消下面的注解,并且修改其中的值
# 集群名称
cluster.name: node-1
# 节点名称
node.name: node-1
# 数据和日志的存储目录
path.data: /usr/local/elasticsearch-7.3.0/data
path.logs: /usr/local/elasticsearch-7.3.0/logs
# 设置绑定的ip,设置为0.0.0.0以后就可以让任何计算机节点访问到了
network.host: 0.0.0.0
# 端口
http.port: 9200
# 设置在集群中的所有节点名称,这个节点名称就是之前所修改的,当然你也可以采用默认的也行,目前是单机,放入一个节点即可
# 注意这里,如果目前是单节点的话,一定要修改该值为节点的名称,否则虽然启动成功了,但是通过curl命令向elasticsearch服务中新增数据时,会出现 "master_not_discovered_exception"错误
cluster.initial_master_nodes: ["node-1"]
一切似乎都准备好了,我们来启动下看看是否能否启动起来
## 切换到非root用户 es用户
su - es
## 然后进入到 /usr/local/elasticsearch-7.3.0/bin文件下
cd /usr/local/elasticsearch-7.3.0/bin
## 启动Elasticsearch
./elasticsearch
## 或者以守护线程启动则执行
./elasticsearch -d
## 查看日志看看是否启动成功
按照上面的配置首次启动报了如下的错误:
![](https://img.haomeiwen.com/i4253007/c1f0f2197aaf6927.png)
该错误在我之前有篇博文已经给过解决方案《Centos7下安装和配置SonarQube7.7》,
这个是服务器硬件不支持,需要我们进行如下的配置
## 1.max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
## 修改/etc/security/limits.conf文件,添加或修改如下行:
* hard nofile 65536
* soft nofile 65536
## 2.max virtual memory areas vm.max......
## 修改 /etc/sysctl.conf 文件,添加如下行:
vm.max_map_count=262144
## 修改好了以后,调用sysctl -a查看,发现参数并没有变动,要重启才可以。
limits.conf 不需要重启,但是sysctl.conf则需要重启服务器让参数生效,如果服务器不方便重启,也可以通过命令来临时设置变量,只是临时的,服务器重启的话,之前的设置就不会生效了
## 命令设置 vm.max_map_count 参数
sudo sysctl -w vm.max_map_count=262144
我们再次启动Elasticsearch,启动成功,查看日志可以看到Started的信息提示,代表Elasticsearch启动成功
我们使用命令来验证下,是否elasticsearch真正的启动成功
## 执行crul来验证Elasticsearch是否启动成功
curl http://192.168.56.105:9200
![](https://img.haomeiwen.com/i4253007/a469bee956bf61ed.png)
至此,Elasticsearch算是真正的启动成功了,这只是一个单节点的Elasticsearch环境
相关概念的理解
学习Elasticsearch之前,我们得先了解下相关的概念术语:文档、类型和索引。
在介绍相关概念术语之前,我们引入关系型数据库里面的数据库、表和行记录。
在这里我们可以先通俗的将文档理解为行记录、类型理解为表、索引看成是数据库,当然两者之间肯定是有区别的,我们先在脑海中建立这个概念模型,然后我们再来看看两者之间的区别
- 文档:
Elasticsearch是面向文档的,这个是最小的单位,通常使用JSON来表示,包括字段和属性值;
最重要的是他是层次型的,文档中可以包含新的文档,类型JSON里面属性是另外一个属性或者数组,对JSON了解的,应该很容易在理解这个数据模型。
最后每个文档都是灵活的,没有预定定义的模式,可以这样理解,和关系型数据库中的行记录中,每行都是同样的列名和类型的,但是文档不一样,在同一类型中的文档可以含有不同的字段和类型,对于NoSQL比较熟悉的可以很容易理解这个概念模型
- 类型:
类型是文档的逻辑容器,每个类型中的字段的定义称之为映射;
这里需要理解下,我们说的“无模式”是因为文档并不受模式的限制,他们并不需要拥有映射中所定义的所有的字段,如果一篇新建的索引的文档拥有一个映射中尚不存在的字段,Elasticsearch会自动将新字段添加映射,为了添加这个字段,Elasticsearch不得不确定他是什么类型的,于是Elasticsearch会进行猜测,这样也有缺点,比如说"7",在我们看来是一个字符串,但是在Elasticsearch猜测来说他是一个数字类型的Long,这样的话,与我们预期中的类型就不一致了,这样就容易出现问题
映射类型只是将文档进行逻辑划分
- 索引
索引是映射类型的容器,是独立的大量的文档的集合,每个索引存储在磁盘上的同组文件中,索引存储了所有映射类型的字段,还有一些设置。
我们可以跨多个类型进行搜索,也可以跨多个索引进行搜索,这使得组织文档的方式更为灵活
下面是Elasticsearch的概念模型图:
![](https://img.haomeiwen.com/i4253007/1241f5a618068475.png)
网友评论