一、ELasticSearch的介绍
1、ElasticSearch是什么
Elasticsearch 是一个是面向文档的实时的分布式搜索分析引擎,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。 它被用作全文检索、结构化搜索、分析以及这三个功能的组合
2、 Elasticsearch核心概念
2.1、索引 index
一个索引就是一个拥有几分相似特征的文档的集合。这就相当于是 MySQL 中的表一样,而文档就是表中的每一行数据。比如说,你可以有一个客户数据的索引,一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),在一个集群中,可以定义任意多的索引。
2.2、类型 type
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。
2.3、字段Field
相当于是数据表的字段,对文档数据根据不同属性进行的分类标识。
2.4、字段类型Field type
- text:被分析索引的字符串类型
- keyword:不能被分析,只能被精确匹配的字符串类型
- date:日期类型,可以配合format一起使用
- long:长整型,数字类型
- integer:整型,数字类型
- short:短整型,数字类型
- double:双精度浮点型,数字类型
- Boolean:布尔型,true、false
- array:数组类型
- object:对象类型,json嵌套
- ip:ip类型
- geo_point:地理位置类型
2.5、映射 mapping
mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等,这些都是映射里面可以设置的,其它就是处理ES里面数据的一些使用规则设置也叫做映射,这里的映射就是对文档字段的约束,比如你的字段名字是什么,数据类型是字符串,还是数字啊. 这就类似于 mysql 中的约束一样.
2.6、文档 document
一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON格式来表示。
在一个index/type里面,你可以存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的type。
2.7、集群 cluster
一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能。一个集群由一个唯一的名字标识,这个名字默认就是“elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群。
2.8、节点 node
一个节点是集群中的一个服务器,作为集群的一部分,它存储数据,参与集群的索引和搜索功能。和集群类似,一个节点也是由一个名字来标识的,默认情况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点。这个名字对于管理工作来说挺重要的,因为在这个管理过程中,你会去确定网络中的哪些服务器对应于Elasticsearch集群中的哪些节点。
一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中,这意味着,如果你在你的网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做“elasticsearch”的集群中。
关系型数据库与ELasticSearch的对照
Relational DB | Elasticsearch |
---|---|
数据库(database) | 索引(Index) |
表(table) | 类型(types) |
数据行(rows) | 文档(documents) |
数据列(columns) | 字段(fields) |
表 => 索引:索引,就是文档的集合,类似于数据库中的表.
行 => 文档:文档,就是一条条数据,类似数据库中的每一行数据,但是文档的格式是 json 格式.
列 => 字段:字段,就是 json 文档中的字段,类似于数据库中的列.
约束 => 映射:映射是索引中文档的约束,例如字段类型约束.类似于数据库中的表结构.
SQL => DSL:DSL 是 es 中提供的 json 风格的请求语句,用来操作 es,实现 CRUD.
二、ElasticSearch单机版安装
1、ElasticSearch下载安装包
安装地址:https://www.elastic.co/cn/downloads/
2、解压
提示:必须安装jdk1.8版本以上(java -version)
cd /usr/local
mkdir elasticSearch
tar -zxvf /opt/software/elasticsearch-8.12.2-linux-x86_64.tar.gz -C /usr/local/elasticSearch
3、创建用户并授权
建立管理elasticsearch服务的用户zyf,并授权
useradd zyf
chown -R zyf:zyf /usr/local/elasticSearch/elasticsearch-8.12.2
4、创建数据文件和日志文件
创建数据文件和日志文件,并赋予操作权限
cd /opt
mkdir -p data/elasticsearch/data, data/elasticsearch/logs
chown -R zyf:zyf /opt/data/elasticsearch
5、配置
5.1、配置 elasticsearch.yml
vim /usr/local/elasticSearch/elasticsearch-8.12.2/config/elasticsearch.yml
内容如下:
node.name: node-1
path.data: /opt/data/elasticsearch/data
path.logs: /opt/data/elasticsearch/logs
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["192.168.154.100:9300"]
cluster.initial_master_nodes: ["node-1"]
http.cors.enabled: true
http.cors.allow-origin: "*"
# 关闭验证
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
5.2、配置 jvm.options
vim /usr/local/elasticSearch/elasticsearch-8.12.2/config/jvm.options
添加如下:
-Xms256m
-Xmx256m
6、配置2
====以下若不配置,启动时会报错======
6.1、修改用来启动elasticsearch的用户的文件描述符数量
vim /etc/security/limits.conf
最后添加如下:
* soft nofile 65536
* hard nofile 65536
reboot # (注:先启动elasticsearch若成功启动,则不需要重新启动服务器,否则重新启动)
查看配置是否生效
ulimit -Hu
ulimit -Su
6.2、配置一个进程可以拥有的VMA(虚拟内存区域)的数量
vim /etc/sysctl.conf
添加如下配置,并保存
vm.max_map_count=262144
#立即生效
sysctl -p
#查看配置结果
cat /proc/sys/vm/max_map_count
7、启动
需要切换到zyf用户(不允许root用户启动)
su zyf
cd /usr/local/elasticSearch/elasticsearch-8.12.2
# 直接启动
./bin/elasticsearch
# 后台启动
./bin/elasticsearch -d
nohup /usr/local/elasticSearch/elasticsearch-8.12.2/bin/elasticsearch 2>&1 &
访问:http://192.168.154.100:9200/
8、关闭elasticsearch
kill $(ps -ef | grep elasticsearch | grep -v grep | awk '{print $2}')
三、 elasticsearch 集群安装
1、配置 elasticsearch.yml
vim /usr/local/elasticSearch/elasticsearch-8.12.2/config/elasticsearch.yml
内容如下:
cluster.name: my-elastic (三个服务器的此属性必须相同)
node.name: node-1(node-2 node-3)
path.data: /opt/data/elasticsearch/data
path.logs: /opt/data/elasticsearch/logs
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9201 (9202 9203)
discovery.seed_hosts: ["hadoop102:9300","hadoop103:9300","hadoop104:9300"]
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
http.cors.enabled: true
http.cors.allow-origin: "*"
# 关闭验证
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
2、其他配置文件都相同,按照上面安装过程配置
3、安装集群监控cerebro
Cerebro(又称Elasticsearch Cerebro)是一个开源的用于可视化和管理 Elasticsearch 集群的开源工具。使用Scala、Play框架、AngularJS和Bootstrap构建;它提供了一个直观的用户界面,让您能够轻松地监控、管理和诊断您的Elasticsearch集群。
为了安装Cerebro,必须安装java1.8或更高版本
3.1、下载地址:https://github.com/lmenezes/cerebro
3.2、解压
tar -zxvf /opt/software/cerebro-0.9.4.tgz
cd cerebro-0.9.4
./bin/cerebro
3.3、访问:http://hadoop104:9000/
在kibana中输入如下:
put /heima
{
"settings":{
"number_of_shards":3, //分片数量
"number_of_replicas":1 //副本数量
},
"mappings": {
"properties": {
"name": {
"type": "keyword",
"index":false
}
}
}
}
4.故障转移的监视
主节点挂掉的情况
故障转移成功后的效果(不需要人为干预,系统会自动转移)
参考文档: