ElasticSearch

ElasticSearch

1、简介

(1)全文搜索引擎
(2)分布式文档数据库

2、与关系型数据库的区别

关系型数据库:数据库->表->行->列
Elasticsearch:索引(Index)->类型(type)->文档(Documents)->字段(Fields)

3、目录结构

bin:脚本文件,包括ES启动&安装插件等
config:elasticsearch.yml(ES配置文件)、jvm.options(JVM配置文件)、日志配置文件等
JDK:内置的jdk
lib:类库
logs:日志文件
modules:ES所有模块,包括X-pack等
plugins:ES已经安装的插件,默认没有插件
data:ES启动的时候,默认与logs同级,用来存储文档数据。该目录可在elasticsearch.yml中配置

4、部署

部署前下载对应版本的安装包到服务器

(1)修改系统参数

 vi /etc/security/limits.conf
 * soft nofile 165535
   * hard nofile 165535
   * soft nproc 65536
   * hard nproc 65536
 vi /etc/sysctl.conf
   vm.max_map_count=262144
 sysctl -p //生效

(2)配置

 vi /opt/elasticsearch-7.15.0/config/elasticsearch.yml

(3)修改JDK环境变量
(4)修改内存

vi /opt/elasticsearch-7.15.0/config/jvm.options
-Xms16g
     -Xmx16g

(5)修改ES使用JDK

vi /opt/elasticsearch-7.15.0/bin/elasticsearch-env
  JAVA="$ES_JAVA_HOME/bin/java"

(6)设置用户

chown -R elasticsearch:elasticsearch /opt/
chown -R elasticsearch:elasticsearch /data/es/ //es数据存放目录

(8)启动

su - elasticsearch -c '/opt/elasticsearch-7.15.0/bin/elasticsearch -d'
runuser -l elasticsearch -c '/opt/elasticsearch-7.15.0/bin/elasticsearch -d'

(9)设置开机自启动
(10)ES占用端口号

      9200:ES外部通讯
      9300:ES内部通信

(11)访问ES

      http://ip:9200 

5、ES中的分片

(1)为什么引入分片

    物理机资源有限,若一个索引存在海量文件,则不能再一个节点上存储,引入片可以实现同一个索引存储在不同的分片中;
 索引指一个或多个分片的逻辑命名空间;一个分片保存了一份数据的部分信息;一个分片即一个lucene实例;分片是数据的容器,文档保存在分片中;分片被分配在集群中的各个节点,当集群扩容缩容时,ES会在各节点迁移分片,使得数据仍然可以均匀的分布在集群中

(2)主分片与从分片

    主分片尽可能的平均分配到不同节点上,随着节点的增加主分片会再次被重新分配,该过程由ES主动完成,从分片是主分片的一个副本,不会和主分片在一个节点上默认情况     下,一个索引创建5个主分片和5个从分片,若只有一个节点,则5个主分片不能分配,ES状态为YELLOW
索引的任意一个文档都归属于主分片,主分片决定索引能够保存的最大的数据量,理论上一个主分片能够存储Integer.MAX_VALUE - 128 个文档

(3)对文档的创建、索引、删除都是在主分片上完成之后同步到从分片

(4)住主分片为3,副分片为1,表示每个主分片有一个副分片,即副分片数量也为3

(5)分片是一个完整的搜索引擎,他拥有节点上的所有资源

(6)负分片的数量可以动态调整,主分片的数量在索引创建完成之后就已经确定

6、ES集群状态

GREEN YELLOW READ

Green:所有主分片和从分片都准备就绪(分配成功),即使有一台机器挂了(假设一台机器一个实例),数据都不会丢失,但会变成 Yellow 状态。

Yellow:所有主分片准备就绪,但存在至少一个主分片(假设是 A)对应的从分片没有就绪,此时集群属于警告状态,意味着集群高可用和容灾能力下降,如果刚好 A 所在的机器挂了,而从分片还处于未就绪状态,那么 A 的数据就会丢失(查询结果不完整),此时集群进入 Red 状态。

Red:至少有一个主分片没有就绪(直接原因是找不到对应的从分片成为新的主分片),此时查询的结果会出现数据丢失(不完整);写入会返回异常。、

7、ES集群节点类型

master:node.master=true
data:node.data=true
client:node.master=false node.data=false

8、ES集群的自动发现机制

(1)当集群存在10个节点时,若有三个节点断开,因为发现机制会出现两个集群,通过一下参数配置
discovery.zen.minium_master_nodes:6 //表示当节点数小于6时,无法组成集群

(2)发现机制形式

单播发现:发送请求到单个节点
多播(组播)发现:一台机器可以同时向多台机器发送请求

注意:ES的配置文件只有在重启的时候才能生效

9、ES使用

(1)查看集群状态

curl -X GET "localhost:9200/_cluster/health?pretty"

(2)查看集群节点

curl -XGET "http://localhost:9200/_cat/nodes?pretty"

(3)查看集群索引

curl -XGET "http://localhost:9200/_cat/indices?pretty"

(4)查看集群分片

curl -X GET "localhost:9200/_cluster/health?pretty&level=shards"

(5)查看集群恢复情况

curl -X GET "localhost:9200/_recovery?pretty"

(6)尝试重新分配分片

curl -X GET "localhost:9200/_cluster/reroute"

(7)检索文档

curl -XGET "http://127.0.0.1:9200/aaa-2023.06.01/_search?pretty"

(8)高亮搜索

 curl -XGET "http://127.0.0.1:9200/aaa--2023.06.01/_search?q=sourceNode:aaa-public/Pod/aaa-86775fd5bc-qxmth"

(9)创建索引

curl -XPOST "http://127.0.0.1:9200/ljtest" -H 'Content-Type:application/json'  -d '{"setting":{"number_of_shards":2,"number_of_replicas":2}}'

(10)修改副分片数量

curl -XPUT "http://127.0.0.1:9200/ljtest/_setting" -H 'Content-Type:application/json'  -d '{"index":{"number_of_replica":1}}'

(11)插入一个文档

curl -XPOST "http://127.0.0.1:9200/ljtest/student" -H 'Content-Type:application/json' -d '{"name":"John Smith","age":42,"confirmed":true,"join_date":"2014-06-01","home":{"lat":51.5,"lon":0.1},"accounts":[{"type": "wechat","id":"ll"},{"type": "qq","id":"ll"}]}'

(12)创建自带id的文档

curl -XPUT "http://127.0.0.1:9200/website/blog/123"  -H 'Content-Type:application/json'  -d '{"title":"test","text":"Just trying this out...","date":"2023/06/01"}'

(13)返回某个文档部分字段

curl -XGET "http://127.0.0.1:9200/ljtest/test/123?_source=title,text" 

(14)检验文档是否存在

curl -i -XHEAD http://localhost:9200/ljtest/test/123

(15)更新整个文档

curl -XPUT "http://127.0.0.1:9200/ljtest/testg/123"  -H 'Content-Type:application/json'  -d '{"title":"test","text":"test","date":"2023/06/13"}'

(16)更新文档部分字段

curl -XPOST "http://127.0.0.1:9200/website/blog/123"  -H 'Content-Type:application/json'  -d '{"doc":{"tags":[ "testing" ],"views":0}}' //文档新增字段

(17)删除文档

curl -XDELETE "http://127.0.0.1:9200/ljtest/test/123" 

(18)返回多个文档

curl -XGET "http://127.0.0.1:9200/_mget?pretty"  -H 'Content-Type:application/json'  -d '{"docs":[{"_index":"website","_type":"blog","_id":234},{"_index":"ljtest","_type":"students","_id":123}]}'

10、问题排查思路

(1)遇到集群Red时,我们可以从如下方法排查
集群层面:

  curl -X GET "localhost:9200/_cluster/health?pretty"

索引层面:

curl -X GET "localhost:9200/_cluster/health?pretty&level=indices"

分片层面

  curl -X GET "localhost:9200/_cluster/health?pretty&level=shards"

看恢复情况:

curl -X GET "localhost:9200/_cluster/_recovery?pretty

(2)有unassigned分片的排查思路
诊断:

curl -X GET "http://localhost:9200/_cluster/allocation/explain?pretty"

查询索引详细信息

curl -XGET localhost:9200/_cluster/allocation/explain?pretty -H 'Content-Type:application/json' -d '{"index":"test_log-20230607","shard":0,"primary":true}'

primary为true为主分片,为false为从分片

尝试重新分配。

curl -X POST "http://localhost:9200/_cluster/reroute"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值