Elasticsearch的安装及使用,这一篇就够了


一、ES介绍

  Elasticsearch是一个基于Apache Lucene的开源搜索引擎。Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 特点: 分布式的实时文件存储,每个字段都被索引并可被搜索 分布式的实时分析搜索引擎–做不规则查询 可以扩展到上百台服务器,处理PB级结构化或非结构化数据 Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

二、单体ES安装

1.ES下载

ES官网:ElasticSearch官网

2.安装

1.上传后解压

在这里插入图片描述
解压命令:tar -zxvf elasticsearch-7.4.2-linux-x86_64.tar.gz

移动解压后的文件到/usr/local/目录下:mv elasticsearch-7.4.2 /usr/local/
在这里插入图片描述

2.ES目录介绍

在这里插入图片描述

  • bin:可执行文件在里面,运行es的命令就在这个里面,包
    含了一些脚本文件等
  • config:配置文件目录
  • jdk:java环境
  • lib:依赖的jar,类库
  • logs:日志文件
  • modules:es相关的模块
  • plugins:可以自己开发的插件
  • data:这个目录没有,自己新建一下,后面要用->mkdir data,这个作为索引目录

3.修改核心配置文件elasticearch.yml

  • 修改集群名称,默认是elasticsearch,虽然目前是单机,但
    是也会有默认的

  • 为当前的s节点取个名称,名称随意,如果在集群环境中,
    都要有相应的名字
    vim config/elasticsearch.yml
    在这里插入图片描述

  • 修改data数据保存地址

  • 修改日志数据保存地址
    /usr/local/elasticsearch-7.4.2/data
    /usr/local/elasticsearch-7.4.2/logs
    在这里插入图片描述

  • 绑定es网络ip,原理同redis

  • 默认端口号,可以自定义修改

  • 集群节点,名字可以先改成之前的那个节点名称
    在这里插入图片描述

4.修改JVM参数

在这里插入图片描述
在这里插入图片描述

默认xms和xmx都是1g,虚拟机内存没这么大,修改一下即可,线上环境内存大可以不修改!

5.添加用户

ES不允许使用root操作es,需要添加用户,操作如下:

#添加用户
useradd esuser
#授权
chown -R esuser:esuser /usr/local/elasticsearch-7.4.2
su esuser
whoami

6.启动ES

./elasticsearch
如果出现如下错误:
在这里插入图片描述
那么需要切换到oot用户下去修改配置如下:
vim /etc/security/limits.conf

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

在这里插入图片描述

vim /etc/sysctl.conf

vm.max_map_count=262145

在这里插入图片描述

别忘记sysctl -p刷新一下
最后再次启动OK

7.测试

访问你的虚拟机ip+端口号9200,如下则表示OK
在这里插入图片描述
停止es
如果是前台启动,直接ctrl+c就可以停止
后台启动:
./elasticsearch -d
停止杀进程:
jps
kill+进程号
在这里插入图片描述

端口号意义

  • 9200:Http协议,用于外部通讯
  • 9300:Tcp协议,ES集群之间是通过9300通讯

三、Elasticsearch 集群构建

1. 先进行克隆三台服务器

在这里插入图片描述

2. 搭建es集群

环境准备

HOSTNAME IP
es01 192.168.92.110
es02 192.168.92.111
es03 192.168.92.112

2.1 分别对三台服务器(es01, es02, es03 )做如下操作

进入es的data目录下, 删除nodes数据
cd /usr/local/elasticsearch-7.4.2/data
rm nodes/ -rf
在这里插入图片描述

2.2 操作三台服务器(es01, es02, es03 节点)

操作config文件, 修改ES核心配置文件中的cluster的name值为同一个

  1. 即修改cluster.name为: my-application
  2. 分别修改 node.name为:es-node1, es-node2, es-node3
    vim /usr/local/elasticsearch-7.4.2/config/elasticsearch.yml
    在这里插入图片描述
  3. 三台都开启master, data
    master: 表示在未来可以成为master节点
    data: 用来存储文档数据
node.master: true
node.data: true
  1. 三台都进行配置节点信息.
    discovery.seed_hosts: ["192.168.92.110", "192.168.92.111","192.168.92.112"]
    在这里插入图片描述

2.3 查看配置信息

  1. cd /usr/local/elasticsearch-7.4.2/config/
  2. more elasticsearch.yml | grep ^[^#]
    在这里插入图片描述

2.4 启动ES集群

分别进入用户 esuser
su esuser
./usr/local/elasticsearch-7.4.2/bin/elasticsearch
在这里插入图片描述

2.5 测试ES集群

在这里插入图片描述

四、ik中文分词器

安装ik

ik中文分词器和ES版本需要一致,安装方法一样

1. 安装ik中文分词器(6.4.3版本)

上传zip文件到我们的服务器
在这里插入图片描述

2. 解压并放在elasticsearch的plugins的ik文件夹下

yum install -y unzip zip 安装zip工具,已安装可跳过
unzip elasticsearch-analysis-ik-6.4.3.zip -d /usr/local/elasticsearch-6.4.3/plugins/ik
在这里插入图片描述

3.进入ES的ik目录下

cd /usr/local/elasticsearch-6.4.3/plugins/ik

4.重新启动ES

jps
kill ***
su esuser
cd /usr/local/elasticsearch-6.4.3/bin
./elasticsearch -d

使用ik中文分词器

2.1 分词器: ik_max_word

此分词器会将文本进行最细粒度的拆分, 比如将"中华人民共和国国歌"
拆分为"中华人民共和国",“中华人民”,“中华”,“华人”,“人民共和国”,“人民”,“人”,“民”,“共和国”,“共和”,“和”,“国国”,“国歌”
在这里插入图片描述

2.1 分词器: ik_smart

此分词器会将文本进行最粗粒度的拆分.

在这里插入图片描述

五、logstash 数据同步

1. logstash 简介

Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地。
Logstash是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换,然后将其发送到你最喜欢的“存储”。(当然,最喜欢的是Elasticsearch)

数据采集: 可以从数据库中采集到 Elasticsearch
以 自增id(不建议, 会无法识别修改的数据) 或者 update_time 作为同步的边界
可以通过新版 Elasticsearch 所集成的插件 logstash-input-jdbc 直接使用
使用logstash时候要与 Elasticsearch 的版本号保持一致

2. logstash 安装

2.1 (前提是安装好jdk)上传logstash, mysql驱动

在这里插入图片描述

2.2 logstash 同步配置

  1. 解压logstash: tar -zxvf logstash-6.4.3.tar.gz

  2. 移动 logstash: mv logstash-6.4.3 /usr/local/

  3. 进入该目录: cd /usr/local/logstash-6.4.3/

  4. 创建文件夹sync, 将相关的同步配置放在该文件夹下: mkdir sync

  5. 创建配置文件(后面会进行编辑, 这里进行创建): vim logstash-db-sync.conf
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/ea250304a4534c6a91697eb0ddcaf644.png

  6. 将数据库驱动进行拷贝到当前的目录下: cp /home/software/mysql-connector-java-5.1.41.jar .
    在这里插入图片描述

  7. 创建sql存储文件: foodie-items.sql

    SELECT
    		i.id AS itemId,
    		i.item_name AS itemName,
    		i.sell_counts AS sellCounts,
    		ii.url AS imgUrl,
    		tempSpec.price_discount AS price,
    		i.updated_time AS updated_time
    FROM items i
    LEFT JOIN
    		items_img ii
    ON
    		i.id = ii.item_id
    LEFT JOIN
    		 (SELECT item_id,MIN(price_discount) as price_discount
    				FROM items_spec
    				GROUP BY item_id
    		 ) tempSpec
    ON i.id = tempSpec.item_id
    WHERE
    		ii.is_main = 1
    		AND 
    		i.updated_time >= :sql_last_value
    
    
  8. 进行修改配置文件 logstash-db-sync.conf: vim logstash-db-sync.conf

input {
    
    
    jdbc {
    
    
        # 设置 MySql/MariaDB 数据库url以及数据库名称
        jdbc_connection_string => "jdbc:mysql://192.168.92.110:3306/foodie-shop-dev?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true"
        # 用户名和密码
        jdbc_user => "root"
        jdbc_password => "root"
        # 数据库驱动所在位置,可以是绝对路径或者相对路径
        jdbc_driver_library => "/usr/local/logstash-6.4.3/sync/mysql-connector-java-5.1.41.jar"
        # 驱动类名
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        # 开启分页
        jdbc_paging_enabled => "true"
        # 分页每页数量,可以自定义
        jdbc_page_size => "1000"
        # 执行的sql文件路径
        statement_filepath => "/usr/local/logstash-6.4.3/sync/foodie-items.sql"
        # 设置定时任务间隔  含义:分、时、天、月、年,全部为*默认含义为每分钟跑一次任务
        schedule => "* * * * *"
        # 索引类型
        type => "_doc"
        # 是否开启记录上次追踪的结果,也就是上次更新的时间,这个会记录到 last_run_metadata_path 的文件
        use_column_value => true
        # 记录上一次追踪的结果值
        last_run_metadata_path => "/usr/local/logstash-6.4.3/sync/track_time"
        # 如果 use_column_value 为true, 配置本参数,追踪的 column 名,可以是自增id或者时间
        tracking_column => "updated_time"
        # tracking_column 对应字段的类型
        tracking_column_type => "timestamp"
        # 是否清除 last_run_metadata_path 的记录,true则每次都从头开始查询所有的数据库记录
        clean_run => false
        # 数据库字段名称大写转小写
        lowercase_column_names => false
    }
}
output {
    
    
    elasticsearch {
    
    
        # es地址
        hosts => ["192.168.92.110:9200"]
        # 同步的索引名
        index => "foodie-items"
        # 设置_docID和数据库中的id保持相同
        document_id => "%{id}"
        # document_id => "%{itemId}"
    }
    # 日志输出
    stdout {
    
    
        codec => json_lines
    }
}

2.3 启动logstash

进入bin目录: cd /usr/local/logstash-6.4.3/bin

启动logstash: ./logstash -f /usr/local/logstash-6.4.3/sync/logstash-db-sync.conf
后台启动:nohup ./logstash -f /usr/local/logstash-6.4.3/sync/logstash-db-sync.conf > logstash.log 2>&1 &
在这里插入图片描述

在这里插入图片描述

logstash 只对新增和修改的数据可以进行同步, 而对于数据库中删除的数据是不会进行同步到es中的.
所以数据库中删除的数据, 它在es中只是通过更新时间的方式进行逻辑上的删除.

六.安装 ElasticSearch 可视化插件: es-head

1. 下载并且解压es-header

es-header下载
在这里插入图片描述

2. 安装 node.js

node.js下载
下载完安装即可
在这里插入图片描述

3. 在node.js中执行以下命令

进入es-header目录(在目录按shift右击,打开powershell窗口)
npm install
在这里插入图片描述
npm run start
在这里插入图片描述

4. 设置跨域

访问http://localhost:9100/ 发现跨域
在这里插入图片描述

  • 进入 es 核心配置文件, elasticsearch.yml进行添加跨域配置如下
http.cors.enabled: true
http.cors.allow-origin: "*"

在这里插入图片描述

5. 测试

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38055805/article/details/128953343
今日推荐