1. 程式人生 > >flume ng高可用部署

flume ng高可用部署

一、flume簡介
flume是一個高可用的,高可靠的,分散式的海量日誌採集、聚合和傳輸系統,Flume支援在日誌系統中定製各類資料傳送方,用於收集資料;同時,Flume提供對資料進行簡單的處理,並寫到各類資料接受方(可定製)的能力。Flume1.x版本的統稱為Flume-ng。
資料處理:
Flume提供了從console(控制檯)、RPC(Thrift-RPC)、text、tail、syslog(syslog日誌系統),支援TCP和UDP等2兩種模式,exec(命令執行)等資料來源上收集資料的能力。
Flume NG採用的是三層架構: Agent層,Collector層,和Store層,每一層均可水平拓展。其中Agent包含Source,Channel和Sink,三者組建了一個Agent。三者的作用:
Source:用來消費(收集)資料來源到Channel元件中。
Channel:中轉臨時儲存,儲存所有Source元件資訊。
Sink:從Channel中讀取,讀取成功後會刪除Channel中的資訊。

二、單點FlumeNG搭建、執行。
這裡我用的是Flume-1.6.0版本。
安裝解壓flume安裝包,命令如下所示:

    tar -zxvf apache-flume-1.6.0-bin.tar.gz  

配置環境變數:
這裡寫圖片描述

flume單節點配置檔案設定如下:
flume-hdfs.conf
這裡寫圖片描述

複製flume-env.sh

cp flume-env.sh.template flume-env.sh

加入jdk配置:

export JAVA_HOME=/usr/local/jdk1.7.0_79

注意: 配置中的目錄需提前建立

執行:
啟動命令如下:

flume-ng agent --conf conf --conf-file /home/hadoop/flume-1.6.0/conf/flume-hdfs.conf --name agent1 -Dflume.root.logger=INFO,console > /home/hadoop/flume-1.6.0/logs/flume-hdfs.log 2>&1 &

注:命令中的agent1表示配置檔案中的Agent的Name,flume-hdfs.conf要寫準確的檔案路徑。

單節點flume效果預覽:
這裡寫圖片描述

hadoopweb頁面可以檢視已上傳並重命名的檔案:
這裡寫圖片描述

三、高可用的Flume NG搭建
架構圖:
這裡寫圖片描述

Flume的儲存可以支援很多種,這裡只列舉了HDFS和Kafka。比如:儲存一定時間的日誌,並給Storm系統提供實時日誌流。

3臺機器構建叢集。Flume的Agent和Collector分佈如下:

名稱            HOST          角色
Agent1        db1           Web Server
Agent2        db2           Web Server
Agent3        db3           Web Server
Collector1    db1           AgentMstr1
Collector2    db3           AgentMstr1

Agent1、Agent2、Agent3,分別位於db1-db3三臺機器上,配置相同,如下所示:
flume-client.properties
這裡寫圖片描述

接下來再配置Collector1和Collector2,分別位於db1和db3兩臺機器,繫結IP的不同,
db1(master)flume-server.properties配置如下:
這裡寫圖片描述

db3(slave)的配置如下:
這裡寫圖片描述

其中的屬性描述:
agent.channels.ch1.type :Agent的channel型別
a1.sinks.k1.type = hdfs : Sink型別
a1.sinks.k1.hdfs.path = hdfs://bi/flume/logdfs : Sink型別
a1.sinks.k1.hdfs.fileType = DataStream : 流資料的檔案型別
a1.sinks.k1.hdfs.writeFotmat=TEXT : 資料寫入格式
a1.sinks.k1.hdfs.rollInterval=1 : hdfs sink 間隔多長將臨時檔案滾動成最終目標檔案,單位是秒;如果設定為0,則表示不根據時間來滾動檔案
agent.sinks.k1.hdfs.rollCount : 當events資料達到該數量時候,將臨時檔案滾動成目標檔案;如果設定成0,則表示不根據events資料來滾動檔案

flume叢集啟動:
在 Collector各節點上啟動命令如下:

flume-ng agent --conf conf --conf-file /home/hadoop/flume-1.6.0/conf/flume-server.properties --name a1 -Dflume.root.logger=INFO,console > /home/hadoop/flume-1.6.0/logs/flume-server.log 2>&1 &

注:命令中的a1 表示配置中的Agent的Name,如配置檔案中的a1。配置檔案填準確的地址

在Agent各節點上啟動命令:

flume-ng agent --conf conf --conf-file /home/hadoop/flume-1.6.0/conf/flume-client.properties --name agent1 -Dflume.root.logger=INFO,console > /home/hadoop/flume-1.6.0/logs/flume-client.log 2>&1 &

注:命令中的agent1表示配置檔案中的Agent的Name。

FlumeNG叢集的HA測試:
場景如下:我在Agent1節點上傳檔案,由於配置Collector1的權重比Collector2大,所以Collector1優先採集並上傳到儲存系統。然後我們kill掉Collector1,再重新編輯該檔案,此時由Collector2負責日誌採集上傳工作,之後,我們手動啟動Collector1節點的Flume服務,再次在Agent1編輯該檔案,發現Collector2恢復優先級別的採集工作。

四、總結

在配置高可用的Flume NG時,在Agent中需要繫結對應的Collector1和Collector2的IP和Port,另外,在配置Collector節點時,需要修改當前FLume節點的配置檔案中的bind和IP port。