Elasticsearch认识

认识

官网:链接

  • 全文搜索引擎,可视化不错

  • 海量日志存储,json数据结构,主要用于搜索

  • 适合做数据分析与查询,速度快过hbase(hbase稳定)

总结: 能够达到实时搜索(QUERY),分析(ANALYZE),可靠(stability),快速(SPEED),扩展(SCALABILITY)安装使用方便; 结合elastic其他系统与插件(ELK)可以很好搭建日志搜索分析系统

集群运作:

Elasticsearch用于构建高可用和可扩展的系统。

方式:

1、购买更好的服务器(纵向扩展(vertical scale or scaling up))

2、购买更多的服务器(横向扩展(horizontal scale or scaling out))

正确选择为:横向扩展,通过增加节点来均摊负载和增加可靠性。

ELK

即 Elasticsearch、Logstash和Kibana

  • Logstash: 对你的日志进行收集、分析,并将其存储供以后使用

  • Kibana:提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志

配置

  • path.data and path.logs

默认:$ES_HOME 目录下的子目录,即分别为data and logs

可以显示指定:

path:
  logs: /data/elastic/es_data
  data: /data/elastic/es_logs

or

path.data: /data/elastic/es_data
path.logs: /data/elastic/es_logs

or data目录可以设置多个路径(数据存储在不同目录)

path:
  data:
    - /data/elastic/es_data1
    - /data/elastic/es_data2
    - /data/elastic/es_data3
  • cluster.name

默认:elasticsearch,可以设置为自己想要的字串。

一个node结点只能加入到一个设置有cluster.name值的一个集群中

  • node.name

默认:使用生成的uuid前7个字母组成的字串作为名字, 当你restart进程时,node.name不会重新生成,即它有忘记功能

你也可以设置为机器的hostname,或者自己设定一个有意义的名字

node.name:  ${HOSTNAME}
  • network.host

默认:绑定到127.0.0.1 and [::1], 当为集群模式时,这个需要绑定到各个nodes能连接上的ip上,或者hostname上

network.host: 10.1.1.185
  • discovery.zen.ping.unicast.hosts

ES通过UDP协议去发现节点,建议关闭multicast的自动发现节点机制,上面的配置主要一个是禁用multicast,一个是写出需要尝试连接的节点,如果有专门的master节点可以配置成master节点。

默认:是单机集群时,它会检测本机上端口9300 to 9305 的其他结点。

而线上集群需要指定其他结点的ip或者域名

discovery.zen.ping.unicast.hosts:
   - 10.1.1.198:9300
   - 10.1.1.196 
   - datanode197 

# 再如完全指定
 ["namenode:9300", "datanode200:9300", "datanode201:9300"]

1、没有设定端口的使用transport.profiles.default.port 及后备端口 transport.tcp.port 2、使用hostname做为集群ip,当解析为多个ip时,会尝试各个ip

  • discovery.zen.minimum_master_nodes

指示某个集群定额所需的 Process Federation Server 的数量。一个集群中主节点的数量,当多于三个节点时,该值可在2-4之间

缺省值为 1 表示单服务器环境。对于生产环境,请将该值设置为组成定额所需的 Process Federation Server 的数量。

计算公式: total number of master-eligible nodes / 2 + 1

例如,如果在集群中总计有三个 Process Federation Server,请将该值设置为“2”,如果在集群中总计有五个 Process Federation Server,请将该值设置为“3”。

  • 避免脑裂现象

  • gateway.recover_after_nodes

这个设置主要防止不必要的数据处理,比如一个集群全部重启,然后有一个机器起的比较慢,然后机器就会组成集群,选出master,然后从备份中恢复出故障集群的数据。

集群此时恢复正常。

然后起的慢的机器又重启成功了,又会把数据同步到这台机器上并删除冗余数据。这项配置决定直到第n个节点可用才可以进行恢复操作

  • bootstrap.memory_lock

此参数设置为true时,用于锁住内存。

因为当jvm开始swapping时es的效率会降低,所以要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。

elasticsearch数据架构

索引

你可以把索引看成关系型数据库的表, 也可以看成MongoDB里的一个集合。

Elasticsearch可以把索引存放在一台机器或者分散在多台服务器上,每个索引有一或多个分片(shard),每个分片可以有多个副本(replica)。

文档

  • 存储在Elasticsearch中的主要实体叫文档(document)。

  • 一个文档相当于关系数据库表中的一行记录。

  • 文档由多个字段组成,每个字段可能多次出现在一个文档里,这样的字段叫多值字段(multivalued)。

  • 文档不需要有固定的结构,每个文档可以有不同的字段

  • 文档是一个JSON对象,每个文档存储在一个索引中并有一个Elasticsearch自动生成的唯一标识符和文档类型。

文档类型

  • 用于区分单个索引中的不同对象,对数据操作有很大帮助

  • 不同的文档类型不能为相同的属性设置不同的类型。