ElasticSearch基础

ElasticSearch简介

Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析也可以认为它是一个面向文档型数据库,它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写
特点:
实时(近实时)
分布式
面向文档
高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards 和 Replicas)。
接口友好(RESTful)

官方网站 : https://www.elastic.co/cn/
参考手册: https://www.elastic.co/guide/ [英文最新版本]
中文社区: https://elasticsearch.cn/
中文文档: https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html [ElasticSearch 2.0]

什么是Lucene?

  • Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,是最先进、高性能、全功能的搜索引擎库,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎.

  • Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API

  • Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:

    • 一个分布式的实时文档存储,每个字段 可以被索引与搜索

    • 一个分布式实时分析搜索引擎

    • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

ElasticSearch 基本概念

  1. 正排索引
    对文档进行排序,然后搜索需要的内容
  2. 倒排索引
    对正排索引的文档进行分词,分成不重复的索引列表,然后计算每个分词在正排索引的每个key(id)中出现次数
    • 关系型数据库通过增加一个 索引 比如一个 唯一索引 到指定的列上,以便提升数据检索速度。Elasticsearch 和 Lucene 使用了一个叫做 倒排索引 的结构来达到相同的目的,快速的全文搜索
    • 倒排索引过程
      企业微信截图_16347238757990.png
  3. 节点
    一个运行中的 Elasticsearch 实例称为一个节点
  4. 空集群
    启动了一个单独的节点,里面不包含任何的数据和索引,包含空内容节点的集群
  5. 集群
    集群是一个或多个运行elasticsearch实例的集合,它们共同保存整个数据,它们共同承担数据和负载的压力,并提供跨所有节点的联合索引和搜索功能。当一个节点被选举成为 主 节点时, 它将负责管理集群范围内的所有变更。主节点并不需要涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。 任何节点都可以成为主节点。
    • 集群的三个状态
      创建一个的索引之后,或者集群有问题时,集群会呈现三个健康状态
    • 三种状态的含义
      1. green
        所有的主分片和副本分片都正常运行
      2. yellow
        所有的主分片都正常运行,但不是所有的副本分片都正常运行
      3. red
        有部分主分片没能正常运行
    • 集群状态查看
      url -s 192.168.0.1:9200/_cluster/health?pretty
    • 作为用户,我们可以将请求发送到 集群中的任何节点 ,包括主节点。 每个节点都知道任意文档所处的位置,并且能够将我们的请求直接转发到存储我们所需文档的节点。 无论我们将请求发送到哪个节点,它都能负责从各个包含我们所需文档的节点收集回数据,并将最终结果返回給客户端。 Elasticsearch 对这一切的管理都是透明的
  6. 分片
    一个 分片 是一个底层的 工作单元 ,它仅保存了全部数据中的一部分,一个分片是一个 Lucene 的实例,以及它本身就是一个完整的搜索引擎。 我们的文档被存储和索引到分片内,但是应用程序是直接与索引而不是与分片进行交互的。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。一个分片可以是 主 分片或者 副本 分片。 索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量
  7. 副本
    一个副本分片只是一个主分片的拷贝。副本分片作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务,提升吞吐量和性能
  8. 索引
    保存相关数据的地方。 索引实际上是指向一个或者多个物理 分片 的 逻辑命名空间

ElasticSearch部署及配置

下载

  • 版本下载:https://www.elastic.co/cn/start

  • 在线文档:https://www.elastic.co/guide/index.html

  • 本次版本:

    • elasticsearch-6.8.0.tar.gz

安装

  1. 安装前环境设置
  • 创建用于启动ElasticSearch的普通用户
  • JAVA的家目录配置到环境变量或ES的启动脚本中
  • 更改文件描述符限制
 vim /etc/security/limits.conf
  * soft nproc 65536
  * hard nproc 65536
  * soft nofile 65536
  * hard nofile 65536
  • 非root用户的最大进程数
  vim /etc/security/limits.d/20-nproc.conf
  删除 非root 开始的一行,或者修改为:
  user       soft    nproc     unlimited
  • 设置虚拟内存
vim /etc/sysctl.conf
vm.max_map_count=262144
  • 禁用swap或少用swap
内存使用到多少开始使用swap? 
vm.swappiness  由这个内核参数控制 
/proc/sys/vm/swappiness 这个是可以直接修改立即生效 
这个交换参数控制内核从物理内存移出数据移到交换空间。
该参数从0到100 
当该参数为 0:表示只要有可能就尽力避免交换进程移出物理内存
当该参数为 100:这告诉内核疯狂的将数据移出物理内存移到swap缓存中 
设置 vm.swappiness=0  并不代表禁用swap分区,只是告诉内核,能少用到swap分区就尽量少用到
设置 vm.swappiness=100 则表示尽量使用swap分区
默认的值是 vm.swappiness=60 
调整内存参数,当内存使用率不足10%(开始是默认值60)时在使用swap,尽量避免使用swap,减少唤醒软中断进程,从而降低ksoftirqd进程对cpu的占用 
  1. 安装方式
    • rpm 包安装----忽略
    • tar包安装【开箱即用】
      • wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.0.tar.gz

      • tar -xzf elasticsearch-6.8.0.tar.gz

      • mkdir /data/es6 –p # 非必要,创建后需要修改配置文件 config/elasticsearch.yml

      • mkdir /data/logs/es6 –p # 非必要,创建后需要修改配置文件 config/elasticsearch.yml

      • chown -R elasticsearch:elasticsearch /data # 非必要, 创建后需要修改为ES启动用户的权限

      • chown -R elasticsearch:elasticsearch /opt/elasticsearch-6.8.0

      • su - elasticsearch -s /bin/bash -c ‘/opt/elasticsearch-6.8.0/bin/elasticsearch -d’

问题总结

问题1
  JavaHotSpot(TM) 64-Bit Server VM warning: INFO: error='Cannotallocate memory' (errno=12)
解决:
  在测试时常遇到,内存不足,更改config目录下的jvm.options,默认为2g

为题2
  max virtual memory areas vm.max_map_count [65530]is too low, increase to at least [262144]
解决:
  max_map_count 文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量,系统默认是65530,修改成262144。
  解决方法是修改/etc/sysctl.conf配置文件,添加vm.max_map_count=262144
  原因:最大虚拟内存太小 
  解决方案:
    切换到root用户下,修改配置文件sysctl.conf
	sudo vim /etc/sysctl.conf
    添加下面配置: 
	vm.max_map_count=65536
    并执行命令: 
	sysctl -p 

问题3
  max file descriptors [65535] for elasticsearchprocess is too low, increase to at least [65536]
解决:
  最大文件描述符,设置其大于65536即可
  解决方法:
    切换到root用户下,修改/etc/security/limits.conf文件
    将数字修改为65536

问题4
  
解决:
  原因
    无法创建本地线程问题,用户最大可创建线程数太小 
  解决方案
    切换到root用户,进入limits.d目录下,修改90-nproc.conf 配置文件
	sudo vim /etc/security/limits.d/90-nproc.conf
    找到如下内容: 
	* soft nproc 1024
    修改为 
	* soft nproc 65536

问题5
  uncaught exception in thread [main].  org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
解决:
  使用普通用户启动,不能以root用户启动
  解决方案:
    切换到普通用或es启动的用户
      su - esuser
    进入到elasticsearch的安装目录的bin下
      ./elasticsearch -d
  
问题6
  ERROR: bootstrap checks failed.  memory locking requested for elasticsearch process but memory is not locked
解决:
  原因:锁定内存失败
  解决办法
	sudo vim /etc/security/limits.conf
  添加如下内容: 
	* soft memlock unlimited 
	* hard memlock unlimited 
  临时取消限制 
	ulimit -l unlimited

简单配置

cluster.name:elasticsearch 	#集群的名称,同一个集群该值必须设置成相同的
node.name:"es-node1" 		#该节点的名字
node.master:true 		#该节点有机会成为master节点
node.data:true 		        #该节点可以存储数据
index.number_of_shards:5 	#shard的数目 默认为5个,可以不用设置
index.number_of_replicas:3 	#数据副本的数目 默认为1个,根据需要进行配置,可以不配置
network.bind_host:0.0.0.0 	#设置绑定的IP地址,可以是IPV4或者IPV6
network.publish_host:10.0.0.209  #设置其他节点与该节点交互的IP地址
network.host:10.0.0.209 	        #该参数用于同时设置bind_host和publish_host
transport.tcp.port:9300 	        #设置节点之间交互的端口号
transport.tcp.compress:true 	#设置是否压缩tcp上交互传输的数据
http.port:9200		 	#设置对外服务的http端口号

http.max_content_length:100mb 	
#设置http内容的最大大小[非必要]
http.enabled:true 		
#是否开启http服务对外提供服务
discovery.zen.minimum_master_nodes:2 	
# 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)【计算方法:node.master这个配置为true的节点个数/2 +1】
discovery.zen.ping.timeout:120s 		
#设置集群中自动发现其他节点时ping连接的超时时间
discovery.zen.ping.multicast.enabled:true 
#设置是否打开多播发现节点
discovery.zen.ping.unicast.hosts:["10.0.0.209:9300","10.0.0.206:9300","10.0.0.208:9300"] 	
path.logs: /mnt/proxy/elasticsearch02/logs  		
#日志存放路径
path.data: /mnt/proxy/elasticsearch02/data  	
# 若为数据节点即node.data:true,则配置为数据存放路径。若node.data:false,则不必配置,多个数据路径可以使用逗号分隔开

http basic 配置

  • 将以下配置添加到elasticsearch.yml中
http.basic.enabled:    true
http.basic.user:       "klpeng"
http.basic.password:   "www.ligphp.com"
http.basic.ipwhitelist:["localhost", "127.0.0.1"]
http.basic.log:        false
  • 对应配置项和注释
    1634882573(1).png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值