美文网首页
04.ElasticSearch相关安装

04.ElasticSearch相关安装

作者: 哈哈大圣 | 来源:发表于2019-12-12 21:22 被阅读0次

ElasticSearch

一、概述

1). ES介绍

  1. 基于Lucene的搜索服务器。
  2. 提供分布式多用户能力的全文搜索引擎。
  3. 基于RESTful web接口
  4. Java开发,Apache许可条款下的开源产品。

2). 优点

  1. 扩展性好,可部署上百太服务器集群,处理PB级数据。
  2. 近试试的去索引数据、搜索数据。

3). 原理


ES倒排索引.png
  1. 将要搜索的文档内容分词,所有不重复的词组成分词列表。
  2. 将搜索的文档最终以Document方式存储起来。
  3. 每个词和document都有关联,可以使用相似性算法算出匹配度高的文档。
  4. 使用RESTful API 接口,json格式交互。

二、安装ES

1).安装ES

以6.2.1为例

  1. 新版jdk1.8以上。
  2. 支持tar、zip、rpm等多种方式安装。
  3. Win下开发环境建议使用ZIP方式安装,解压配置运行即可。
  4. docker即其他方式安装
  5. 下载Elasticsearch 6.2.1

2).安装路径介绍

  1. bin:脚本目录,包括:启动、停止等可执行脚本。
  2. config:配置文件目录。
  3. data:索引目录,存放索引文件的地方。
  4. logs:日志目录。
  5. modules:模块目录,包括了es的功能模块。
  6. plugins:插件目录,es支持插件机制。

3).配置文件

  1. ES的配置文件的地址根据安装形式的不同而不同
    1. 使用zip、tar安装,配置文件的地址在安装目录的config下。
    2. 使用RPM安装,配置文件在/etc/elasticsearch下。
    3. 使用MSI安装,配置文件的地址在安装目录的config下,并且会自动将config目录地址写入环境变量ES_PATH_CONF。

4).elasticsearch.yml

用于配置ElasticSearch运行参数

  1. 常用配置介绍 (utf-8编码)
cluster.name: xuecheng   # 配置集群名称,逻辑概念
node.name: xc_node_1     # 物理服务器节点名称,物理概念
network.host: 0.0.0.0    # 绑定主机的ip地址,设置为0.0.0.0表示可以绑定任何ip(实际以物理机ip为主),运行外网访问,生产环境建议设置为具体的ip
http.port: 9200          # 对外服务的http端口,默认为9200
transport.tcp.port: 9300 # 集群节点之间通信的端口
node.master: true        # 有资格选举为master节点
node.data: true          # 是否存储索引数据
discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301"] # 集群配置中master节点的初始化列表,由于支持弹性扩展,后期自动加入的节点会被自动发现
discovery.zen.minimum_master_nodes: 1  # 主节点数量的最少值:计算公式为 (master_eligible_nodes/2) + 1,比如有三个复合要求的主节点,这里就要设置为2
node.ingest: true  # 是否允许成为协调节点
bootstrap.memory_lock: false    # 设置为true可以锁住ES使用的内存,避免内存与swap分区交换数据
node.max_local_storage_nodes: 2 # 单机允许的最大存储节点数,生产环境建议设置为1,开发环境可设置多个

path.data: D:\elasticSearch\elasticsearch-01\data # 索引数据存储的位置,可以设置多个存储路径,逗号隔开
path.logs: D:\elasticSearch\elasticsearch-01\logs # 日志存储的位置

http.cors.enabled: true       # 开启跨域设置,允许跨域【header插件在node.js环境下运行,出现的跨域请求!】
http.cors.allow-origin: /.*/  # 开发环境下允许所用的不同域访问

# ~~~~~~~~~~~~~~~~~~~~其他配置~~~~~~~~~~~~~~~~~~~~
# path.conf: 设置配置文件的存储路径,tar或zip包安装默认在es根目录下的config文件夹,rpm安装默认在/etc/elasticsearch
# path.plugins: 设置插件的存放路径,默认是es根目录下的plugins文件夹
  1. 三个节点集群搭建配置案例
cluster.name: xuecheng
node.name: xc_node_1
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301"]
discovery.zen.minimum_master_nodes: 1
node.ingest: true
bootstrap.memory_lock: false
node.max_local_storage_nodes: 2
path.data: D:\elasticSearch\elasticsearch-01\data
path.logs: D:\elasticSearch\elasticsearch-01\logs
http.cors.enabled: true
http.cors.allow-origin: /.*/
cluster.name: xuecheng
node.name: xc_node_2
network.host: 0.0.0.0
http.port: 9201
transport.tcp.port: 9301
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301"]
discovery.zen.minimum_master_nodes: 1
node.ingest: true
bootstrap.memory_lock: false
node.max_local_storage_nodes: 2
path.data: D:\elasticSearch\elasticsearch-02\data
path.logs: D:\elasticSearch\elasticsearch-02\logs
http.cors.enabled: true
http.cors.allow-origin: /.*/
cluster.name: xuecheng
node.name: xc_node_3
network.host: 0.0.0.0
http.port: 9202
transport.tcp.port: 9302
node.master: false
node.data: true
discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301"]
discovery.zen.minimum_master_nodes: 1
node.ingest: true
bootstrap.memory_lock: false
node.max_local_storage_nodes: 2
path.data: D:\elasticSearch\elasticsearch-03\data
path.logs: D:\elasticSearch\elasticsearch-03\logs
http.cors.enabled: true
http.cors.allow-origin: /.*/
  1. jvm.options
    1. 在jvm.options中设置 -Xms-Xmx两个值设置为相等
    2. Xmx设置为不超过物理内存的一半。

用于配置ElasticSearch JVM设置最小及最大的堆内存大小

  1. log4j2.properties

用于配置ElasticSearch日志, ES使用log4j,注意日志级别的配置

  1. 系统配置

在linux上根据系统资源情况,可将每个进程最多允许打开的文件数设置大些。

su limit -n # 查询当前文件数

sudo su 
ulimit -n 65536
su elasticsearch
也可通过下边的方式修改文件进行持久设置
/etc/security/limits.conf
将下边的行加入此文件:

elasticsearch - nofile 65536

5).安装IK分词器

  1. 地址https://github.com/medcl/elasticsearch-analysis-ik

  2. 将解压的一堆文件放在ES安装根路径\plugins\ik

  3. ik的两种分词模式 analyzer

    • ik_max_word: 最细粒度拆分 【插入新文档是采用此方案】
    • ik_smart: 最粗粒度拆分 【搜索分词时采用此方案】
  4. 自定义词库(utf-8,注意不要恶心的utf-8 BOM ) plugins/ik/config下新建如下文件。

    • main.dic: 默认词库文件
    • my.dic: 自定义追加词库
    • stop.dic: 自定义停用词库,敏感词

自动词库每个单词以换行符分割

  1. 配置自定义词库IKAnalyzer.cfg.xml (相同的路径下)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>IK Analyzer 扩展配置</comment>
    <!--用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">my.dic</entry>
     <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords">stop.dic</entry>
    <!--用户可以在这里配置远程扩展字典 -->
    <!-- <entry key="remote_ext_dict">words_location</entry> -->
    <!--用户可以在这里配置远程扩展停止词字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

6).启动ES

  1. 进入bin目录,在cmd下运行:集群环境下要每个都单独启动。
elasticsearch.bat # linux下为 ./elasticsearch.sh

7).验证

  1. 浏览器输入:http://localhost:9200
  2. 显示结果如下(配置不同内容则不同)说明 ES启动成功:
{
  "name" : "xc_node_1",
  "cluster_name" : "xuecheng",
  "cluster_uuid" : "NbtaHIRSTiWXuJ6u0LJHlQ",
  "version" : {
    "number" : "6.2.1",
    "build_hash" : "7299dc3",
    "build_date" : "2018-02-07T19:34:26.990113Z",
    "build_snapshot" : false,
    "lucene_version" : "7.2.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

8). 集群管理

  1. 节点:每个服务器为一个节点(一个ES进程)
  2. 分片:每个分片为一个独立的lucene实例,保存了部分的索引等信息
  3. 副本:对提高分片的高可用性,与对应的分片存储在不同的服务器节点上
  4. 主节点:管理集群,增加. 移除节点等,主节点挂掉后会重新选举一个新的节点
node.master # 是否允许为主结点
node.data # 允许存储数据作为数据结点
node.ingest # 是否允许成为协调节点
  1. 集群的健康

二、head插件安装

1). 介绍

  1. head插件是ES的一个可视化管理插件,用来监视ES的状态,并通过head客户端和ES服务进行交互,比如创建映射、创建索引等。
  2. 项目地址
  3. 从ES6.0开始,head插件支持使得node.js运行

2). 安装。

  1. 安装node.js
  2. 下载head
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
  1. 访问http://localhost:9100/
  2. 注意elasticsearch.yml中要配置允许跨域访问。

三、安装Logstash6.2.1(与ES对应,可选)

1). 简介

  1. ES下的一款开源软件,能从多个来源采集数据,并发送到Elasticsearch中创建索引

2). 安装

  1. 安装ruby2.5环境:因为要使用logstash-input-jdbc
  2. 6.x需要手动安装
cd logstash-6.2.1/bin> .\logstash-plugin.bat install logstash-input-jdbc

3). 配置案例

  1. 创建mapping的模板文件 logstash-6.2.1/config/xc_course_templage.json,格式如下
{
   "mappings" : {
      "doc" : {
         "properties" : {
            "charge" : {
               "type" : "keyword"
            },
            "description" : {
               "analyzer" : "ik_max_word",
               "search_analyzer" : "ik_smart",
               "type" : "text"
            },
            ...
         }
      }
   },
   "template" : "xc_course"
}
  1. 配置 logstash-6.2.1/config/mysql.conf : logstash会根据此配置文件将MySQL中的数据向ES中写入索引
    • ES采用UTC时区,ES读取时间时让最后更新时间+8小时,见下方对应配置where timestamp > date_add(:sql_last_value,INTERVAL 8 HOUR)
    • logstash每之sing完成会在logstash-6.2.1/config/logstash_metadata记录执时间,下次以此时间为基准增量同步到索引库
# 配置输入数据源
input { 
    stdin {}
    jdbc {
        jdbc_connection_string => "jdbc:mysql://localhost:3306/xc_course?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC"
        
        # the user we wish to excute our statement as
        jdbc_user => "root"
        jdbc_password => abc123
        
        # the path to our downloaded jdbc driver  
        jdbc_driver_library => "D:/maven_repository_xuecheng/mysql/mysql-connector-java/5.1.41/mysql-connector-java-5.1.41.jar"
        
        # the name of the driver class for mysql
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_paging_enabled => "true"
        jdbc_page_size => "50000"
        
        #要执行的sql文件
        #statement_filepath => "/conf/course.sql"
        statement => "select * from course_pub where timestamp > date_add(:sql_last_value,INTERVAL 8 HOUR)"
        
        #定时配置
        schedule => "* * * * *"
        record_last_run => true
        last_run_metadata_path => "D:/elasticSearch/logstash-6.2.1/config/logstash_metadata"
    }
}

# 配置输出数据源
output {
    elasticsearch {
        #ES的ip地址和端口
        
        hosts => "localhost:9200"
        #hosts => ["localhost:9200","localhost:9201","localhost:9202"]
        
        #ES索引库名称
        index => "xc_course"
        document_id => "%{id}"
        document_type => "doc"
        template =>"D:/elasticSearch/logstash-6.2.1/config/xc_course_template.json"
        template_name =>"xc_course"
        template_overwrite =>"true"
    }
  
    # 日志输出
    stdout {
        codec => json_lines
    }
}
  1. 启动Logstash.bat
logstash-6.2.1\bin> .\logstash.bat -f ..\config\mysql.conf

相关文章

网友评论

      本文标题:04.ElasticSearch相关安装

      本文链接:https://www.haomeiwen.com/subject/niqxnctx.html