美文网首页
Elasticsearch服务搭建实践

Elasticsearch服务搭建实践

作者: 聂云⻜ | 来源:发表于2019-07-27 01:44 被阅读0次

一,背景

1,什么是ES(WHAT)

Elasticsearch是一个分布式可扩展的实时搜索和分析引擎。

通过Lucene的倒排索引技术实现比关系型数据库更快的过滤,采用分词技术并支持高亮显示,是当前流行的企业级搜索解决方案。

2,为什么用ES (WHY)

Elasticsearch可以解决的痛点:

  • 数据检索响应速度慢

随着业务发展,数据量攀涨到千万级别以上,查询必然会遇到瓶颈,ES利用倒排索引技术,可以实现毫秒级检索,是提升查询速度的利器。

  • 检索数据的匹配不完全

目前MYSQL模糊检索主要是通过LIKE关键字匹配,这种方式的实现,在一定程度上会减少用户检索的数据获取量,尤其是商品检索,可能因此就损失一些成交额。

以搜索 零基础 关键词为例:

序号 常规SQL 匹配不到 索引使用 检索速度
1 %零基础 零基础 快速入门短视频 失效
2 零基础% 「新品」《14天 零基础 公众号速成》 正常
2 %零基础% 0基础 快速入门Elasticsearch 失效

另外主要优点如下:

  1. 易于部署
  2. 方便横向扩容,无需额外的软件即可扩展到数百个节点,处理PB级别的数据量
  3. 支持丰富的插件,内置RESTful API,开箱即用
  4. 开源,更新快,生态圈丰富,社区活跃

3,ES怎么用 (HOW)

常规套件ELK:elasticsearch + logstash + kibana

Elasticsearch

基于JSON的分布式搜索和分析引擎,专为实现水平可扩展性、高可靠性和管理便捷性而设计,本次主要用来对数据进行搜索和存储。官网介绍:https://www.elastic.co/cn/products/elasticsearch

Logstash

作为ES常用的实时数据采集引擎,可以采集来自不同数据源的数据,并对数据进行处理后输出到多种输出源,本次主要用来做从MYSQL到ES的数据导入。官网介绍: https://www.elastic.co/cn/products/logstash

Kibana

能够以图表的形式呈现数据,来搜索查看,并和存储在Elasticsearch索引中的数据进行交互,本次主要用来做数据可视化和服务监控。官网介绍:https://www.elastic.co/cn/products/kibana

二,服务部署

环境要求

  • Linux
  • JDK(1.8以上,推荐1.8)
  • Node

1. 安装elasticsearch

版本选型:因为之前安装的官方PHP客户端Elasticsearch-PHP的最新版为6.7.X,6.8版本测试尚可使用,且6.8可以免费使用XPACK服务,故采用6.8版本

下载地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-0

ES的各产品链接后缀为产品+版本号,例如elasticsearch + 6-8-0

配置elasticsearch.yml:

cluster.name: elastic-alpha
node.name: node-1
network.host: *** ES HOST ***
http.port: 9200

# 配合elasticsearch-head
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,Content-Type

# Fix low disk watermark [85%]
cluster.routing.allocation.disk.threshold_enabled: false

# x-pack
xpack.security.transport.ssl.enabled: true
xpack.security.enabled: true
xpack.monitoring.enabled: true

启动脚本

#!/bin/sh
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.x86_64/
export JAVA_BIN=/usr/java/jdk1.8.0_112/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH

case "$1” in
    start)
        su lyt<<!
        cd /usr/local/bin/es/v6.8.0/elasticsearch
        ./bin/elasticsearch -d
        !
        echo "elasticsearch startup"
        ;;
    stop)
        es_pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'`
        kill -9 $es_pid
        echo "elasticsearch stopped"
        ;;
    restart)
        es_pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'`
        kill -9 $es_pid
        echo "elasticsearch stopped"
        su lyt<<!
        cd /usr/local/bin/es/v6.8.0/elasticsearch
        ./bin/elasticsearch -d
        !
        echo "elasticsearch startup"
        ;;
    *)
    echo "start|stop|restart"
    ;;
esac
exit $?

操作指令:

service elasticsearch start/stop/restart

安装ES插件:

2. 安装logstash

作用:将MYSQL数据导入ES,支持增量和全量更新

下载地址:https://www.elastic.co/cn/downloads/past-releases/logstash-6-8-0

配置logstash.yml:

# XPACK
xpack.monitoring.elasticsearch.url: ["*** ES HOST ***"]
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: *** LOGSTASH USER ***
xpack.monitoring.elasticsearch.password: *** LOGSTASH PASSWD ***

数据导入配置,以测试表demo为例,创建demo.conf

input {
      stdin { }
      jdbc {
        jdbc_connection_string => "***DB INFO***"
        jdbc_user => "*** USER ***"
        jdbc_password => "*** PASSWD ***"
        jdbc_default_timezone => "Asia/Shanghai"
        jdbc_driver_library => "/usr/local/bin/es/v6.8.0/logstash/driver/mysql-connector-java-8.0.13.jar"
        jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
        jdbc_paging_enabled => "true"
        jdbc_page_size => "5000"
        codec => plain { charset => "UTF-8"}
        statement_filepath => "/usr/local/bin/es/v6.8.0/logstash/bin/demo.sql"
        schedule => "*/5 * * * *"
        use_column_value => true
        tracking_column => "updated_at"
        type => "doc"
     }
 }

filter {
    json {
        source => "message"
        remove_field => ["message"]
    }
}

output {
    elasticsearch {
        hosts => "*** ES HOST ***"
        index => "demo"
        user => *** ES USER ***
        password => *** ES PASSWD ***
        document_id => "%{uuid}"
    }

    stdout {
        codec => json_lines
    }
}

操作指令

nohup bin/logstash -f demo.conf &

安装插件

3. 安装kibana

下载地址:https://www.elastic.co/cn/downloads/past-releases/kibana-6-8-0

配置kibana.yml:

# kibana
server.port: 5601
server.host: “*** ES HOST ***"

# elasticsearch
elasticsearch.hosts: ["** ES HOST ****"]
elasticsearch.username: "*** ES USER ***"
elasticsearch.password: "*** ES PASSWD ***"

# i18n
i18n.locale: "zh-CN”

# xpack
xpack.security.enabled: true
xpack.monitoring.enabled: true

启动脚本

#!/bin/sh
KIBANA_BIN=/usr/local/bin/es/v6.8.0/kibana/bin
NAME=kibana
PID_FILE=/var/run/$NAME.pid
PATH=/bin:/usr/bin:/sbin:/usr/sbin:$KIBANA_BIN
DAEMON=$KIBANA_BIN/kibana
DESC="Kibana6"

if [ `id -u` -ne 0 ]; then
    echo "You need root privileges to run this script"
    exit 1
fi

. /lib/lsb/init-functions

if [ -r /etc/default/rcS ]; then
    . /etc/default/rcS
fi

case "$1" in
  start)
    log_daemon_msg "Starting $DESC"

    pid=`pidofproc -p $PID_FILE kibana`
    if [ -n "$pid" ] ; then
        log_begin_msg "Already running."
        log_end_msg 0
        exit 0
    fi

    # Start Daemon
    start-stop-daemon --start --pidfile "$PID_FILE" --make-pidfile --background --exec $DAEMON
    log_end_msg $?
    ;;
  stop)
    log_daemon_msg "Stopping $DESC"

    if [ -f "$PID_FILE" ]; then
        start-stop-daemon --stop --pidfile "$PID_FILE" \
            --retry=TERM/20/KILL/5 >/dev/null
        if [ $? -eq 1 ]; then
            log_progress_msg "$DESC is not running but pid file exists, cleaning up"
        elif [ $? -eq 3 ]; then
            PID="`cat $PID_FILE`"
            log_failure_msg "Failed to stop $DESC (pid $PID)"
            exit 1
        fi
        rm -f "$PID_FILE"
    else
        log_progress_msg "(not running)"
    fi
    log_end_msg 0
    ;;
  status)
    status_of_proc -p $PID_FILE kibana kibana && exit 0 || exit $?
    ;;
  restart|force-reload)
    if [ -f "$PID_FILE" ]; then
        $0 stop
        sleep 1
    fi
    $0 start
    ;;
  *)
    log_success_msg "Usage: $0 {start|stop|restart|force-reload|status}"
    exit 1
    ;;
esac
exit 0

操作指令

service kibana start/stop/restart/force-reload/status

至此ES6.8服务搭建完毕,7.X版本大同小异,主要是集成JDK不用单独安装

相关文章

网友评论

      本文标题:Elasticsearch服务搭建实践

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