部署計劃
node1 xxx.xxx.xxx
node2 xxx.xxx.xxx
node3 xxx.xxx.xxx
上面代表3個節點,且配置好/etc/hosts,為了方便最好配置ssh免密,定時同步網絡時間等
部署計劃(由於學習機器資源有限,使用最精簡方式部署)
精簡版部署架構圖:
部署說明:
1、node1上放置測試日誌文件
2、node1安裝kibana
3、node2安裝logstash收集器
4、node3安裝es
5、logstash收集log過濾後發送到es
6、kibana負責讀取es後展示
注:
所有節點統一創建以下兩個目錄
軟件解壓放置目錄:/opt/soft
軟件壓縮包放置目錄: /opt/zip
所有節點安裝好jdk8,且配置好環境變量
部署elasticsearch
由部署計劃我們知道,es部署在node3節點上。
該文檔講解的ELK基於7.0版本,由於ELK不同版本之間並不兼容,通常官方發版新版本時都會配套發版,強烈建議或要求安裝ELK各個組件的版本以以官方配套為準,通常版本號是一致的。
單機版
創建用戶組
es官方規定,不能以root賬號啟動,所以我們需要創建用戶和用戶組
groupadd lazy
useradd -g lazy lazy
將賬號加入sudo
為了後面方便借用root權限,將lazy用戶加入sudo
vi /etc/sudoers.d/lazy
內容如下:
lazyALL=(ALL) ALL
創建目錄
mkdir -p /opt/soft /opt/zip
壓縮包放置目錄:/opt/zip
安裝軟件目錄:/opt/soft
安裝JDK8
下載、解壓、配置環境變量
具體不演示
下載ES
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.0-linux-x86_64.tar.gz
解壓ES
tar -xvf /opt/zip/elasticsearch-7.0.0-linux-x86_64.tar.gz -C /opt/soft/
修改目錄歸屬
chown -R lazy:lazy /opt/soft/elasticsearch-7.0.0
切換賬號
su lazy
啟動
/opt/soft/elasticsearch-7.0.0/bin/elasticsearch後臺運行:/opt/soft/elasticsearch-7.0.0/bin/elasticsearch -d
訪問
curl -XGET 127.0.0.1:9200/_cat/health?v
沒有做任何配置情況下,為開發模式,默認只綁定到環回地址127.0.0.1上,只能通過127.0.0.1訪問,外部無法訪問。
可以通過配置$ES_HOME/config/elasticsearch.yml文件中的network.host:配置項進行其它網卡的綁定。注意,es發現一旦用戶配置了network.host,在下次啟動ES時將開啟生產模式啟動引導檢查功能(如文件句柄數量限制,線程數限制等)。
如果你確實只是單節點且需要配置network.host來提供對外訪問能力,你可以配置discovery.type為single-node來實現,但是如果你配置了discovery.type為single-node,es將不會開啟啟動引導檢查功能,事實上建議開啟es的啟動引導的嚴格檢查。當discovery.type配置single-node時,我們可以配置系統屬性es.enforce.bootstrap.checks為true來強制啟動生產模式檢查。
下面給出單機版最終配置:
cluster.name: my-applicationnode.name: node-3bootstrap.memory_lock: falsenetwork.host: node3discovery.seed_hosts: ["node3"]cluster.initial_master_nodes: ["node-3"]
注意,上面的單機版配置會進行生產模式檢查,啟動會報錯,關於生產模式檢查配置請參考下面的集群部署說明。
單機版部署完畢!
集群
除了單機版部署外,這裡同時也給出集群部署方式,但是我們本次elk使用單機版部署,因為資源有限。集群部署就要涉及到node1\\node2\\node3三臺節點的配置和安裝。
集群版ES配置
node1節點上操作:
vi /opt/soft/elasticsearch-7.0.0/config/elasticsearch.yml
內容如下:
cluster.name: my-applicationnode.name: node-1path.data: /var/es/datapath.logs: /var/es/logsbootstrap.memory_lock: truenetwork.host: node1http.port: 9200discovery.seed_hosts: ["node1", "node1", "node3"]cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
說明:
cluster.name:集群名稱,自定義,建議語義化,多個集群時保證唯一path.data和path.logs:數據存儲目錄,日誌目錄。需要執行chown -R lazy:lazy /var/es/network.host: 配置ip或0.0.0.0discovery.seed_hosts: 配置集群機器Ip列表。可以在每臺機子/etc/hosts文件配置本地dns,方便記憶,比如筆者這裡的node1,node2,node3均在/etc/hosts文件配置好了的。cluster.initial_master_nodes:參與主節點節點列表。bootstrap.memory_lock: 將配置的JVM堆內存鎖定在內存中,禁止將堆的某個內存頁交換到磁盤。注意,如果你的機子內存不夠鎖定或賬號內存鎖定權限不足,將啟動失敗發生這種情況做法有兩種:1、配置賬號(例如lazy)的鎖定內存大小為無限大vi /etc/security/limits.conf末尾追加:lazy - memlock unlimited2、將bootstrap.memory_lock設置為false而不是設置為true,然後在系統層面禁止內存交換,禁止交互可以防止es在垃圾回收時與磁盤反覆交互導致卡頓。
修改系統配置
當用戶配置了network.host項後,es就會開啟生產模式檢查,發現任何一項不滿足要求,將啟動失敗。生產模式檢查主要包括:
JVM堆大小檢查
$ES_HOME/config/jvm.options配置文件配置初始化堆大小-Xms和最大堆大小-Xmx保持一致,默認為1G,生產環境建議適當調大,一般配置為系統內存1/2較為理想。例如:4G服務器可以配置2G堆大小
加大文件數量限制
例如這裡的話就需要配置es賬號(lazy)文件描述符大小,生產模式要求為65535。配置方式:
vi /etc/security/limits.conf
末尾追加:
lazy - nofile 65535
加大線程數限制
Elasticsearch通過將請求分解為多個階段並將這些階段交給不同的線程池執行程序來執行請求。Elasticsearch中的各種任務有不同的線程池執行程序。因此,Elasticsearch需要能夠創建大量線程。檢查的最大線程數確保Elasticsearch進程有權在正常使用下創建足夠的線程,至少需要4096個線程。配置方式:
vi /etc/security/limits.conf
末尾追加:
lazy - nproc 4096
禁止內存交互
大多數操作系統嘗試使用盡可能多的內存來存儲文件系統緩存,並急切地交換掉未使用的應用程序內存。這可能導致部分JVM堆甚至其可執行頁面被換出到磁盤。交換對elasticsearch性能,節點穩定性非常不利,應該不惜一切代價避免。配置方式:
vi /etc/fstab
然後註釋掉任何有swap單詞的行
加大虛擬內存
Elasticsearch mmapfs默認使用目錄來存儲其索引。操作系統默認的mmap計數限制太低,這可能導致內存不足異常。配置方式:
vi /etc/sysctl.conf
末尾追加:
vm.max_map_count=262144
啟動集群
1、將配置好的es通過scp -r命令分發到集群其它節點
2、分別在每個節點創建賬號lazy和賬號組lazy
3、創建目錄/var/es,chown -R lazy:lazy /var/es
4、配置/etc/hosts
5、每個節點修改好系統配置(需要切換到root)
6、關閉防火牆
7、su lazy切換賬號,執行下面命令啟動:
/$ES_HOME/bin/elasticsearch -d
7、瀏覽器訪問:
http://node1:9200/_cat/health?v
http://node2:9200/_cat/health?v
http://node3:9200/_cat/health?v
安裝界面插件
elasticsearch可以通過插件方式進行功能或管理上的擴展,例如我們上面看到的通過瀏覽器對elasticsearch查詢API操作很不方便,返滬的結果界面也不太友好。我們下面來安裝一個界面友好的支持插件elasticsearch-head。安裝步驟如下:
官方安裝文檔:
https://github.com/mobz/elasticsearch-head
1、安裝node環境
cd /opt/zipwget https://nodejs.org/dist/latest-v10.x/node-v10.15.3-linux-x64.tar.gztar -zxvf node-v10.15.3-linux-x64.tar.gz -C ../soft配置NODE_HOME到/etc/profile$NODE_HOME/bin:$NODE_HOME/sbin
配置npm加速
alias cnpm="npm --registry=https://registry.npm.taobao.org
2、安裝git bzip2
yum install gityum install -y bzip2
3、下載elastic search-head插件
cd /opt/zipgit clone https://github.com/mobz/elasticsearch-head.gitcd /opt/zip/elasticsearch-headcnpm installnohup npm install &
4、瀏覽器訪問
http://node3:9100/
5、修改elasticsearch.yml配置
末尾追加如下內容:
http.cors.enabled: truehttp.cors.allow-origin: "*"
6、重啟elasticsearch
切換lazy賬號
ps aux | grep elastic | awk '{print $2}' | xargs kill -9elasticsearch -d
7、再次訪問
可以看到,安裝成功,後面我們就可以在這個插件上進行管理elasticsearch
閱讀更多 laizhiy 的文章
關鍵字: 軟件 ElasticSearch Linux