ELK日誌分析平臺(一) --- elasticsearch實戰

ELK代表的是 elasticsearch + logstash數據採集 + kibana可視化

一、elasticsearch簡介

簡介

Elasticsearch 是一個開源的分佈式搜索分析引擎,建立在一個全文搜索引擎庫 Apache Lucene基礎之上。

Elasticsearch 不僅僅是 Lucene,並且也不僅僅只是一個全文搜索引擎:

  • 一個分佈式的實時文檔存儲,每個字段 可以被索引與搜索
  • 一個分佈式實時分析搜索引擎
  • 能勝任上百個服務節點的擴展,並支持 PB 級別的結構化或者非結構化數據

基礎模塊

基礎模塊

  • cluster:管理集羣狀態,維護集羣層面的配置信息。
  • alloction:封裝了分片分配相關的功能和策略。
  • discovery:發現集羣中的節點,以及選舉主節點。
  • gateway:對收到master廣播下來的集羣狀態數據的持久化存儲。
  • indices:管理全局級的索引設置。
  • http:允許通過JSON over HTTP的方式訪問ES的API。
  • transport:用於集羣內節點之間的內部通信。
  • engine:封裝了對Lucene的操作及translog的調用。

應用場景

elasticsearch應用場景:

  • 信息檢索
  • 日誌分析
  • 業務數據分析
  • 數據庫加速
  • 運維指標監控

官網:https://www.elastic.co/cn/

軟件下載:https://elasticsearch.cn/download/

二、elasticsearch安裝與配置

實驗主機準備:

主機 ip
server1 172.25.1.1
server2 172.25.1.2
server3 172.25.1.3

首先在server1部署elasticsearch。

[root@server1 ~]# ls
elasticsearch-7.6.1-x86_64.rpm
[root@server1 ~]# rpm -ivh elasticsearch-7.6.1-x86_64.rpm 

編輯配置文件:

[root@server1 ~]# cd /etc/elasticsearch/
[root@server1 elasticsearch]# vim elasticsearch.yml 
cluster.name: my-es			#集羣名稱
node.name: server1			#主機名需要解析
path.data: /var/lib/elasticsearch	#數據目錄
path.logs: /var/log/elasticsearch	#日誌目錄
bootstrap.memory_lock: true	#鎖定內存分配
network.host: 172.25.1.1	#主機ip
http.port: 9200			#http服務端口
cluster.initial_master_nodes: ["server1"]

在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述修改系統限制:

[root@server1 elasticsearch]# vim /etc/security/limits.conf
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
elasticsearch 	   - 	nofile 	65535
elasticsearch	   -	nproc 	4096

在這裏插入圖片描述

# vim jvm.options
-Xms1g
-Xmx1g

Xmx設置不超過物理RAM的50%,以確保有足夠的物理RAM留給內核文件系統緩存。但不要超過32G。

修改systemd啓動文件:

[root@server1 elasticsearch]# vim /usr/lib/systemd/system/elasticsearch.service
[Service]		#在service語句塊下添加
LimitMEMLOCK=infinity

在這裏插入圖片描述啓動elasticsearch:

[root@server1 elasticsearch]# systemctl daemon-reload 
[root@server1 elasticsearch]# systemctl start elasticsearch.service

注意這裏需要將swap關閉:

[root@server1 elasticsearch]# swapoff -a
[root@server1 elasticsearch]# vim /etc/fstab
[root@server1 elasticsearch]# cat /etc/fstab 

#/dev/mapper/rhel-swap   swap                    swap    defaults        0 0

開啓後查看端口,可以看出9200端口已經打開:

[root@server1 ~]# netstat -antlp | grep 9200
tcp6       0      0 172.25.1.1:9200         :::*                    LISTEN      13502/java  

這時可以在瀏覽器訪問這個端口:
在這裏插入圖片描述可以看出elasticsearch配置成功。

三、使用圖形界面操作elasticsearch

上面的elasticsearch安裝好了之後就可以通過api來進行調用,也可以安裝一個插件來進行圖形化操作:

下載與解壓:

[root@server1 ~]# yum install wget -y
[root@server1 ~]# wget https://github.com/mobz/elasticsearch-head/archive/master.zip
[root@server1 ~]# ls
elasticsearch-7.6.1-x86_64.rpm  master.zip
[root@server1 ~]# yum install unzip.x86_64 -y
[root@server1 ~]# unzip master.zip 
[root@server1 ~]# ls
elasticsearch-7.6.1-x86_64.rpm  elasticsearch-head-master  master.zip

head插件本質上是一個nodejs的工程,因此需要安裝node:

[root@server1 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/nodesource/rpm_9.x/el/7/x86_64/nodejs-9.11.2-1nodesource.x86_64.rpm
[root@server1 ~]# rpm -ivh nodejs-9.11.2-1nodesource.x86_64.rpm
[root@server1 ~]# node -v
v9.11.2
[root@server1 ~]# npm -v
5.6.0

說明nodejs安裝成功。

更換npm源安裝:

[root@server1 ~]# cd elasticsearch-head-master/
[root@server1 elasticsearch-head-master]# npm install  --registry=https://registry.npm.taobao.org

在這裏插入圖片描述在進行到這一步時比較慢,我們可以ctrl+c取消後手動下載phantomjs-2.1.1-linux-x86_64.tar.bz2

[root@server1 phantomjs]# yum install  -y bzip2
[root@server1 phantomjs]# tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@server1 phantomjs]# ls
phantomjs-2.1.1-linux-x86_64
phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@server1 phantomjs]# cd phantomjs-2.1.1-linux-x86_64
[root@server1 phantomjs-2.1.1-linux-x86_64]# ls
bin  ChangeLog  examples  LICENSE.BSD  README.md  third-party.txt
[root@server1 phantomjs-2.1.1-linux-x86_64]# cd bin/
[root@server1 bin]# ls
phantomjs
[root@server1 bin]# mv phantomjs /usr/local/bin/
[root@server1 bin]# cd 
[root@server1 ~]# yum install fontconfig-2.13.0-4.3.el7.x86_64 -y

安裝好之後就可以使用phantomjs命令:

[root@server1 ~]# phantomjs 
phantomjs> 

再次安裝:

[root@server1 ~]# cd elasticsearch-head-master/
[root@server1 elasticsearch-head-master]# npm install  --registry=https://registry.npm.taobao.org

這次的速度特別快,接下來需要修改ES主機ip和端口

[root@server1 elasticsearch-head-master]# ls
crx                                 index.html                    proxy
Dockerfile                          LICENCE                       README.textile
Dockerfile-alpine                   node_modules                  _site
elasticsearch-head.sublime-project  package.json                  src
Gruntfile.js                        package-lock.json             test
grunt_fileSets.js                   plugin-descriptor.properties
[root@server1 elasticsearch-head-master]# cd _site/
[root@server1 _site]# ls
app.css  background.js  fonts    index.html  manifest.json  vendor.js
app.js   base           i18n.js  lang        vendor.css
[root@server1 _site]# vim app.js 
將"http://localhost:9200"改爲"http://172.25.1.1:9200"

在這裏插入圖片描述啓動插件,使其後臺運行:

[root@server1 _site]# npm run start &

啓動後可以直接在瀏覽器訪問172.25.1.1:9100:
在這裏插入圖片描述表示插件安裝成功,但是點擊連接時並不能連接集羣,需要進行如下配置:

修改ES跨域主持

[root@server1 _site]# cd /etc/elasticsearch/
[root@server1 elasticsearch]# vim elasticsearch.yml 

http.cors.enabled: true	# 是否支持跨域
http.cors.allow-origin: "*"	# *表示支持所有域名

在這裏插入圖片描述重啓ES服務

systemctl restart elasticsearch.service 

重啓後就可以進行正常連接:
在這裏插入圖片描述複合查詢—>創建索引:
在這裏插入圖片描述查看ES狀態:

在這裏插入圖片描述
灰色表示沒有副本
黃色代表沒有主分片丟失

四、部署elasticsearch集羣

以相同的方法再安裝兩個ES節點

在server2和server3都安裝elasticsearch,並進行配置:

這裏以server3例(server2與server3操作相同,只有nodename和ip不同)

[root@server3 ~]# vim /etc/elasticsearch/elasticsearch.yml 
cluster.name: my-es
node.name: server3
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 172.25.1.3
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.seed_hosts: ["server1", "server2", "server3"]
cluster.initial_master_nodes: ["server1","server2","server3"]

[root@server3 ~]#  vim /usr/lib/systemd/system/elasticsearch.service

[service]
LimitMEMLOCK=infinity

[root@server3 ~]# swapoff -a

[root@server3 ~]# vim /etc/fstab 
#/dev/mapper/rhel-swap   swap                    swap    defaults        0 0

[root@server3 ~]# vim /etc/security/limits.conf

elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
elasticsearch 	   - 	nofile 	65535
elasticsearch	   -	nproc 	4096

[root@server3 ~]#  systemctl daemon-reload 
[root@server3 ~]#  systemctl start elasticsearch.service 

同時還需要配置server1:

[root@server1 security]# vim /etc/elasticsearch/elasticsearch.yml
更改:
discovery.seed_hosts: ["server1", "server2", "server3"]
cluster.initial_master_nodes: ["server1","server2","server3"]

在這裏插入圖片描述
此時重啓服務會報錯,需要將server1做下清理:

[root@server1 security]# cd /usr/share/elasticsearch/bin/
[root@server1 bin]# ./elasticsearch-node repurpose

再次重啓:

[root@server1 ~]# systemctl restart elasticsearch.service 

在網頁段進行刷新:
在這裏插入圖片描述集羣就配置成功。

五、elasticsearch節點優化

elasticsearch節點角色

Master(主節點)
主要負責集羣中索引的創建、刪除以及數據的Rebalance等操作。Master不負責數據的索引和檢索,所以負載較輕。當Master節點失聯或者掛掉的時候,ES集羣會自動從其他Master節點選舉出一個Leader。

Data Node(數據節點)
主要負責集羣中數據的索引和檢索,一般壓力比較大。

Coordinating Node(調度節點):
原來的Client node的,主要功能是來分發請求和合並結果的。所有節點默認就是Coordinating node,且不能關閉該屬性。

Ingest Node:
專門對索引的文檔做預處理

elasticsearch節點優化

在生產環境下,如果不修改elasticsearch節點的角色信息,在高數據量,高併發的場景下集羣容易出現腦裂等問題。
默認情況下,elasticsearch集羣中每個節點都有成爲主節點的資格,也都存儲數據,還可以提供查詢服務。
節點角色是由以下屬性控制:

node.master:  false|true		
node.data:  true|false
node.ingest:  true|false 
search.remote.connect: true|false

默認情況下這些屬性的值都是true。

  • node.master:這個屬性表示節點是否具有成爲主節點的資格
    注意:此屬性的值爲true,並不意味着這個節點就是主節點。
    因爲真正的主節點,是由多個具有主節點資格的節點進行選
    舉產生的。
  • node.data:這個屬性表示節點是否存儲數據。
  • node.ingest: 是否對文檔進行預處理。
  • search.remote.connect:是否禁用跨集羣查詢

第一種組合:(默認)

node.master: true
node.data: true
node.ingest:  true
search.remote.connect: true

這種組合表示這個節點即有成爲主節點的資格,又存儲數據。
如果某個節點被選舉成爲了真正的主節點,那麼他還要存儲數據,這樣對於這個節點的壓力就比較大了。
測試環境下這樣做沒問題,但實際工作中不建議這樣設置。

第二種組合:(Data node)

node.master: false
node.data: true
node.ingest: false
search.remote.connect: false

這種組合表示這個節點沒有成爲主節點的資格,也就不參與選舉,只會存儲數據。
這個節點稱爲data(數據)節點。在集羣中需要單獨設置幾個這樣的節點負責存儲數據。後期提供存儲和查詢服務。

第三種組合:(master node)

node.master: true
node.data: false
node.ingest: false
search.remote.connect: false

這種組合表示這個節點不會存儲數據,有成爲主節點的資格,可以參與選舉,有可能成爲真正的主節點。
這個節點我們稱爲master節點。

第四種組合:(Coordinating Node)

node.master: false
node.data: false
node.ingest: false
search.remote.connect: false

這種組合表示這個節點即不會成爲主節點,也不會存儲數據,
這個節點的意義是作爲一個協調節點,主要是針對海量請求的時候可以進行負載均衡。

第五種組合:(Ingest Node)

node.master: false
node.data: false
node.ingest: true
search.remote.connect: false

這種組合表示這個節點即不會成爲主節點,也不會存儲數據,
這個節點的意義是ingest節點,對索引的文檔做預處理。

生產集羣中可以對這些節點的職責進行劃分

建議集羣中設置3臺以上的節點作爲master節點,這些節點只負責成爲主節點,維護整個集羣的狀態。

再根據數據量設置一批data節點,這些節點只負責存儲數據,後期提供建立索引和查詢索引的服務,這樣的話如果用戶請求比較頻繁,這些節點的壓力也會比較大。
所以在集羣中建議再設置一批協調節點,這些節點只負責處理用戶請求,實現請求轉發,負載均衡等功能。

如我們將server1,server2,server3設置爲master節點,將server2和server3設置爲數據節點,需要進行如下配置:

[root@server1 ~]# vim /etc/elasticsearch/elasticsearch.yml 

node.master: true
node.data: false
node.ingest: false
search.remote.connect: false

[root@server1 ~]# systemctl restart elasticsearch.service 
[root@server2 ~]# vim /etc/elasticsearch/elasticsearch.yml 

node.master: true
node.data: true
node.ingest: false
search.remote.connect: false

[root@server2 ~]# systemctl restart elasticsearch.service 
[root@server3 ~]# vim /etc/elasticsearch/elasticsearch.yml 

node.master: true
node.data: true
node.ingest: false
search.remote.connect: false

[root@server3 ~]# systemctl restart elasticsearch.service 

節點需求

master節點:普通服務器即可(CPU、內存 消耗一般)
data節點:主要消耗磁盤、內存。
path.data: data1,data2,data3
這樣的配置可能會導致數據寫入不均勻,建議只指定一個數據路徑,磁盤可以使用raid0陣列,而不需要成本高的ssd。
Coordinating節點:對cpu、memory要求較高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章