天天看點

Elasticsearch叢集搭建、Kibana、head、IK實戰

一、概述

我們為什麼要安裝

ES

叢集?因為生産沒人用單機版本,單機版本那都是用來玩的“玩具”。本篇文章基于

Elasticsearch 7.X +CentOS 7.6

版本進行安裝(這裡勸誡大家不要再去學習

7.X

之前的版本了,這個版本對之前的版本進行了大改),通過本篇學習你能學到如何在

Linux

下安裝

ES

叢集,如何整合

IK

分詞器,如何整合

head

插件,如何整合

Kibana

用戶端等。

ES

java

開發的,在安裝確定

JDK

環境已經配置好了。今天的叢集網絡拓撲圖如下:

IP PORT
192.168.56.143 9200
192.168.56.144 9200
192.168.56.145 9200

二、叢集安裝

說明:這裡就以 192.168.56.143 安裝為例,其它兩個節點,隻要将 143 上的配置檔案修改後,通過 scp 傳過去進行簡單修改即可。
  • Linux 參數配置

    注意:Linux 核心參數的調整并不僅僅在 ES 的安裝過程中需要注意,其它中間件産品的安裝也同樣需要注意調整,例如:MySQL、Oracle、MQ 等
    修改每個程序最大同時打開檔案數、最大線程數:
    [[email protected] es]# vim /etc/security/limits.conf
    在最後添加如下内容(注意 es 表示你的使用者名,給哪一個使用者設定的意思):
    es soft nofile 65536  # es 使用者最大同時打開soft類型檔案數
    es hard nofile 65536 # es 使用者最大同時打開hard類型檔案數
    es soft nproc 4096  # es 使用者最大同時打開soft類型線程數
    es hard nproc 4096 # es 使用者最大同時打開hard類型線程數
               
    修改最大虛拟記憶體大小:
    [[email protected] es]# vim /etc/sysctl.conf
    # 增加如下:
    vm.max_map_count=262144
    # 修改完之後,執行如下指令生效
    [[email protected] es]# sysctl -p
               
  • 建立 es 使用者并授權

    7.X

    版本之後不允許使用

    root

    使用者啟動

    ES

    程序,是以需要建立專門使用者啟動

    ES

    程序的的使用者
    [[email protected] es]# groupadd es ## 建立 es 使用者組
    [[email protected] es]#  useradd -m -g es es ## 建立使用者名為
    [[email protected] es]#  passwd es  ## 設定 es 使用者的密碼
    [[email protected] es]#   visudo  ## 配置 es 使用者的sudo 權限在打開的編輯配置中,添加 es	ALL=(ALL)	NOPASSWD:ALL 這行内容 (表示通過es 使用者啟動的程序時候,授予root的權限,注意:在安裝其他中間件時也要習慣用非root使用者作為管理使用者)
               
  • 下載下傳安裝包并解壓

    下載下傳安裝包我通過華為鏡像下載下傳對應的安裝包(官網實在太慢~~),在連結位址搜尋

    Elasticsearch

    然後點選進去找到我們本次安裝的版本,複制連結位址,通過

    wget

    指令下載下傳:
    [[email protected] es]# wget https://repo.huaweicloud.com/elasticsearch/7.8.0/elasticsearch-7.8.0-linux-x86_64.tar.gz
    [[email protected] es]# mkdir /usr/local/elasticsearch -pv ## 建立目錄
    [[email protected] es]# tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz -c /usr/local/elasticsearch/  ## 解壓
               
  • 修改 ES 配置檔案與JVM配置

    [[email protected] es]# cd /usr/local/elasticsearch/elasticsearch-7.8.0/config/
    [[email protected] config]# vim elasticsearch.yml ## 編輯并修改為如下内容
    # 增加以下内容
    # 叢集名稱必須相同
    cluster.name: es-app
    node.name: node-1  ## 另外兩個節點分别為 node-2  node-3
    # 目前節點是否可以被選舉為master節點,是:true、否:false
    node.master: true
    # 目前節點是否用于存儲資料,是:true、否:false
    node.data: true
    # 資料和日志存儲的地方,建議與es的安裝目錄區分,方式es删除後資料的丢失,這兩個目錄後面需要建立并設定好權限
    path.data: /es/data
    path.logs: /es/logs
    # 需求鎖住實體記憶體,是:true、否:false
    bootstrap.memory_lock: false
    # SecComp檢測,是:true、否:false
    bootstrap.system_call_filter: false
    network.host: 0.0.0.0
    # 叢集必須要配置此項,yourIp修改為自己的本機伺服器的外網ip,否則叢集失敗
    network.publish_host: 192.168.56.143
    # 主機通路的端口号
    http.port: 9200
    # es7.x 之後新增的配置,寫入候選主節點的裝置位址,在開啟服務後可以被選為主節點
    # es7之後,不需要discover.zen.ping.unicast.hosts這個參數,用discovery.seed_hosts替換,腦列控制由叢集自主要制
    discovery.seed_hosts: ["192.168.56.143","192.168.56.144","192.168.56.145"]
    # es7.x 之後新增的配置,初始化一個新的叢集時需要此配置來選舉master
    cluster.initial_master_nodes: ["192.168.56.143","192.168.56.144","192.168.56.145"]
    # 是否支援跨域,是:true,在使用head插件時需要此配置
    http.cors.enabled: true
    # "*" 表示支援所有域名
    http.cors.allow-origin: "*"
               
    修改與

    ES

    配置檔案相同目錄下的

    jvm.options

    配置檔案,主要用于控制

    JVM

    的參數配置
    [[email protected] config]# vim config/jvm.options
    # 按需修改如下記憶體大小即可
    -Xms1g
    -Xmx1g
    .....
    # 其它配置項都可以進行調整,因為是 java 開發的,你就當做 java 工程去優化 JVM 參數即可,這又涉及到 JVM 的優化内容了,後面我會出相關文章進行介紹
               
  • 建立必要的目錄并授權

    [[email protected] es]# mkdir /es/{data,logs} -pv  ## 建立資料目錄和日志目錄
    [[email protected] es]# chown -R es:es /es  ## 授權
    [[email protected] es]# cd /usr/local/
    [[email protected] local]# chown -R es:es /es ./elasticsearch  ## 授權
    注意,權限一定要設定成 es 否則啟動會報錯
               
  • 叢集啟動

    注意:到這裡我們已經配置好了 192.168.56.143 節點的配置,另外兩個節點配置步驟類似,唯一不同的是,你需要将 es 的配置檔案通過 scp 傳到另外兩個節點上,修改 node.name 、network.publish_host 配置項内容為指定節點配置即可,這裡就不重複了。
    三台節點分别執行如下腳本進行啟動,啟動沒有先後之分,

    7.X

    版本在節點全部啟動後會自動選取主節點
    ## 注意,到這裡前面的所有操作都在 root 使用者下進行,從這一步開始切到 es 使用者下啟動程序
    [[email protected] /]# ./usr/local/elasticsearch/elasticsearch-7.8.0/bin/elasticsearch  ## 前台啟動方式,如果測試時想在控制台看日志啟動情況,可以使用這種方式,但是生産環境肯定不能用這種方式啟動
    [[email protected] /]# ./usr/local/elasticsearch/elasticsearch-7.8.0/bin/elasticsearch  ## 背景啟動方式,生産推薦啟動方式
               
  • 叢集測試

    ## 通過浏覽器通路如下位址檢視叢集啟動狀态
    http://192.168.56.145:9200/_cat/health?v
    ## 可以看到如下内容
    epoch      timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
    1618143879 12:24:39  es-app  green           3         3      0   0    0    0        0             0                  -                100.0%
    ## 檢視叢集資訊
    [[email protected] bin]$ curl 192.168.56.143:9200/_cat/nodes
    192.168.56.144 44 96 0 0.03 0.04 0.05 dilmrt - node-2
    192.168.56.145 51 96 0 0.00 0.01 0.05 dilmrt * node-3 ## 帶 * 号的表示主節點
    192.168.56.143 59 96 0 0.01 0.02 0.10 dilmrt - node-1
    
    ##檢查分片是否都正常
    [[email protected] bin]$ curl 192.168.56.143:9200/_cat/shards  ## 如果出現分片的狀态不是 STARTED 而是UNASSIGNED說明分片不正常,我就遇到過如果磁盤空間使用量超過 85% 叢集的狀态不是 green 而是 yellow ,此時分片都是 UNASSIGNED 狀态,最終将磁盤空間降下來後分片正常了
    .apm-agent-configuration       0 r STARTED  0    208b 192.168.56.143 node-1
    .apm-agent-configuration       0 p STARTED  0    208b 192.168.56.144 node-2
    ilm-history-2-000001           0 p STARTED            192.168.56.145 node-3
    ilm-history-2-000001           0 r STARTED            192.168.56.143 node-1
    .kibana_1                      0 r STARTED 64 120.4kb 192.168.56.145 node-3
    .kibana_1                      0 p STARTED 64 120.4kb 192.168.56.144 node-2
    .apm-custom-link               0 r STARTED  0    208b 192.168.56.143 node-1
    .apm-custom-link               0 p STARTED  0    208b 192.168.56.144 node-2
    .kibana_task_manager_1         0 p STARTED  5  11.1kb 192.168.56.145 node-3
    .kibana_task_manager_1         0 r STARTED  5  11.1kb 192.168.56.143 node-1
    customer                       0 r STARTED  1   3.5kb 192.168.56.145 node-3
    customer                       0 p STARTED  1   3.5kb 192.168.56.144 node-2
    user                           2 p STARTED  1   3.5kb 192.168.56.145 node-3  ## p 表示 primary shard 主分片,前面的數字表示分片的數量
    user                           2 r STARTED  1   3.5kb 192.168.56.143 node-1   ## r 表示 replica shard 副本分片
    user                           1 r STARTED  0    208b 192.168.56.145 node-3
    user                           1 p STARTED  0    208b 192.168.56.144 node-2
    user                           0 r STARTED  0    208b 192.168.56.143 node-1
    user                           0 p STARTED  0    208b 192.168.56.144 node-2
    .kibana-event-log-7.8.0-000001 0 r STARTED  3  15.5kb 192.168.56.143 node-1
    .kibana-event-log-7.8.0-000001 0 p STARTED  3  15.5kb 192.168.56.144 node-2
    
               
  • 問題總結

    問題1:配置檔案的權限問題在調整過程中忘記改成 es 使用者權限了

    [es@**** bin]$ ./elasticsearch
    Exception in thread "main" 2021-04-03 17:36:23,881 main ERROR No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property 'log4j2.debug' to show Log4j2 internal initialization logging.
    2021-04-03 17:36:24,113 main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
            at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
            at java.lang.SecurityManager.checkPermission(SecurityManager.java:585)
            at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.checkMBeanTrustPermission(DefaultMBeanServerInterceptor.java:1848)
            at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:322)
            at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)
            at org.apache.logging.log4j.core.jmx.Server.register(Server.java:389)
            at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:167)
            at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:140)
            at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:556)
            at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
            at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
            at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
            at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:242)
            at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
            at org.apache.logging.log4j.LogManager.getContext(LogManager.java:174)
            at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:618)
            at org.elasticsearch.common.logging.ESLoggerFactory.getLogger(ESLoggerFactory.java:54)
            at org.elasticsearch.common.logging.ESLoggerFactory.getLogger(ESLoggerFactory.java:62)
            at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:101)
            at org.elasticsearch.ExceptionsHelper.<clinit>(ExceptionsHelper.java:42)
            at org.elasticsearch.ElasticsearchException.toString(ElasticsearchException.java:663)
            at java.lang.String.valueOf(String.java:2994)
            at java.io.PrintStream.println(PrintStream.java:821)
            at java.lang.Throwable$WrappedPrintStream.println(Throwable.java:748)
            at java.lang.Throwable.printStackTrace(Throwable.java:655)
            at java.lang.Throwable.printStackTrace(Throwable.java:643)
            at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1061)
            at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1052)
            at java.lang.Thread.dispatchUncaughtException(Thread.java:1959)
    SettingsException[Failed to load settings from /usr/local/elasticsearch-5.6.0/config/elasticsearch.yml]; nested: AccessDeniedException[/usr/local/elasticsearch-5.6.0/config/elasticsearch.yml];
    at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:102)
    at org.elasticsearch.cli.EnvironmentAwareCommand.createEnv(EnvironmentAwareCommand.java:72)
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67)
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134)
    at org.elasticsearch.cli.Command.main(Command.java:90)
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91)
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84)
    Caused by: java.nio.file.AccessDeniedException: /usr/local/elasticsearch-5.6.0/config/elasticsearch.yml
    at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
    at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
    at java.nio.file.Files.newByteChannel(Files.java:361)
    at java.nio.file.Files.newByteChannel(Files.java:407)
    at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
    at java.nio.file.Files.newInputStream(Files.java:152)
    at org.elasticsearch.common.settings.SettingsBuilder.loadFromPath(Settings.java:1032)atorg.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:100)...6more[elk@dockerbin] Builder.loadFromPath(Settings.java:1032)at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:100)... 6 more[elk@docker bin]Builder.loadFromPath(Settings.java:1032)atorg.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:100)...6more[elk@dockerbin]
               

    解決辦法:

    看到“

    Caused by: java.nio.file.AccessDeniedException: /usr/local/elasticsearch-7.8.0/config/elasticsearch.yml

    ”的提示,就去檢查目錄的權限,果然是

    root:root

    權限,使用

    es

    使用者去啟動,就報錯了。

    将目錄權限改成

    es:es

    ,并且如果

    /es/data 、 /es/logs

    中有内容要删掉,就好了(

    chown -R es:es elasticsearch-7.8.0

    修改目錄所有者為

    es

    )

    問題2:elasticsearch7 出現master not discovered yet, this node has not previously joined a bootstrapped (v7+)

    [2021-03-21T15:52:32,213][INFO ][o.e.c.c.ClusterBootstrapService] [node-2] skipping cluster bootstrapping as local node does not match bootstrap requirements: [node-1]
    [2021-03-2-21T15:52:42,220][WARN ][o.e.c.c.ClusterFormationFailureHelper] [node-2] master not discovered yet, this node has not previously joined a bootstrapped (v7+) cluster, and this node must discover master-eligible nodes [node-1] to bootstrap a cluster: have discovered []; discovery will continue using [192.168.56.143:9300] from hosts providers and [{node-2}{nU2Duwl8Su-qZ7N3rcfwWA}{4OqPHF-FRlyb_F7xhYoAow}{192.168.56.143}{192.168.56.143:9300}{ml.machine_memory=67267657728, xpack.installed=true, ml.max_open_jobs=20}] from last-known cluster state; node term 0, last-accepted version 0 in term 0
               

    解決辦法:

    從提示資訊上看,是網絡問題,檢查各個節點的

    network.publish_host

    配置位址是否通

三、IK 分詞器安裝

  • 插件安裝

ik 分詞器插件屬于中文分詞器插件,可以識别一段話中的詞,并且可以指定分詞政策甚至是自定義分詞(例如,通過配置可以實作:八戒取經路就是牛作為一個詞來識别,關于自定義分詞規則,也是通過配置檔案來實作,具體如何實作,自行查閱資料)

[[email protected] ik]# su - es
[[email protected] ~]$ cd /usr/local/elasticsearch/elasticsearch-7.8.0/plugins/
[[email protected] plugins]$ mkdir ik -pv
[[email protected] plugins]$ cd ik
[[email protected] ik]$ wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.0/elasticsearch-analysis-ik-7.8.0.zip ##下載下傳版本要對應
[[email protected] ik]$ unzip elasticsearch-analysis-ik-7.8.0.zip ## 解壓
           
  • 驗證

所有節點執行上面的插件安裝,注意權限,然後啟動所有節點,驗證分詞器是否生效:

  1. 沒有指定分詞器時的效果,會将搜尋的漢字作為一個詞
    [[email protected] ik]# curl -X GET -H "Content-Type: application/json"  "http://localhost:9200/_analyze?pretty=true" -d'{"text":"中華五千年華夏"}';
    {
      "tokens" : [
        {
          "token" : "中",
          "start_offset" : 0,
          "end_offset" : 1,
          "type" : "<IDEOGRAPHIC>",
          "position" : 0
        },
        {
          "token" : "華",
          "start_offset" : 1,
          "end_offset" : 2,
          "type" : "<IDEOGRAPHIC>",
          "position" : 1
        },
        {
          "token" : "五",
          "start_offset" : 2,
          "end_offset" : 3,
          "type" : "<IDEOGRAPHIC>",
          "position" : 2
        },
        {
          "token" : "千",
          "start_offset" : 3,
          "end_offset" : 4,
          "type" : "<IDEOGRAPHIC>",
          "position" : 3
        },
        {
          "token" : "年",
          "start_offset" : 4,
          "end_offset" : 5,
          "type" : "<IDEOGRAPHIC>",
          "position" : 4
        },
        {
          "token" : "華",
          "start_offset" : 5,
          "end_offset" : 6,
          "type" : "<IDEOGRAPHIC>",
          "position" : 5
        },
        {
          "token" : "夏",
          "start_offset" : 6,
          "end_offset" : 7,
          "type" : "<IDEOGRAPHIC>",
          "position" : 6
        }
      ]
    }
               
  2. ik_max_word 和 ik_smart 分詞政策
    • ik_max_word: 将文本按最細粒度的組合來拆分,比如會将“中華五千年華夏”拆分為“五千年、五千、五千年華、華夏、千年華夏”,總之是可能的組合;
      [[email protected] ik]# curl -X GET -H "Content-Type: application/json"  "http://localhost:9200/_analyze?pretty=true" -d'{"text":"中華五千年華夏","analyzer":"ik_smart"}';
      {
        "tokens" : [
          {
            "token" : "中華",
            "start_offset" : 0,
            "end_offset" : 2,
            "type" : "CN_WORD",
            "position" : 0
          },
          {
            "token" : "五千年",
            "start_offset" : 2,
            "end_offset" : 5,
            "type" : "TYPE_CQUAN",
            "position" : 1
          },
          {
            "token" : "華夏",
            "start_offset" : 5,
            "end_offset" : 7,
            "type" : "CN_WORD",
            "position" : 2
          }
        ]
      }
                 
    • ik_smart: 最粗粒度的拆分,比如會将“五千年華夏”拆分為“五千年、華夏”
      [[email protected] ik]# curl -X GET -H "Content-Type: application/json"  "http://localhost:9200/_analyze?pretty=true" -d'{"text":"中華五千年華夏","analyzer":"ik_max_word"}';
      {
        "tokens" : [
          {
            "token" : "中華",
            "start_offset" : 0,
            "end_offset" : 2,
            "type" : "CN_WORD",
            "position" : 0
          },
          {
            "token" : "五千",
            "start_offset" : 2,
            "end_offset" : 4,
            "type" : "TYPE_CNUM",
            "position" : 1
          },
          {
            "token" : "千年",
            "start_offset" : 3,
            "end_offset" : 5,
            "type" : "CN_WORD",
            "position" : 2
          },
          {
            "token" : "年華",
            "start_offset" : 4,
            "end_offset" : 6,
            "type" : "CN_WORD",
            "position" : 3
          },
          {
            "token" : "年",
            "start_offset" : 4,
            "end_offset" : 5,
            "type" : "COUNT",
            "position" : 4
          },
          {
            "token" : "華夏",
            "start_offset" : 5,
            "end_offset" : 7,
            "type" : "CN_WORD",
            "position" : 5
          }
        ]
      }
                 

四、head 插件安裝

head

插件就相當于

ES

的用戶端工具,通過它,可以管理、操作

ES

中的資料。

  • 安裝

    node

    環境
    [[email protected] ~]# wget https://npm.taobao.org/mirrors/node/v14.16.0/node-v14.16.0-linux-x64.tar.xz ## 下載下傳 nodejs
    [[email protected] ~]# yum -y install xz ##下載下傳下來的jar包是xz格式的,一般的linux可能不識别,還需要安裝xz.
    [[email protected] ~]# xz -d node-v14.16.0-linux-x64.tar.xz ## 會在目前目錄下生成一個 tar.gz 的包
    [[email protected] ~]# mkdir /usr/local/node-v14 -pv
    [[email protected] ~]# tar -xvf node-v14.16.0-linux-x64.tar.gz  -C /usr/local/node-v14/
    ## 配置環境變量
    [[email protected] ~]# vim /etc/profile.d/nodejs.sh
    ## 添加如下内容
    export NODE_HOME=/usr/local/node-v14/node-v14.16.0-linux-x64
    export PATH=$PATH:$NODE_HOME/bin
    ## 重讀環境變量
    [[email protected] ~]#source /etc/profile
    ##測試 node 是否生效
    [[email protected] ~]# node -v
    [[email protected] ~]# npm -v
    ##安裝cnpm
    [[email protected] ~]# npm install -g cnpm --registry=https://registry.npm.taobao.org
    ## 安裝 grunt 工具,用于打包、壓縮、測試、執行等工作
    [[email protected] ~]# cnpm install -g grunt-cli
    [[email protected] ~]# grunt -version ## 檢視是否安裝成功
               
  • 安裝

    head

    通路位址https://codechina.csdn.net/mirrors/mobz/elasticsearch-head?utm_source=csdn_github_accelerator,下載下傳
    [[email protected] ~]# wget https://codechina.csdn.net/mirrors/mobz/elasticsearch-head/-/archive/master/elasticsearch-head-master.zip
    [[email protected] ~]# mkdir /usr/local/elasticsearch-head
    [[email protected] ~]# tar -xvf elasticsearch-head-master.zip -C /usr/local/elasticsearch-head
    [[email protected] ~]# cd /usr/local/elasticsearch-head/elasticsearch-head-master
    [[email protected] ~]# cnpm install ## 安裝
               
  • 運作

    head

    [[email protected] ~]# grunt server ## 啟動
     或者在head的主目錄中運作npm run start也是可以運作head的
     在浏覽器上輸入:http://192.168.56.143:9100/ 即可通路
               

五、Kibana 安裝

Kibana

ELK

中的

K

, 它是

ES

的用戶端,通過該工具可以很友善基于

Rest API

操作

ES

執行個體,接下來簡單介紹安裝過程。

[[email protected] ~]# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.8.0-linux-x86_64.tar.gz ## 下載下傳安裝包,注意安裝包要和 ES 保持一緻
[[email protected] ~]# mkdir /usr/local/kibana
[[email protected] ~]# tar -zxvf kibana-7.8.0-linux-x86_64.tar.gz -C /usr/local/kibana
[[email protected] ~]#  su - es
[[email protected] ~]# cd /usr/local/
[[email protected] local]# chown -R es:es ./kibana ## 修改權限
[[email protected] local]# vim ./kibana/kibana-7.8.0-linux-x86_64/config/kibana.yml ## 修改配置
# 放開注釋,将預設配置改成如下:
server.port: 5601
server.host: "0.0.0.0"
#elasticsearch.url: "http://你的伺服器外網ip(your domain):9200"
elasticsearch.hosts: ["http://192.168.56.143:9200"]  ## 連接配接的節點
kibana.index: ".kibana"
i18n.locale: "zh-CN"  ## 修改為中文
           

打開浏覽器,通路 http://192.168.56.143:9200 :

Elasticsearch叢集搭建、Kibana、head、IK實戰

具體的 ES 的 CRUD API 咋使用,後面我再計劃出一篇文章介紹。

六、安裝 cerebro 叢集管理工具

cerebro

head

Kibana

用戶端類似,它能更直覺的驗證和管理叢集,cerebro 界面我覺得比較炫酷些。

下載下傳 cerebro

Elasticsearch叢集搭建、Kibana、head、IK實戰
Elasticsearch叢集搭建、Kibana、head、IK實戰

安裝過程直接

unzip

解壓,然後進入

cerebro/bin

運作

./cerbro

啟動,在浏覽器中通路 http://192.168.56.143:9000 最終顯示的結果如下:

Elasticsearch叢集搭建、Kibana、head、IK實戰
Elasticsearch叢集搭建、Kibana、head、IK實戰

七、驗證 ES 叢集故障轉移

注意實心星号的是主節點,我們嘗試将

192.168.56.145

節點服務關閉,驗證,主節點是否進行重新選舉,并再次啟動

192.168.56.145

,看看是否變成候選節點:

Elasticsearch叢集搭建、Kibana、head、IK實戰

發現

192.168.56.143

變成了主節點,然後啟動

192.168.56.145

,驗證其是否變成了候選節點

Elasticsearch叢集搭建、Kibana、head、IK實戰

驗證結果,和自己了解的一緻。

預設建立索引時,如果不指定分片數量,和分片副本數量,預設隻會建立一個分片,沒有副本,是以為了保證高可用,在建立索引時候需要指定分片數和副本數:

## 定義建立索引的模闆,凡是以 user 名稱開頭的索引都會根據這個模闆規則去建立索引
## 在 Kibana 上執行
POST _template/template_1
{
  "index_patterns": [
    "user*"
  ],
  "settings": {
    "number_of_shards": 3,  ## 三個主分片
    "number_of_replicas": 1 ## 每一個主分片一個副本
  }
}
## 在 Kibana 上執行建立索引,建立後的索引包含 3 個主分片,每一個主分片有一個副本分片
PUT /user
           

然後關閉主節點,發現另外兩個節點還有完整的3個分片可以用,關閉從節點,發現也一樣(注意在做驗證時,需要多重新整理幾次,預設30秒分片才會切換完成,虛線的表示副本分片,實線的表示主分片)

Elasticsearch叢集搭建、Kibana、head、IK實戰

八、開機啟動腳本及配置

ES

開機啟動配置

在**

/etc/init.d

目錄下建立檔案

elasticsearch

**,添加如下内容:

#!/bin/sh
#chkconfig:
#description: elasticsearch
 
export JAVA_HOME=/usr/local/java/jdk1.8.0_112
export JAVA_BIN=/usr/local/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 es<<!
    cd 你的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 es<<!
    cd 你的elasticsearch主目錄
    ./bin/elasticsearch -d
!
    echo "es startup"
    ;;  
*)
    echo "start|stop|restart"
    ;;  
esac
 
exit $?
           
chmod +x elasticsearch 添加執行權限記得是給 es
sudo chkconfig --add /etc/init.d/elasticsearch ## 加入開啟啟動項
以後使用service elasticsearch start/stop/restart來管理服務
           

elasticsearch-head

開機啟動配置

在**

/etc/init.d

目錄下建立檔案

elasticsearch_head

**,添加如下内容:

#!/bin/sh
#chkconfig: 2345 80 05
#description: es_head_run
 
export NODE_PATH=/home/soft/node-v8.11.1-linux-x64
export PATH=$PATH:$NODE_PATH/bin
#如果centOs使用yum指令安裝了nodejs就不用輸入上面兩行export語句了,因為yum安裝自動配置好了
 
cd /home/soft/elasticsearch-head-master
nohup npm run start >/home/soft/elasticsearch-head-master/nohup.out 2>&1 &
           
chmod +x elasticsearch_head 添加執行權限記得是給 es
sudo chkconfig --add /etc/init.d/elasticsearch_head ## 加入開啟啟動項
以後使用service elasticsearch_head start/stop/restart來管理服務
           

九、參考文獻

參考文獻1

十、下篇預告

《基于 Kibana 用戶端操作 ES -增删改查API篇》

繼續閱讀