一、概述
一、概述
我們為什麼要安裝
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 分詞器安裝
-
插件安裝
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 ## 解壓
-
驗證
所有節點執行上面的插件安裝,注意權限,然後啟動所有節點,驗證分詞器是否生效:
- 沒有指定分詞器時的效果,會将搜尋的漢字作為一個詞
[[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 } ] }
- 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 } ] }
- ik_max_word: 将文本按最細粒度的組合來拆分,比如會将“中華五千年華夏”拆分為“五千年、五千、五千年華、華夏、千年華夏”,總之是可能的組合;
四、head 插件安裝
四、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 安裝
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 :
具體的 ES 的 CRUD API 咋使用,後面我再計劃出一篇文章介紹。
六、安裝 cerebro 叢集管理工具
六、安裝 cerebro 叢集管理工具
cerebro
和
head
、
Kibana
用戶端類似,它能更直覺的驗證和管理叢集,cerebro 界面我覺得比較炫酷些。
下載下傳 cerebro
安裝過程直接
unzip
解壓,然後進入
cerebro/bin
運作
./cerbro
啟動,在浏覽器中通路 http://192.168.56.143:9000 最終顯示的結果如下:
七、驗證 ES 叢集故障轉移
七、驗證 ES 叢集故障轉移
注意實心星号的是主節點,我們嘗試将
192.168.56.145
節點服務關閉,驗證,主節點是否進行重新選舉,并再次啟動
192.168.56.145
,看看是否變成候選節點:
發現
192.168.56.143
變成了主節點,然後啟動
192.168.56.145
,驗證其是否變成了候選節點
驗證結果,和自己了解的一緻。
預設建立索引時,如果不指定分片數量,和分片副本數量,預設隻會建立一個分片,沒有副本,是以為了保證高可用,在建立索引時候需要指定分片數和副本數:
## 定義建立索引的模闆,凡是以 user 名稱開頭的索引都會根據這個模闆規則去建立索引
## 在 Kibana 上執行
POST _template/template_1
{
"index_patterns": [
"user*"
],
"settings": {
"number_of_shards": 3, ## 三個主分片
"number_of_replicas": 1 ## 每一個主分片一個副本
}
}
## 在 Kibana 上執行建立索引,建立後的索引包含 3 個主分片,每一個主分片有一個副本分片
PUT /user
然後關閉主節點,發現另外兩個節點還有完整的3個分片可以用,關閉從節點,發現也一樣(注意在做驗證時,需要多重新整理幾次,預設30秒分片才會切換完成,虛線的表示副本分片,實線的表示主分片)
八、開機啟動腳本及配置
八、開機啟動腳本及配置
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篇》