1、 Elasticsearch集群部署
-
服務器
安裝軟件 | 主機名 | IP地址 | 系統版本 | 配置 |
---|---|---|---|---|
Elasticsearch | Elk | 10.3.145.14 | centos7.5.1804 | 2核4G |
Elasticsearch | Es1 | 10.3.145.56 | centos7.5.1804 | 2核3G |
Elasticsearch | Es2 | 10.3.145.57 | centos7.5.1804 | 2核3G |
-
軟件版本:elasticsearch-7.13.2.tar.gz
-
示例節點:10.3.145.14
1、安裝配置jdk
可以自行安裝,es安裝包中自帶了jdk
2、安裝配置ES
(1)創建運行ES的普通用戶
[root@elk ~]# useradd es
[root@elk ~]# echo "******" | passwd --stdin "es"
(2)安裝配置ES
[root@elk ~]# tar zxvf /usr/local/package/elasticsearch-7.13.2-linux-x86_64.tar.gz -C /usr/local/
[root@elk ~]# mv /usr/local/elasticsearch-7.13.2 /usr/local/es
[root@elk ~]# vim /usr/local/es/config/elasticsearch.yml
cluster.name: bjbpe01-elk
cluster.initial_master_nodes: ["192.168.1.101","192.168.1.102","192.168.1.103"] # 單節點模式這里的地址只填寫本機地址
node.name: elk01
node.master: true
node.data: true
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
# 單節點模式下,將discovery開頭的行注釋
discovery.seed_hosts: ["192.168.1.102","192.168.1.103"]
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 150s
discovery.zen.fd.ping_retries: 10
client.transport.ping_timeout: 60s
http.cors.enabled: true
http.cors.allow-origin: "*"配置項含義
cluster.name 集群名稱,各節點配成相同的集群名稱。
cluster.initial_master_nodes 集群ip,默認為空,如果為空則加入現有集群,第一次需配置
node.name 節點名稱,各節點配置不同。
node.master 指示某個節點是否符合成為主節點的條件。
node.data 指示節點是否為數據節點。數據節點包含并管理索引的一部分。
path.data 數據存儲目錄。
path.logs 日志存儲目錄。
bootstrap.memory_lock 內存鎖定,是否禁用交換,測試環境建議改為false。
bootstrap.system_call_filter 系統調用過濾器。
network.host 綁定節點IP。
http.port rest api端口。
discovery.seed_hosts 提供其他 Elasticsearch 服務節點的單點廣播發現功能,這里填寫除了本機的其他ip
discovery.zen.minimum_master_nodes 集群中可工作的具有Master節點資格的最小數量,官方的推薦值是(N/2)+1,其中N是具有master資格的節點的數量。
discovery.zen.ping_timeout 節點在發現過程中的等待時間。
discovery.zen.fd.ping_retries 節點發現重試次數。
http.cors.enabled 是否允許跨源 REST 請求,用于允許head插件訪問ES。
http.cors.allow-origin 允許的源地址。
(3)設置JVM堆大小#7.0默認為4G
[root@elk ~]# sed -i 's/## -Xms4g/-Xms4g/' /usr/local/es/config/jvm.options
[root@elk ~]# sed -i 's/## -Xmx4g/-Xmx4g/' /usr/local/es/config/jvm.options注:確保堆內存最小值(Xms)與最大值(Xmx)的大小相同,防止程序在運行時改變堆內存大小。
如果系統內存足夠大,將堆內存最大和最小值設置為31G,因為有一個32G性能瓶頸問題。
堆內存大小不要超過系統內存的50%
(4)創建ES數據及日志存儲目錄
[root@elk ~]# mkdir -p /data/elasticsearch/data
[root@elk ~]# mkdir -p /data/elasticsearch/logs
(5)修改安裝目錄及存儲目錄權限
[root@elk ~]# chown -R es.es /data/elasticsearch
[root@elk ~]# chown -R es.es /usr/local/es
3、系統優化
(1)增加最大文件打開數
[root@elk ~]# echo "* soft nofile 65536" >> /etc/security/limits.conf
(2)增加最大進程數
[root@elk ~]# echo "* soft nproc 65536" >> /etc/security/limits.conf或者
* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096
更多的參數調整可以直接用這個
(3)增加最大內存映射數
[root@elk ~]# echo "vm.max_map_count=262144" >> /etc/sysctl.conf
[root@elk ~]# sysctl -p
(4)啟動遇到下面問題解決辦法
memory locking requested for elasticsearch process but memory is not locked
elasticsearch.yml文件
bootstrap.memory_lock : false
/etc/sysctl.conf文件
vm.swappiness=0錯誤:
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]意思是elasticsearch用戶擁有的客串建文件描述的權限太低,知道需要65536個解決:切換到root用戶下面,[root@elk ~]# vim /etc/security/limits.conf在最后添加
* hard nofile 65536
* hard nproc 65536
重新啟動elasticsearch,還是無效?
必須重新登錄啟動elasticsearch的賬戶才可以,例如我的賬戶名是elasticsearch,退出重新登錄。
另外*也可以換為啟動elasticsearch的賬戶也可以,* 代表所有,其實比較不合適啟動還會遇到另外一個問題,就是
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
意思是:elasticsearch用戶擁有的內存權限太小了,至少需要262114。這個比較簡單,也不需要重啟,直接執行
sysctl -w vm.max_map_count=262144
就可以了
4、啟動ES
以ES用戶啟動
[root@elk ~]# su - es -c "cd /usr/local/es && nohup bin/elasticsearch &"
測試:瀏覽器訪問http://10.3.145.14:9200
5.安裝配置head監控插件 (只在第一臺es部署)
-
服務器
安裝軟件 | 主機名 | IP地址 | 系統版本 | 配置 |
---|---|---|---|---|
Elasticsearch-head-master |
(1)安裝node
[root@elk ~]# wget https://npm.taobao.org/mirrors/node/latest-v10.x/node-v10.0.0-linux-x64.tar.gz
[root@elk ~]# tar -zxf node-v10.0.0-linux-x64.tar.gz –C /usr/local
[root@elk ~]# echo "
NODE_HOME=/usr/local/node-v10.0.0-linux-x64
PATH=\$NODE_HOME/bin:\$PATH
export NODE_HOME PATH
" >>/etc/profile
[root@elk ~]# source /etc/profile
[root@elk ~]# node --version #檢查node版本號
(2)下載head插件
[root@elk ~]# wget https://github.com/mobz/elasticsearch-head/archive/master.zip
[root@elk ~]# unzip -d /usr/local elasticsearch-head-master.zip
(3)安裝grunt
[root@elk ~]# cd /usr/local/elasticsearch-head-master
[root@elk elasticsearch-head-master]# npm install -g grunt-cli
[root@elk elasticsearch-head-master]# grunt -version #檢查grunt版本號
(4)修改head源碼
[root@elk ~]# vi /usr/local/elasticsearch-head-master/Gruntfile.js +99
添加hostname,注意在上一行末尾添加逗號,
hostname 不需要添加逗號
[root@elk ~]# vim /usr/local/elasticsearch-head-master/_site/app.js +4388
原本是http://localhost:9200
,如果head和ES不在同一個節點,注意修改成ES的IP地址
(5)下載head必要的文件
[root@elk ~]# wget https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@elk ~]# yum -y install bzip2
[root@elk ~]# mkdir /tmp/phantomjs
[root@elk ~]# mv phantomjs-2.1.1-linux-x86_64.tar.bz2 /tmp/phantomjs/
[root@elk ~]# chmod 777 /tmp/phantomjs -R
(6)運行head
[root@elk ~]# cd /usr/local/elasticsearch-head-master/
[root@elk elasticsearch-head-master]# npm install
[root@elk elasticsearch-head-master]# nohup grunt server &
[root@elk elasticsearch-head-master]# ss -tnlp
nohup grunt server --allow-root &
npm install 執行錯誤解析:
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! phantomjs-prebuilt@2.1.16 install: `node install.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the phantomjs-prebuilt@2.1.16 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2021-04-21T09_49_34_207Z-debug.log解決:
[root@elk elasticsearch-head-master]# npm install phantomjs-prebuilt@2.1.16 --ignore-scripts # 具體的版本按照上述報錯修改
(7)測試
訪問http://10.3.145.14:9100
2. Logstash部署
-
服務器
安裝軟件 | 主機名 | IP地址 | 系統版本 | 配置 |
---|---|---|---|---|
Logstash | Elk | 10.3.145.14 | centos7.5.1804 | 2核4G |
-
軟件版本:logstash-7.13.2.tar.gz
1.安裝配置Logstash
Logstash運行同樣依賴jdk,本次為節省資源,故將Logstash安裝在了10.3.145.14節點。
(1)安裝
[root@elk ~]# tar zxf /usr/local/package/logstash-7.13.2.tar.gz -C /usr/local/
(2)測試文件
標準輸入=>標準輸出及es集群
1、啟動logstash
2、啟動后直接在終端輸入數據
3、數據會由logstash處理后返回并存儲到es集群中
input {tcp {port => 8888}
}
filter {grok {match => {"message" => "%{DATA:key} %{NUMBER:value:int}"} }
}
output {stdout {codec => rubydebug}elasticsearch {hosts => ["10.3.145.14","10.3.145.56","10.3.145.57"]index => 'logstash-debug-%{+YYYY-MM-dd}'}
}
(3)啟動
[root@elk ~]# cd /usr/local/logstash-7.13.2
[root@elk ~]# nohup bin/logstash -f etc/conf.d/ --config.reload.automatic &
3、Kibana部署
-
?服務器
安裝軟件 | 主機名 | IP地址 | 系統版本 | 配置 |
---|---|---|---|---|
Kibana | Elk | 10.3.145.14 | centos7.5.1804 | 2核4G |
軟件版本:nginx-1.14.2、kibana-7.13.2-linux-x86_64.tar.gz |
1. 安裝配置Kibana
(1)安裝
[root@elk ~]# tar zxf kibana-7.13.2-linux-x86_64.tar.gz -C /usr/local/
(2)配置
[root@elk ~]# echo '
server.port: 5601
server.host: "192.168.181.128"
elasticsearch.hosts: ["http://192.168.181.128:9200"]
kibana.index: ".kibana"
i18n.locale: "zh-CN"
'>>/usr/local/kibana-7.13.2-linux-x86_64/config/kibana.yml含義:
server.port kibana服務端口,默認5601
server.host kibana主機IP地址,默認localhost
elasticsearch.url 用來做查詢的ES節點的URL,默認http://localhost:9200
kibana.index kibana在Elasticsearch中使用索引來存儲保存的searches, visualizations和dashboards,默認.kibana
(3)啟動
[root@elk ~]# cd /usr/local/kibana-7.13.2-linux-x86_64/
[root@elk ~]# nohup ./bin/kibana &
./bin/kibana --allow-root
4、Filebeat部署
為什么用 Filebeat ,而不用原來的 Logstash 呢?
原因很簡單,資源消耗比較大。
由于 Logstash 是跑在 JVM 上面,資源消耗比較大,后來作者用 GO 寫了一個功能較少但是資源消耗也小的輕量級的 Agent 叫 Logstash-forwarder。
后來作者加入 elastic.co 公司, Logstash-forwarder 的開發工作給公司內部 GO 團隊來搞,最后命名為 Filebeat。
Filebeat 需要部署在每臺應用服務器上,可以通過 Salt 來推送并安裝配置。
-
服務器
安裝軟件 | 主機名 | IP地址 | 系統版本 | 配置 |
---|---|---|---|---|
filebeat | Kafka3 | 10.3.145.43 | centos7.5.1804 | 1核2G |
-
軟件版本 filebeat-7.13.2-x86_64.rpm
(1)下載
[root@kafka3 ~]# curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.13.2-x86_64.rpm
(2)解壓
[root@kafka3 ~]# yum install -y filebeat-7.13.2-x86_64.rpm
(3)修改配置
修改 Filebeat 配置,支持收集本地目錄日志,并輸出日志到 Kafka 集群中
[root@kafka3 ~]# vim filebeat.yml
filebeat.inputs:
- type: logenabled: truepaths:- /var/log/nginx/access.log
output.logstash:hosts: ["10.3.145.14:5000"]output.kafka: hosts: ["10.3.145.41:9092","10.3.145.42:9092","10.3.145.43:9092"]topic: 'nginx'# 注意,如果需要重新讀取,請刪除/data/registry目錄
(4)啟動
[root@kafka3 ~]# ./filebeat -e -c filebeat.yml