Elasticsearch服務(wù)搭建實(shí)踐

一扫腺,背景

1,什么是ES(WHAT)

Elasticsearch是一個(gè)分布式可擴(kuò)展的實(shí)時(shí)搜索和分析引擎虏缸。

通過(guò)Lucene的倒排索引技術(shù)實(shí)現(xiàn)比關(guān)系型數(shù)據(jù)庫(kù)更快的過(guò)濾沧卢,采用分詞技術(shù)并支持高亮顯示蚁堤,是當(dāng)前流行的企業(yè)級(jí)搜索解決方案。

2但狭,為什么用ES (WHY)

Elasticsearch可以解決的痛點(diǎn):

  • 數(shù)據(jù)檢索響應(yīng)速度慢

隨著業(yè)務(wù)發(fā)展披诗,數(shù)據(jù)量攀漲到千萬(wàn)級(jí)別以上,查詢必然會(huì)遇到瓶頸立磁,ES利用倒排索引技術(shù)呈队,可以實(shí)現(xiàn)毫秒級(jí)檢索,是提升查詢速度的利器唱歧。

  • 檢索數(shù)據(jù)的匹配不完全

目前MYSQL模糊檢索主要是通過(guò)LIKE關(guān)鍵字匹配宪摧,這種方式的實(shí)現(xiàn),在一定程度上會(huì)減少用戶檢索的數(shù)據(jù)獲取量颅崩,尤其是商品檢索几于,可能因此就損失一些成交額。

以搜索 零基礎(chǔ) 關(guān)鍵詞為例:

序號(hào) 常規(guī)SQL 匹配不到 索引使用 檢索速度
1 %零基礎(chǔ) 零基礎(chǔ) 快速入門(mén)短視頻 失效
2 零基礎(chǔ)% 「新品」《14天 零基礎(chǔ) 公眾號(hào)速成》 正常
2 %零基礎(chǔ)% 0基礎(chǔ) 快速入門(mén)Elasticsearch 失效

另外主要優(yōu)點(diǎn)如下:

  1. 易于部署
  2. 方便橫向擴(kuò)容沿后,無(wú)需額外的軟件即可擴(kuò)展到數(shù)百個(gè)節(jié)點(diǎn)沿彭,處理PB級(jí)別的數(shù)據(jù)量
  3. 支持豐富的插件,內(nèi)置RESTful API得运,開(kāi)箱即用
  4. 開(kāi)源膝蜈,更新快锅移,生態(tài)圈豐富熔掺,社區(qū)活躍

3,ES怎么用 (HOW)

常規(guī)套件ELK:elasticsearch + logstash + kibana

Elasticsearch

基于JSON的分布式搜索和分析引擎非剃,專為實(shí)現(xiàn)水平可擴(kuò)展性置逻、高可靠性和管理便捷性而設(shè)計(jì),本次主要用來(lái)對(duì)數(shù)據(jù)進(jìn)行搜索和存儲(chǔ)备绽。官網(wǎng)介紹:https://www.elastic.co/cn/products/elasticsearch

Logstash

作為ES常用的實(shí)時(shí)數(shù)據(jù)采集引擎券坞,可以采集來(lái)自不同數(shù)據(jù)源的數(shù)據(jù)鬓催,并對(duì)數(shù)據(jù)進(jìn)行處理后輸出到多種輸出源,本次主要用來(lái)做從MYSQL到ES的數(shù)據(jù)導(dǎo)入恨锚。官網(wǎng)介紹: https://www.elastic.co/cn/products/logstash

Kibana

能夠以圖表的形式呈現(xiàn)數(shù)據(jù)宇驾,來(lái)搜索查看,并和存儲(chǔ)在Elasticsearch索引中的數(shù)據(jù)進(jìn)行交互猴伶,本次主要用來(lái)做數(shù)據(jù)可視化和服務(wù)監(jiān)控课舍。官網(wǎng)介紹:https://www.elastic.co/cn/products/kibana

二,服務(wù)部署

環(huán)境要求

  • Linux
  • JDK(1.8以上他挎,推薦1.8)
  • Node

1. 安裝elasticsearch

版本選型:因?yàn)橹鞍惭b的官方PHP客戶端Elasticsearch-PHP的最新版為6.7.X筝尾,6.8版本測(cè)試尚可使用,且6.8可以免費(fèi)使用XPACK服務(wù)办桨,故采用6.8版本

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

ES的各產(chǎn)品鏈接后綴為產(chǎn)品+版本號(hào)筹淫,例如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

啟動(dòng)腳本

#!/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數(shù)據(jù)導(dǎo)入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 ***

數(shù)據(jù)導(dǎo)入配置呢撞,以測(cè)試表demo為例损姜,創(chuàng)建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

啟動(dòng)腳本

#!/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服務(wù)搭建完畢,7.X版本大同小異狸相,主要是集成JDK不用單獨(dú)安裝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末薛匪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子脓鹃,更是在濱河造成了極大的恐慌逸尖,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘸右,死亡現(xiàn)場(chǎng)離奇詭異娇跟,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)太颤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)苞俘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人龄章,你說(shuō)我怎么就攤上這事吃谣。” “怎么了做裙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵岗憋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我锚贱,道長(zhǎng)仔戈,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮监徘,結(jié)果婚禮上晋修,老公的妹妹穿的比我還像新娘。我一直安慰自己凰盔,他們只是感情好墓卦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著户敬,像睡著了一般趴拧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上山叮,一...
    開(kāi)封第一講書(shū)人閱讀 51,198評(píng)論 1 299
  • 那天著榴,我揣著相機(jī)與錄音,去河邊找鬼屁倔。 笑死脑又,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锐借。 我是一名探鬼主播问麸,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钞翔!你這毒婦竟也來(lái)了严卖?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤布轿,失蹤者是張志新(化名)和其女友劉穎哮笆,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體汰扭,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稠肘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萝毛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片项阴。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖笆包,靈堂內(nèi)的尸體忽然破棺而出环揽,到底是詐尸還是另有隱情,我是刑警寧澤庵佣,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布歉胶,位于F島的核電站,受9級(jí)特大地震影響秧了,放射性物質(zhì)發(fā)生泄漏跨扮。R本人自食惡果不足惜序无,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一验毡、第九天 我趴在偏房一處隱蔽的房頂上張望衡创。 院中可真熱鬧,春花似錦晶通、人聲如沸璃氢。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)一也。三九已至,卻和暖如春喉脖,著一層夾襖步出監(jiān)牢的瞬間椰苟,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工树叽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舆蝴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓题诵,卻偏偏與公主長(zhǎng)得像洁仗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子性锭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354