Elasticsearch 安装

Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎。


概念

功能

  • 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
  • 实时分析的分布式搜索引擎。
  • 可以扩展到上百台服务器,处理 PB 级别的结构化或非结构化数据。

基本概念

  • 集群(Cluster):ES 是一个分布式的搜索引擎,一般由多台物理机组成。这些物理机通过配置一个相同的 cluster name,互相发现,把自己组成一个集群。
  • 节点(Node):同一个集群中的一个 Elasticsearch 主机。
  • Master Node: 集群管理。
    • 控制 Elasticsearch 集群,并负责在集群范围内创建 / 删除索引,跟踪哪些节点是集群的一部分,并将分片分配给这些节点。主节点一次处理一个集群状态,并将状态广播到所有其它节点,这些节点需要响应并确认主节点的信息。
    • 在 Elasticsearch.yml 中,将 nodes.master 属性设置为 true(默认),可以将节点配置为有资格成为主节点的节点。
    • 对于大型生产集群,建议拥有一个专用主节点来控制集群,并且不服务任何用户请求。
  • Client Node: 处理转发客户端请求到 Data Node。
    • 如果将 node.master 和 node.data 设置为false,则将节点配置为客户端节点,并充当负载平衡器,将传入的请求路由到集群中的不同节点。
    • 若连接的是作为客户端的节点,该节点称为协调节点。协调节点将客户机请求路由到集群中对应分片所在的节点。对于读取请求,协调节点每次选择不同的分片来提供请求以平衡负载。
  • Data Node: 用来保存数据和倒排索引。默认情况下,每个节点都配置为一个 data 节点,并且在 elasticsearch.yml 中将属性 node.data 设置为 true。如果想要一个专用的master 节点,需将 node.data 属性更改为 false。
  • 主分片(Primary Shard):索引的一个物理子集。同一个索引在物理上可以切多个分片,分布到不同的节点上。分片的实现是 Lucene 中的索引。注:ES 中一个索引的分片个数是建立索引时就要指定的,建立后不可再改变。所以开始建立一个索引时,就要预计数据规模,将分片的个数分配在一个合理的范围。
  • 副本分片(Replica Shard):每个主分片可以有一个或多个副本,个数是用户自己配置的。ES 会尽量将同一索引的不同分片分布到不同的节点上,提高容错性。对一个索引,只要不是所有 Shards 所在的机器都挂了,就还能用。
  • 索引(Index):逻辑概念,一个可检索的文档对象的集合。类似于 DB 中的 Database 概念。同一个集群中可建立多个索引。比如,生产环境常见的一种方法,对每个月产生的数据建索引,以保证单个索引的量级可控。
  • 类型(Type):索引的下一级概念,大概相当于数据库中的 Table。同一个索引里可以包含多个 Type。
  • 文档(Document):即搜索引擎中的文档概念,也是 ES 中一个可以被检索的基本单位,相当于数据库中的 Row,一条记录。
  • 字段(Field):相当于数据库中的 Column。ES 中,每个文档是以 JSON 形式存储的,一个文档可以被视为多个字段的集合。
  • 映射(Mapping):相当于数据库中的 Schema,用来约束字段的类型,不过 ES 的 Mapping 可以不显示地指定、自动根据文档数据创建。

ES 与关系型数据库对比

| Relational Database | Elasticsearch |
| ———————- | ——————— |
| Database(数据库) | Index(索引库) |
| Table(表) | Type(类型) |
| Row(行) | Document(文档) |
| Column(列) | Field(字段) |
| Schema | Mapping |
| Index | Everything is indexed |
| SQL | Query DSL |
| SELECT * FROM TABLE… | GET http://… |
| UPDATE TABLE SET … | PUT http://… |


安装

系统环境准备

注:没有特殊说明,所有的指令在三台虚拟机中执行。

  • 1、系统配置

  • 三台初始状态虚拟机『caroly01』『caroly02』『caroly03』,系统版本为:『CentOS-6.8-x86_64』

  • 2、JDK 配置

  • rpm -i jdk-8u251-linux-x64.rpm
    vi /etc/profile +
    export JAVA_HOME=/usr/java/jdk1.8.0_251-amd64
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    . /etc/profile
    
  • 3、解压工具安装

  • yum install unzip
    
  • 4、创建用户

  • useradd caroly
    passwd caroly
    
  • 5、创建目录

  • mkdir -p /opt/caroly/es
    
  • chown caroly:caroly /opt/caroly/es
    

Elasticsearch 安装

注:只允许普通用户操作,不允许 root 用户

因为 elasticsearch 有远程执行脚本的功能所以容易中木马病毒,所以不允许使用 root 用户启动,root 用户是起不来的。赋权限,用一般的用户启动。

  • 1、切换用户

  • su caroly
    
  • 2、解压(『caroly01』)

  • unzip elasticsearch-2.2.1.zip -d /opt/caroly/es/
    
  • 3、修改配置文件(『caroly01』)

  • cd /opt/caroly/es/elasticsearch-2.2.1/config
    
  • vi elasticsearch.yml
    
  • 修改如下行号的配置:nodename 随意取但是集群内的各节点不能相同。

    • change 17: cluster.name: caroly-es
      change 23: node.name: caroly01
      change 54: network.host: 192.168.240.151
      change 58: http.port: 9200
      
  • 末尾增加防脑裂:如果不配不知道具体数量,不好控制脑裂

    • discovery.zen.ping.multicast.enabled: false 
      discovery.zen.ping.unicast.hosts: ["192.168.240.151","192.168.240.152", "192.168.240.153"]
      discovery.zen.ping_timeout: 120s
      client.transport.ping_timeout: 60s
      
  • 添加 head 插件(『caroly01』):ES 是 rest 方式,采用 Json 格式,可读性不强,添加 head 插件,以图表方式显示

  • su 
    
  • cd/opt/caroly/es/elasticsearch-2.2.1
    
  • chown caroly:caroly -R plugins/
    
  • su caroly
    
  • 添加分词器插件(『caroly01』)

  • cd /opt/caroly/es/elasticsearch-2.2.1/plugins
    
  • mkdir ik
    cd ik
    
  • unzip elasticsearch-analysis-ik-1.8.0.zip
    
  • rm -rf elasticsearch-analysis-ik-1.8.0.zip
    
  • vi plugin-descriptor.properties +
    
  • 修改如下行号信息:ES 版本要对应,不然启动不了

    • change 64: java.version=1.8
      change 71: elasticsearch.version=2.2.1
      
  • 分发 ES(『caroly01』)

  • cd /opt/caroly/es/
    
  • scp -r elasticsearch-2.2.1/ caroly@caroly02:`pwd`
    
  • scp -r elasticsearch-2.2.1/ caroly@caroly03:`pwd`
    
  • 修改配置文件(『caroly02』)

  • su caroly
    
  • vi /opt/caroly/es/elasticsearch-2.2.1/config/elasticsearch.yml
    
  • 修改如下行号的配置:

    • change 23 node.name: caroly02
      change 54 network.host: 192.168.240.152
      
  • 修改配置文件(『caroly02』)

  • su caroly
    
  • vi /opt/caroly/es/elasticsearch-2.2.1/config/elasticsearch.yml
    
  • 修改如下行号的配置:

    • change 23 node.name: caroly03
      change 54 network.host: 192.168.240.153
      
  • 启动

  • cd /opt/caroly/es/elasticsearch-2.2.1/bin
    
  • ./elasticsearch
    
  • 访问(『caroly01』)

  • ss -nal
    
  • 浏览器中访问:

    • caroly01:9200
      
    • caroly01:9200/_plugin/head/