ELFK 開源日志平臺實戰部署之 ES 集群搭建
接下來幾篇文章分享一下日志平臺ELFK的搭建,由于篇幅問題,我拆成幾篇文章來寫。
整體實驗架構:
完整的架構在filebeat和logstash之間應該還有消息隊列,如kafka,但是中小型公司用上面架構已經足夠了。后期再講有kafka的架構,適合大型公司。
一、環境準備
1. 基礎信息
IP | 角色 | 內存要求 |
10.0.0.41 | kibana+es集群節點1 | 建議2G或以上 |
10.0.0.42 | es集群節點2 | 建議2G或以上 |
10.0.0.43 | es集群節點3+logstash | 建議2G或以上 |
10.0.0.44 | filebeat+被采集日志的服務器 | 建議1G或以上 |
其他部署信息:
- 目前最新9.0.3版本,本次安裝版本為:8.18.2
- 支持Java 11或更高版本
- 操作系統openEuler 22.04,同樣適用于其他redhat系列系統
注意es,logstash,kibana,filebeat都要使用相同版本
2. 配置主機名
# 設置主機名,根據自己定義設置每個節點名字
hostnamectl set-hostname xxx
3. 配置hosts文件
所有節點操作:
# 配置每個節點的hosts文件
cat >> /etc/hosts <<EOF
10.0.0.41 elk01
10.0.0.42 elk02
10.0.0.43 elk03
10.0.0.44 filebeat
EOF
4. 關閉防火墻和selinux
所有節點操作:
# 關閉防火墻
systemctl disable --now firewalld
# 關閉SELinux
setenforce 0
sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
二、ES集群部署
Elasticsearch(簡稱ES)是一個開源的分布式搜索引擎(在這里用于搜索日志),Elasticsearch還是一個分布式文檔數據庫。所以可以使用多臺服務器來實現ES集群。
下載地址:https://www.elastic.co/downloads/past-releases#elasticsearch
1. 所有節點上安裝jdk
ES是java開發的軟件,需要安裝Java,而Elasticsearch 8.x 需要Java 11或更高版本。可以使用yum安裝OpenJDK:
# 可以先查看一下本地版本再安裝
rpm -qa |grep jdk
# 如果沒有就安裝,如果是jdk8就卸載再安裝
yum install java-11-openjdk -y
# 檢查版本
java -version
2. 所有es節點安裝es
上傳或下載軟件包到所有es節點,直接使用rpm命令安裝
rpm -ivh elasticsearch-8.18.2-x86_64.rpm
3. 分別配置es
節點1為例,其他節點配置一樣,修改一下node.name即可
# vi /etc/elasticsearch/elasticsearch.yml
# 主要修改下面幾個參數
cluster.name: elk-cluster
node.name: 10.0.0.41
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["10.0.0.41", "10.0.0.42", "10.0.0.43"]
cluster.initial_master_nodes: ["10.0.0.41", "10.0.0.42", "10.0.0.43"]
# 注意后面還有一個cluster.initial_master_nodes需要注釋掉,不然啟動出錯
# 查看配置
grep -Ev "^#|^$" /etc/elasticsearch/elasticsearch.yml
參數說明:
參數 | 說明 |
cluster.name | 集群名, 3個節點同一個名 |
node.name | 節點名稱,不是IP(每個節點名稱不一樣) |
path.data | 數據目錄 |
path.logs | ES自己的日志目錄 |
network.host | 服務監聽的范圍, 0.0.0.0表示所有IP都可以訪問 |
http.port | 9200是給logstash,kibana等連接使用的端口 |
discovery.seed_hosts | 組成集群的節點IP列表 |
cluster.initial_master_nodes | 初始能成為master節點的IP列表(默認會自動選一個做為master) |
4. 關閉 X-Pack 安全
從Elasticsearch 8.x+版本開始默認啟用了 TLS(X-Pack 安全),即使你沒主動配置它。
如果沒有正確配置證書、信任鏈或關閉安全模塊,就會導致你現在這種“啟動成功但端口返回空”的現象。
我這里先關閉。修改配置文件 /etc/elasticsearch/elasticsearch.yml,將下面幾個參數設置為false:
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
xpack.security.http.ssl:
enabled: false
keystore.path: certs/http.p12
xpack.security.transport.ssl:
enabled: false
然后重啟 Elasticsearch:
systemctl restart elasticsearch
注意:生產環境一般都開啟xpack,后續文章我再詳細寫,先部署一個簡單的。
5. 設置內存大小
設置Elasticsearch使用的內存大小,視情況而定:我機器是4G的內存,我給es分配2G:
vi /etc/elasticsearch/jvm.options
6. 所有es節點啟動服務
# 啟動es并設置開機自啟動
systemctl enable --now elasticsearch
# netstat -ntlup |grep java
tcp6 0 0 :::9200 :::* LISTEN 63544/java
tcp6 0 0 :::9300 :::* LISTEN 63544/java
端口說明:
- 9200則是數據傳輸端口,被kibana,logstash等連接
- 9300端口是集群通信端口, 組建集群用
7. 查看集群狀態
使用curl命令或瀏覽器訪問查看集群狀態(10.0.0.41可換成任意集群節點IP)
[root@elk01 ~]# curl http://10.0.0.41:9200/_cluster/health?pretty
{
"cluster_name" : "elk-cluster", # 集群名
"status" : "green", # 集群狀態,green代表集群OK
"timed_out" : false,
"number_of_nodes" : 3, # 集群總節點數
"number_of_data_nodes" : 3, # 數據節點數
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
說明:
- http://10.0.0.42:9200/_cluster/health?pretty為查看ES集群狀態的API,前面可不加http://開頭
- 結果格式為json格式(用key: value鍵值對來表示數據)
8. 查看集群節點狀態
使用curl命令或瀏覽器訪問查看集群節點狀態(10.0.0.41可換成任意集群節點IP)
# curl 10.0.0.41:9200/_cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.0.0.42 29 93 0 0.00 0.01 0.05 dilm * 10.0.0.42
10.0.0.43 14 89 0 0.00 0.01 0.05 dilm - 10.0.0.43
10.0.0.41 21 99 0 0.00 0.01 0.05 dilm - 10.0.0.41
說明:
- master列中帶*號的表示為master節點
- 10.0.0.42:9200/_cat/nodes?v 為查看集群節點狀態的API, 可以不加http://開頭
9. 瀏覽器訪問
輸入其中一個IP地址+9200端口即可訪問。因為我關閉了x-pack安全模塊,沒有賬號密碼也可以進去
現在ES集群已經部署完了,下一篇文章部署logstash。