Elasticsearch集群+kibana


目錄:

 

 

一、軟件及環境准備

服務器環境

CentOS6.9_64位兩台

es-master:192.168.1.11

es-slave:192.168.1.12

注意:內存允許的情況下,稍微給大一點內存,否則啟動會失敗,本地測試可以使用1.5-2G內存,

ES軟件

最新版ElasticSearch7.3.1

下載地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.1-linux-x86_64.tar.gz

es-master包括一個節點:elasticesearch-node1

es-slave包括一個節點:elasticesearch-node2

修改服務器主機名稱,方便后續操作

(1)服務器192.168.1.11上操作:

 
1
2
3
4
5
6
[root@localhost ~] # hostname es-master
[root@localhost ~] # vim /etc/sysconfig/network
#修改以下內容:
HOSTNAME=es-master
#退出重新登錄
[root@localhost ~] # logout

(2)服務器192.168.1.12上操作:

 
1
2
3
4
5
6
[root@localhost ~] # hostname es-slave
[root@localhost ~] # vim /etc/sysconfig/network
#修改以下內容:
HOSTNAME=es-slave
#退出重新登錄
[root@localhost ~] # logout

(3)為了后續操作方便,分別關閉es-master和es-slave服務器的防火牆

 
1
2
[root@es-master ~] # service iptables stop
[root@es-slave ~] # service iptables stop

注意:生產環境不能直接關防火牆,可以添加防火牆規則,使得ES的tcp端口對遠程指定主機開放。

二、JDK安裝配置及系統優化

  jdk安裝忽略(2台),可參照:https://www.cnblogs.com/zhangan/p/10901192.html

  系統優化可以參照內核優化腳本來執行:https://www.cnblogs.com/zhangan/p/10956138.html#x3

特別提醒:

Elasticsearch-7版本最低支持jdk版本為JDK1.11

Elasticsearch-7.3該版本內置了JDK,而內置的JDK是當前推薦的JDK版本。當然如果你本地配置了JAVA_HOME那么ES就是優先使用配置的JDK啟動ES。(言外之意,你不安裝JDK一樣可以啟動,我試了可以的。)
ES推薦使用LTS版本的JDK(這里只是推薦,JDK8就不支持),如果你使用了一些不支持的JDK版本,ES會拒絕啟動。

由於我們日常的代碼開發都是使用的JDK1.8,而且可能JAVA_HOME配置成JDK1.8,那么解決方法我們只需更改Elasticsearch的啟動文件,使它指向Elasticsearch-7.3該版本內置了JDK,或者也可以參照jdk安裝文檔升級jdk高版本

修改啟動配置文件
[root@localhost bin]# pwd
/data/elasticsearch/bin
[root@localhost bin]# vi elasticsearch

#配置es自帶的jdk路徑
export JAVA_HOME=/data/elasticsearch1/jdk
export PATH=$JAVA_HOME/bin:$PATH


#添加jdk判斷
if [ -x "$JAVA_HOME/bin/java" ]; then
        JAVA="/data/elasticsearch1/jdk/bin/java"
else
        JAVA=`which java`
fi

 

三、ElasticSearch安裝及配置

es-master上的操作如下:

下載及解壓ElasticSearch7.3.1

 
1
2
3
4
5
6
[root@es-master ~] # cd /home/software/
[root@es-master ~] # wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.1-linux-x86_64.tar.gz
[root@es-master software] # tar xf elasticsearch-7.3.1.tar.gz -C /usr/local/
[root@es-master local ] # mv elasticsearch-7.3.1 elasticsearch-node1/

創建elk用戶,並將elasticsearch-node1和elasticsearch-node3授權給elk

注意:由於elasticsearch啟動的時候不能直接用root用戶啟動,所以需要創建普通用戶

 
1
2
[root@es-master local ] # useradd elk
[root@es-master local ] # chown -R elk:elk elasticsearch-node1/ 

分別創建兩個elasticsearch節點的數據目錄和日志目錄

 
1
2
[root@es-master local ] # mkdir -pv /data/elasticsearch1/{data,logs}
[root@es-master local ] # chown -R elk:elk /data/elasticsearch1

修改操作系統的內核配置文件sysctl.conf(2台) 

[root@es-master local]# vim /etc/sysctl.conf
#在配置文件最后面添加如下內容
vm.zone_reclaim_mode=0
vm.max_map_count=262144
vm.swappiness=1

解釋:max_map_count文件包含限制一個進程可以擁有的VMA(虛擬內存區域)的數量。虛擬內存區域是一個連續的虛擬地址空間區域。在進程的生命周期中,每當程序嘗試在內存中映射文件,鏈接到共享內存段,或者分配堆空間的時候,這些區域將被創建。當進程達到了VMA上線但又只能釋放少量的內存給其他的內核進程使用時,操作系統會拋出內存不足的錯誤。

swappiness,Linux內核參數,控制換出運行時內存的相對權重。swappiness參數值可設置范圍在0到100之間。 低參數值會讓內核盡量少用交換,更高參數值會使內核更多的去使用交換空間。默認值為60,對於大多數操作系統,設置為100可能會影響整體性能,而設置為更低值(甚至為0)則可能減少響應延遲。

vm.swappiness=1;進行最少量的交換,而不禁用交換。如果設置為 0 的話,則等同於禁用 swap

 
1
2
#使修改之后的配置文件生效
[root@es-master local ] # sysctl -p

修改elasticsearch-node1節點的配置文件jvm.options

 
1
2
[root@es-master local ] # cd elasticsearch-node1/config/
[root@es-master config] # vim jvm.options

修改如下兩個選項:

  • -Xms512m  #elasticsearch啟動時jvm所分配的初始堆內存大小
  • -Xmx512m  #elasticsearch啟動之后允許jvm分配的最大堆內存大小,生產環境中可能需要調大

注意:如果內存足夠大,可以不用修改,默認為1G,最好不要超過內存的50%

修改elasticsearch-node1節點的配置文件elasticsearch.yml

[root@es-master local]# vim elasticsearch-node1/config/elasticsearch.yml
#修改以下項
#表示集群標識,同一個集群中的多個節點使用相同的標識
cluster.name: elasticsearch
#節點名稱
node.name: "es-node1"
#數據存儲目錄
path.data: /data/elasticsearch1/data
#日志目錄
path.logs: /data/elasticsearch1/logs
#節點所綁定的IP地址,並且該節點會被通知到集群中的其他節點
network.host: 192.168.1.11
#綁定監聽的網絡接口,監聽傳入的請求,可以設置為IP地址或者主機名
network.bind_host: 192.168.1.11
#發布地址,用於通知集群中的其他節點,和其他節點通訊,不設置的話默認可以自動設置。必須是一個存在的IP地址
network.publish_host: 192.168.1.11
#es7.x 之后新增的配置,初始化一個新的集群時需要此配置來選舉master
cluster.initial_master_nodes: ["192.168.1.11"]
#集群通信端口
transport.tcp.port: 9300
#對外提供服務的http端口,默認為9200
http.port: 9200
#集群中主節點的初始列表,當主節點啟動時會使用這個列表進行非主節點的監測
discovery.zen.ping.unicast.hosts: ["192.168.1.11:9300","192.168.1.12:9300"]
#下面這個參數控制的是,一個節點需要看到的具有master節點資格的最小數量,然后才能在集群中做操作。官方推薦值是(N/2)+1;
#其中N是具有master資格的節點的數量(我們的情況是2,因此這個參數設置為1)
#但是:但對於只有2個節點的情況,設置為2就有些問題了,一個節點DOWN掉后,肯定連不上2台服務器了,這點需要注意
discovery.zen.minimum_master_nodes: 1
#集群ping過程的超時
discovery.zen.ping_timeout: 120s
#客戶端連接超時
client.transport.ping_timeout: 60s
#cache緩存大小,10%(默認),可設置成百分比,也可設置成具體值,如256mb。
indices.queries.cache.size: 20%
#索引期間的內存緩存,有利於索引吞吐量的增加。
indices.memory.index_buffer_size: 30%
#開啟了內存地址鎖定,為了避免內存交換提高性能。但是Centos6不支持SecComp功能,啟動會報錯,所以需要將其設置為false
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
#設置該節點是否具有成為主節點的資格以及是否存儲數據。
node.master: true
node.data: true
#ElasticSearch 更改search線程池,search 線程設置過小導致程序崩潰
thread_pool.search.queue_size: 1000
#queue_size允許控制沒有線程執行它們的掛起請求隊列的初始大小。
thread_pool.search.size: 200
#size參數控制線程數,默認為核心數乘以5。
thread_pool.search.min_queue_size: 10
#min_queue_size設置控制queue_size可以調整到的最小量。
thread_pool.search.max_queue_size: 1000
#max_queue_size設置控制queue_size可以調整到的最大量。
thread_pool.search.auto_queue_frame_size: 2000
#auto_queue_frame_size設置控制在調整隊列之前進行測量的操作數。它應該足夠大,以便單個操作不會過度偏向計算。
thread_pool.search.target_response_time: 6s
#target_response_time是時間值設置,指示線程池隊列中任務的目標平均響應時間。如果任務通常超過此時間,則將調低線程池隊列以拒絕任務。

 

es-slave上的操作如下:

上傳elasticsearch的安裝包,然后解壓重命名,可以直接從es-master上遠程拉取

 
1
2
3
[root@es-slave ~] # cd /home/software/
[root@es-slave software] # scp 192.168.1.11:/home/software/elasticsearch-7.3.1.tar.gz ./
[root@es-slave software] # tar xf elasticsearch-7.3.1.tar.gz -C /usr/local/

創建elk用戶,並將elasticsearch-node2授權給elk

 
1
2
[root@es-slave  local ] # useradd elk
[root@es-slave  local ] # chown -R elk:elk elasticsearch-node2

創建數據目錄,並將目錄的屬主和屬組改為elk用戶,elk組

 
1
2
[root@es-slave  local ] # mkdir -pv /data/elasticsearch2/{data,logs}
[root@es-slave  local ] # chown -R elk:elk /data/elasticsearch2
 

修改elasticsearch-node2節點的配置文件jvm.options

 
1
2
[root@es-slave  local ] # cd elasticsearch-node2/config/
[root@es-slave config] # vim jvm.options

修改如下兩個選項:

  • -Xms512m
  • -Xmx512m

修改elasticsearch-node2節點的配置文件elasticsearch.yml

[root@es-master local]# vim elasticsearch-node3/config/elasticsearch.yml
#修改以下項
cluster.name: elasticsearch
node.name: "es-node2"
path.data: /data/elasticsearch2/data
path.logs: /data/elasticsearch2/logs
network.host: 192.168.1.12
network.bind_host: 192.168.1.12
network.publish_host: 192.168.1.12
#節點間的通信端口,接收單值或者一個范圍。如果不指定一個范圍,該節點將會綁定范圍的第一個可用頂點
cluster.initial_master_nodes: ["192.168.1.11"]
transport.tcp.port: 9300
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.1.11:9300","192.168.1.12:9300"]
discovery.zen.minimum_master_nodes: 1
discovery.zen.ping_timeout: 120s
client.transport.ping_timeout: 60s
indices.queries.cache.size: 20%
indices.memory.index_buffer_size: 30%
bootstrap.memory_lock: true
bootstrap.system_call_filter: false  
node.master: true
node.data: true
thread_pool.search.queue_size: 1000
thread_pool.search.size: 200
thread_pool.search.min_queue_size: 10
thread_pool.search.max_queue_size: 1000
thread_pool.search.auto_queue_frame_size: 2000
thread_pool.search.target_response_time: 6s 

至此es-slave上的elasticsearch節點配置 

五、啟動ES集群

首先切換為elk用戶,並啟動es-slave服務器上的elasticsearch-node2節點

 
1
2
3
[root@es-slave local ] # su - elk
[elk@es-slave ~]$ cd /usr/local/elasticsearch-node2/bin/
[elk@es-slave bin]$ . /elasticsearch -d

注意:-d參數表示以后台進程啟動,默認情況下會在控制台輸出日志。

查看是否啟動成功,可以通過查看進程及端口來確定是否啟動成功,如果啟動失敗,可以通過查看日志來排查原因

 
1
2
[elk@es-slave bin]$ ps -ef| grep elasticsearch
[elk@es-slave bin]$ lsof -i:9200

注意:日志文件在elasticsearch.yml配置文件中所指定的目錄下

測試是否可以訪問

 
1
2
3
4
5
6
7
8
9
10
11
[elk@es-slave ~]$ curl 192.168.1.12:9200
如果返回類似如下結果,表示啟動正常:
{
  "name" : "es-node2",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "gczyFNKrTe2YbEQmlg7-nw",
  "version" : {
   ...
  },
  "tagline" : "You Know, for Search"
}

切換到es-master服務器上,然后切換到elk身份,分別啟動elasticSearch-node1節點和elasticsearch-node3節點

 
1
2
3
 
 
[root@es-master ~] # su - elk
[elk@es-master ~]$ cd /usr/local/elasticsearch-node1/bin/
[elk@es-master bin]$ . /elasticsearch -d

查看進程及端口,確定是否啟動成功

 
1
2
3
4
5
 
 
#查看進程,可以看到有兩個節點的進程
[elk@es-master bin]$ ps -ef| grep elasticsearch
[elk@es-master bin]$ lsof -i:9200
使用curl測試節點是否可以正常訪問,方法同上,需要驗證elasticsearch-node1
[elk@es-master ~]$ curl 192.168.1.11:9200
 

驗證完畢之后,ES集群就啟動完畢。

六丶es常規操作

檢查三個節點的情況:
發現是GREEN的綠色健康狀態,說明備份被分配完成,可用集群配置完成。

查看狀態

curl "http://127.0.0.1:9200/_status?pretty=true"

查看集群健康

curl "http://127.0.0.1:9200/_cat/health?v"

列出集群索引

curl "http://127.0.0.1:9200/_cat/indices?"

刪除索引

curl -XDELETEE "http://127.0.0.1:9200/logstash-2015.10.28"

優化索引

curl -XPOST "http://127.0.0.1:9200/logstash-2015.10.28/_optimize"

curl -XGET 'http://localhost:9200/logstash-2015.10.28/_search?pretty=true' -d '

{

    "query" : {

        "matchAll" : {}

    }

}'

修改集群分片數,默認只允許1000個分片,不免后期分片數不足丟失數據

curl -XPUT 'ip:9200/_cluster/settings'  -H "Content-Type: application/json" -d '{"transient":{"cluster":{"max_shards_per_node":10000}}}'

  

七、安裝及配置ES前端圖形化操作工具

下載kibana,並上傳到es-master服務器上

下載地址:https://artifacts.elastic.co/downloads/kibana/kibana-7.3.1-linux-x86_64.tar.gz 

解壓,重命名

 
1
2
3
4
[root@es-master software] # wget  https://artifacts.elastic.co/downloads/kibana/kibana-7.3.1-linux-x86_64.tar.gz 
[root@es-master software] # tar xf kibana-7.3.1-linux-x86_64.tar.gz -C /usr/local
[root@es-master software] # cd /usr/local
[root@es-master local ] # mv kibana-7.3.1-linux-x86_64 kibana-7.3.1

修改kibana的配置文件kibana.yml

[root@es-master local]# cd kibana-7.3.1/config
[root@es-master config]# vim kibana.yml
#修改如下內容:
#對外服務監聽端口
server.port: 5601
#綁定可以訪問5601端口服務的IP地址,0.0.0.0表示任何地址在沒有防火牆限制的情況下都可以訪問,生產環境別這樣設置,不安全。
server.host: "0.0.0.0"
#默認值為主機名稱,表示kibana實例綁定的主機,可以是IP地址或者主機名稱.
server.name: "192.168.1.11"
#用來處理ES請求的服務URL
elasticsearch.hosts: ["http://192.168.1.11:9200","http://192.168.1.12:9200"]
#用來控制證書的認證,可選的值為full,none,certificate。此處由於沒有證書,所以設置為null,否則啟動會提示錯誤.
elasticsearch.ssl.verificationMode: none
#kibana搜索數據請求超時時間
elasticsearch.requestTimeout: 90000  

啟動kibana

 
1
2
3
4
5
[root@es-master config] # cd /usr/local/kibana-7.3.1/bin
#以后台進程啟動,kibana默認是控制台方式啟動,Ctrl+C就會退出
[root@es-master bin] # nohup ./kibana &
#查看日志是否啟動正常
[root@es-master bin] # tail -f nohup.out

如果啟動正常,在瀏覽器端訪問http://192.168.1.11:5601,即可看到圖形化操作工具

八丶kibana漢化及時區修改:

vi kibana.yml

i18n.locale: "zh-CN"

時區修改步驟:

進入kibana界面-》管理-》高級設置-》設置日期格式的時區

默認:Browser

可修改為:Asia/Shanghai

 

九、ElasticSearch和kibana的停止

目前es和kibana的bin目錄下未提供停止ES服務和kibana服務的腳本,可以使用kill -9 pid來停止服務

停止ES服務

 
1
2
[root@es-master bin] # ps -ef| grep elasticsearch | grep -v grep | awk '{print $2}'
[root@es-master bin] # kill -9 pid[上一步所輸出的pid]

停止Kibana服務

 
1
2
[root@es-master bin] # ps -ef| grep node | grep -v grep | grep -v elasticsearch | awk '{print $2}'
[root@es-master bin] # kill -9 pid[上一步所輸出的pid]

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM