目錄:
- 軟件及環境准備
- JDK安裝配置
- ElasticSearch安裝及配置
- 啟動ES集群
- es常規操作
- 安裝及配置ES前端圖形化操作工具
- kibana漢化及時區修改
- 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常規操作
查看狀態
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]
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]
|