ElasticSearch實戰系列一: ElasticSearch叢集+Kinaba安裝教程
前言
本文主要介紹的是ElasticSearch叢集和kinaba的安裝教程。
ElasticSearch介紹
ElasticSearch是一個基於Lucene的搜尋伺服器,其實就是對Lucene進行封裝,提供了 REST API 的操作介面.
ElasticSearch作為一個高度可拓展的開源全文搜尋和分析引擎,可用於快速地對大資料進行儲存,搜尋和分析。
ElasticSearch主要特點:分散式、高可用、非同步寫入、多API、面向文件 。
ElasticSearch核心概念:近實時,叢集,節點(儲存資料),索引,分片(將索引分片),副本(分片可設定多個副本) 。它可以快速地儲存、搜尋和分析海量資料。 ElasticSearch使用案例:維基百科、Stack Overflow、Github 等等。
ElasticSearch叢集安裝
一、環境選擇
ElasticSearch叢集安裝依賴JDK,本文的ElasticSearch版本為6.5.4,對應的Kibana也是6.5.4,這裡順便說下Kibana的版本最好不要低於ElasticSearch的版本,JDK的版本為1.8。
下載地址:
ElasticSearch-6.5.4: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz
Kibana-6.5.4: https://artifacts.elastic.co/downloads/kibana/kibana-6.5.4-linux-x86_64.tar.gz
JDK1.8 : http://www.oracle.com/technetwork/java/javase/downloads
ElasticSearch有幾個重要的節點屬性,主節點、資料節點、查詢節點、攝取節點,其中主節點、資料節點最重要的,因此本文就只主要介紹這兩個節點的安裝,剩下的節點屬性在配置檔案那塊進行說明。
ElasticSearch叢集安裝表格:
二、Linux配置
在安裝ElasticSearch之前,我們需要對Linux的環境做一些調整,防止在後續過程中出現一些問題!
1、修改最大記憶體限制
修改sysctl.conf檔案
vim /etc/sysctl.conf
在末尾增加如下配置:
vm.max_map_count = 655360
vm.swappiness=1
然後儲存退出,輸入以下命令使其生效
sysctl -p
儲存退出,輸入以下命令執行使其生效
sysctl -p
使用命令檢視:
tail -3 /etc/sysctl.conf
2、修改最大執行緒個數
修改90-nproc.conf檔案
vim /etc/security/limits.d/90-nproc.conf
注:不同的linux伺服器90-nproc.conf可能檔名不一樣,建議先在/etc/security/limits.d/檢視檔名確認之後再來進行更改。
將下述的內容
soft nproc 2048
修改為
soft nproc 4096
使用命令檢視:
tail -3 /etc/security/limits.d/90-nproc.conf
3、修改最大開啟檔案個數
修改limits.conf
vim /etc/security/limits.conf
在末尾新增如下內容:
hard nofile 65536
soft nofile 65536
4、防火牆關閉
說明:其實可以不關閉防火牆,進行許可權設定,但是為了方便訪問,於是便關閉了防火牆。每個機器都做!!!
關閉防火牆的命令
CentOS 6
查詢防火牆狀態:
[root@localhost ~]# service iptables status
停止防火牆:
[root@localhost ~]# service iptables stop
啟動防火牆:
[root@localhost ~]# service iptables start
重啟防火牆:
[root@localhost ~]# service iptables restart
永久關閉防火牆:
[root@localhost ~]# chkconfig iptables off
永久關閉後啟用:
[root@localhost ~]# chkconfig iptables on
CentOS 7
關閉防火牆
systemctl stop firewalld.service
三、JDK安裝
1,檔案準備
解壓下載下來的JDK
tar -xvf jdk-8u144-linux-x64.tar.gz
移動到opt/java資料夾中,沒有就新建,然後將資料夾重新命名為jdk1.8
mv jdk1.8.0_144 /opt/java
mv jdk1.8.0_144 jdk1.8
2,環境配置
首先輸入 java -version
檢視是否安裝了JDK,如果安裝了,但版本不適合的話,就解除安裝
輸入
rpm -qa | grep java
檢視資訊
然後輸入:
rpm -e --nodeps “你要解除安裝JDK的資訊”
如: rpm -e --nodeps java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64
確認沒有了之後,解壓下載下來的JDK
tar -xvf jdk-8u144-linux-x64.tar.gz
移動到opt/java資料夾中,沒有就新建,然後將資料夾重新命名為jdk1.8。
mv jdk1.8.0_144 /opt/java
mv jdk1.8.0_144 jdk1.8
然後編輯 profile 檔案,新增如下配置
輸入: vim /etc/profile
export JAVA_HOME=/opt/java/jdk1.8
export JRE_HOME=/opt/java/jdk1.8/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
新增成功之後,輸入:
source /etc/profile
使配置生效,然後檢視版本資訊輸入:
java -version
四、ElasticSearch安裝
1,檔案準備
將下載好的elasticsearch檔案解壓
輸入:
tar -xvf elasticsearch-6.5.4.tar.gz
然後移動到/opt/elk資料夾 裡面,沒有該資料夾則建立,然後將資料夾重新命名為masternode.
在/opt/elk輸入:
mv elasticsearch-6.5.4 /opt/elk
mv elasticsearch-6.5.4 masternode
2,配置修改
因為elasticsearch需要在非root的使用者下面操作,並且elasticsearch的資料夾的許可權也為非root許可權, 因此我們需要建立一個使用者進行操作,我們建立一個elastic使用者,並賦予該目錄的許可權。
命令如下:
adduser elastic
chown -R elastic:elastic /opt/elk/masternode
這裡我們順便再來指定ElasticSearch資料和日誌存放的路徑地址,我們可以先使用df -h命令檢視當前系統的盤主要的磁碟在哪,然後在確認資料和日誌存放的路徑,如果在/home 目錄下的話,我們就在home目錄下建立ElasticSearch資料和日誌的資料夾,這裡為了區分嗎,我們可以根據不同的節點建立不同的資料夾。這裡的資料夾建立用我們剛剛建立好的使用者去建立,切換到elastic使用者,然後建立資料夾。
su elastic
mkdir /home/elk
mkdir /home/elk/masternode
mkdir /home/elk/masternode/data
mkdir /home/elk/masternode/logs
mkdir /home/elk/datanode1
mkdir /home/elk/datanode1/data
mkdir /home/elk/datanode1/logs
主節點(master)配置
建立成功之後,我們先修改masternode節點的配置,修改完成之後在同級目錄進行copy一下,名稱為datanode1,然後只需少許更改datanode節點的配置即可。這裡我們要修改elasticsearch.yml和jvm.options檔案即可! 注意這裡還是elastic使用者!
cd /opt/elk/
vim masternode/config/elasticsearch.yml
vim masternode/config/jvm.options
masternode的elasticsearch.yml檔案配置如下:
cluster.name: pancm
node.name: master
path.data: /home/elk/masternode/data
path.logs: /home/elk/masternode/logs
network.host: 0.0.0.0
network.publish_host: 192.169.0.23
transport.tcp.port: 9301
http.port: 9201
discovery.zen.ping.unicast.hosts: ["192.169.0.23:9301","192.169.0.24:9301","192.169.0.25:9301"]
node.master: true
node.data: false
node.ingest: false
index.number_of_shards: 5
index.number_of_replicas: 1
discovery.zen.minimum_master_nodes: 1
bootstrap.memory_lock: true
http.max_content_length: 1024mb
elasticsearch.yml檔案引數配置說明:
cluster.name: 叢集名稱,同一叢集的節點配置應該一致。es會自動發現在同一網段下的es,如果在同一網段下有多個叢集,就可以用這個屬性來區分不同的叢集。
- node.name: 該節點的名稱。 path.data: 資料存放的路徑。 path.logs: 日誌存放的路徑。
- network.host: 設定ip地址,可以是ipv4或ipv6的,預設為0.0.0.0。
- network.publish_host: 設定其它節點和該節點互動的ip地址,如果不設定它會自動判斷,值必須是個真實的ip地址。
- transport.tcp.port:設定節點間互動的tcp埠,預設是9300。
- http.port:設定對外服務的http埠,預設為9200。
- discovery.zen.ping.unicast.hosts: 設定叢集中master節點的初始列表,可以通過這些節點來自動發現新加入叢集的節點。
- node.master: 指定該節點是否有資格被選舉成為node,預設是true。 node.data: 指定該節點是否儲存索引資料,預設為true。
- node.ingest: 指定該節點是否使用管道,預設為true。
- index.number_of_shards:設定預設索引分片個數,預設為5片。
- index.number_of_replicas:設定預設索引副本個數,預設為1個副本。
- discovery.zen.minimum_master_nodes: 設定這個引數來保證叢集中的節點可以知道其它N個有master資格的節點。預設為1,對於大的叢集來說,可以設定大一點的值(2-4)。
bootstrap.memory_lock: 設定為true來鎖住記憶體。因為當jvm開始swapping時es的效率會降低,所以要保證它不swap,可以把ES_MIN_MEM和ES_MAX_MEM兩個環境變數設定成同一個值,並且保證機器有足夠的記憶體分配給es。同時也要允許elasticsearch的程序可以鎖住記憶體,Linux下可以通過
ulimit -l unlimited
命令。 http.max_content_length: 設定內容的最大容量,預設100mb。
-...
這裡在順便說下ElasticSearch節點的屬性。
node.master: true 並且 node.data: true
這種組合表示這個節點即有成為主節點的資格,又儲存資料。
如果某個節點被選舉成為了真正的主節點,那麼他還要儲存資料,這樣對於這個節點的壓力就比較大了。ElasticSearch預設每個節點都是這樣的配置,在測試環境下這樣做沒問題。實際工作中建議不要這樣設定,因為這樣相當於主節點和資料節點的角色混合到一塊了。- node.master: false 並且 node.data: true
這種組合表示這個節點沒有成為主節點的資格,也就不參與選舉,只會儲存資料。 這個節點我們稱為data(資料)節點。在叢集中需要單獨設定幾個這樣的節點負責儲存資料,後期提供儲存和查詢服務。 - node.master: true 並且 node.data: false
這種組合表示這個節點不會儲存資料,有成為主節點的資格,可以參與選舉,有可能成為真正的主節點,這個節點我們稱為master節點。 node.master: false node.data: false
這種組合表示這個節點即不會成為主節點,也不會儲存資料,這個節點的意義是作為一個client(客戶端)節點,主要是針對海量請求的時候可以進行負載均衡。node.ingest: true
執行預處理管道,不負責資料和叢集相關的事物。
它在索引之前預處理文件,攔截文件的bulk和index請求,然後加以轉換。
將文件傳回給bulk和index API,使用者可以定義一個管道,指定一系列的前處理器。
elasticsearch.yml檔案配置示例圖
將jvm.options配置Xms和Xmx改成2G,配置如下:
-Xms2g
-Xmx2g
關於ElasticSearch更多配置可以參考ElasticSearch官方文件!
資料節點節點(data)配置
在配置完masternode節點的ElasticSearch之後,我們再來配置datanode節點的,我們將masternode節點copy一份並重命名為datanode1,然後根據上述示例圖中紅色框出來簡單更改一下即可。
命令如下:
cd /opt/elk/
cp -r masternode/ datanode1
vim datanode1/config/elasticsearch.yml
vim datanode1/config/jvm.options
datanode的elasticsearch.yml檔案配置如下:
cluster.name: pancm
node.name: data1
path.data: /home/elk/datanode/data
path.logs: /home/elk/datanode/logs
network.host: 0.0.0.0
network.publish_host: 192.169.0.23
transport.tcp.port: 9300
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.169.0.23:9301","192.169.0.24:9301","192.169.0.25:9301"]
node.master: false
node.data: true
node.ingest: false
index.number_of_shards: 5
index.number_of_replicas: 1
discovery.zen.minimum_master_nodes: 1
bootstrap.memory_lock: true
http.max_content_length: 1024mb
將jvm.options配置Xms和Xmx改成8G,配置如下:
-Xms8g
-Xmx8g
注:配置完成之後需要使用ll命令檢查一下masternode和datanode1許可權是否屬於elastic使用者的,若不屬於,可以使用chown -R elastic:elastic +路徑 命令進行賦予許可權。
上述配置完成之後,可以使用相同的方法在其他的機器在操作一次,或者使用ftp工具進行傳輸,又或者使用scp命令進行遠端傳輸檔案然後根據不同的機器進行不同的修改。
scp命令示例:
jdk環境傳輸:
scp -r /opt/java root@slave1:/opt
scp -r /opt/java root@slave2:/opt
ElasticSearch環境傳輸:
scp -r /opt/elk root@slave1:/opt
scp -r /home/elk root@slave1:/opt
scp -r /opt/elk root@slave2:/opt
scp -r /home/elk root@slave2:/opt
3,啟動ElasticSearch
這裡還是需要使用elastic使用者來進行啟動,每臺機器的每個節點都需要進行操作!
在/opt/elk的目錄下輸入:
su elastic
cd /opt/elk
./masternode/bin/elasticsearch -d
./datanode1/bin/elasticsearch -d
啟動成功之後,可以輸入jps命令進行檢視或者在瀏覽器上輸入 ip+9200或ip+9201進行檢視。
出現以下介面表示成功!
四、Kibana 安裝
kinaba安裝只需要在一臺機器上部署即可,直接通過root使用者進行操作,需要注意的是kinaba需要和ElasticSearch伺服器網路ping通即可。
1,檔案準備
將下載下來的kibana-6.5.4-linux-x86_64.tar.gz的配置檔案進行解壓
在linux上輸入:
tar -xvf kibana-6.5.4-linux-x86_64.tar.gz
然後移動到/opt/elk 裡面,然後將資料夾重新命名為 kibana6.5.4
輸入:
mv kibana-6.5.4-linux-x86_64 /opt/elk
mv kibana-6.5.4-linux-x86_64 kibana6.5.4
2,配置修改
進入資料夾並修改kibana.yml配置檔案:
cd /opt/elk/kibana6.5.4
vim config/kibana.yml
將配置檔案中的:
server.host: "localhost"
修改為:
server.host: "192.169.0.23"
然後一行新增,這行的意思是不使用帳號密碼登入
xpack.security.enabled: false
儲存退出!
3,Kinaba 啟動
使用root使用者進行啟動。
在kibana6.5.4資料夾目錄輸入:
nohup ./bin/kibana >/dev/null 2>&1 &
瀏覽器輸入:
http://IP:5601
五、錯誤問題解決辦法
1,max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
原因: 記憶體限制太小了!
解決辦法: 修改最大記憶體限制,參考Linux環境配置的第一條!
2,max number of threads [2048] for user [elastic] is too low, increase to at least [4096]
原因: 執行緒數限制太少了!
解決辦法: 修改最大執行緒數限制,參考Linux環境配置的第二條!
3, max file descriptors [65535] for elasticsearch process likely too low, increase to at least [65536]
原因: 開啟檔案個數太少了!
解決辦法: 修改最開啟檔案個數,參考Linux環境配置的第三條!
4,ERROR:bootstrap checks failed
原因:未鎖定記憶體。
解決辦法:在報錯機器上的elasticsearch.yml配置檔案中新增bootstrap.memory_lock: true
配置!
其它
ElasticSearch和head外掛 Windows版的安裝:
https://www.cnblogs.com/xuwujing/p/8998168.html
音樂推薦
原創不易,如果感覺不錯,希望給個推薦!您的支援是我寫作的最大動力!
版權宣告:
作者:虛無境
部落格園出處:http://www.cnblogs.com/xuwujing
CSDN出處:http://blog.csdn.net/qazwsxpcm
個人部落格出處:http://www.panchengming.