Flume NG高可用集群搭建詳解


、Flume NG簡述

Flume NG是一個分布式,高可用,可靠的系統,它能將不同的海量數據收集,移動並存儲到一個數據存儲系統中。輕量,配置簡單,適用於各種日志收集,並支持 Failover和負載均衡。並且它擁有非常豐富的組件。Flume NG采用的是三層架構:Agent層,Collector層和Store層,每一層均可水平拓展。其中Agent包含Source,Channel和 Sink,三者組建了一個Agent。三者的職責如下所示:
•Source:用來消費(收集)數據源到Channel組件中
•Channel:中轉臨時存儲,保存所有Source組件信息
•Sink:從Channel中讀取,讀取成功后會刪除Channel中的信息
 
下圖是Flume NG的架構圖,如下所示:

圖中描述了,從外部系統(Web Server)中收集產生的日志,然后通過Flume的Agent的Source組件將數據發送到臨時存儲Channel組件,最后傳遞給Sink組件,Sink組件直接把數據存儲到HDFS文件系統中。

 

2、單點Flume NG搭建、運行

 

我們在熟悉了Flume NG的架構后,我們先搭建一個單點Flume收集信息到HDFS集群中,由於資源有限,本次直接在之前的高可用Hadoop集群上搭建Flume。

場景如下:在NNA節點上搭建一個Flume NG,將本地日志收集到HDFS集群。


3、軟件下載

 

在搭建Flume NG之前,我們需要准備必要的軟件,具體下載地址 http://archive.apache.org/dist/flume/1.8.0/

http://mirror.bit.edu.cn/apache/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz

4、安裝與配置

安裝解壓flume安裝包,命令如下所示:

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

配置環境變量

vi /etc/profile 
export JAVA_HOME=/usr/java/jdk1.8.0_92/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

#set flume
export FLUME_HOME=/data/apps/apache-flume-1.8.0-bin
export PATH=$PATH:$FLUME_HOME/bin
 source /etc/profile

cd  /data/apps/apache-flume-1.8.0-bin/conf

修改 flume-env.sh配置如下:

export JAVA_HOME=/usr/java/jdk1.8.0_92/

flumr單節點配置文件設置如下:
flume-hdfs.conf

#agent1 name
agent1.sources=source1
agent1.sinks=sink1
agent1.channels=channel1
#Spooling Directory
#set source1
agent1.sources.source1.type=spooldir
agent1.sources.source1.spoolDir=/home/hadoop/flumetest/dir/logdfs
agent1.sources.source1.channels=channel1
agent1.sources.source1.fileHeader = false
agent1.sources.source1.interceptors = i1
agent1.sources.source1.interceptors.i1.type = timestamp
#set sink1
agent1.sinks.sink1.type=hdfs
agent1.sinks.sink1.hdfs.path=hdfs://hadoopmaster:8020/flume/logdfs
agent1.sinks.sink1.hdfs.fileType=DataStream
agent1.sinks.sink1.hdfs.writeFormat=TEXT
agent1.sinks.sink1.hdfs.rollInterval=1
agent1.sinks.sink1.channel=channel1
agent1.sinks.sink1.hdfs.filePrefix=%Y-%m-%d
agent1.sinks.sink1.hdfs.fileSuffix=.txt
#set channel1
agent1.channels.channel1.type=file
agent1.channels.channel1.checkpointDir=/home/hadoop/flumetest/dir/logdfstmp/point
agent1.channels.channel1.dataDirs=/home/hadoop/flumetest/dir/logdfstmp

5、單節點flume啟動

啟動命令如下:

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

注:命令中的agent1表示配置文件中的Agent的Name,如配置文件中的agent1。flume-hdfs.conf表示配置文件所在配置,需填寫准確的配置文件路徑。

6、單節點flume效果預覽

在/home/hadoop/flumetest/dir/logdfs下編輯文件test.txt並任意寫入內容,保存后,文件會立即上傳hdfs,並被標記完成。

運行效果如下:

頁面可查看已上傳並重命名的文件:

7、高可用Flume NG搭建

在完成單點的Flume NG搭建后,下面我們搭建一個高可用的Flume NG集群,架構圖如下所示:

圖中,我們可以看出,Flume的存儲可以支持多種,這里只列舉了HDFS和Kafka(如:存儲最新的一周日志,並給Storm系統提供實時日志流)。

7.1、Flume的Agent和Collector分布如下表所示:

3台機器構建集群。Flume的Agent和Collector分布如下表所示:

圖中所示,Agent1,Agent2,Agent3數據分別流入到Collector1和Collector2,Flume NG本身提供了Failover機制,可以自動切換和恢復。在上圖中,有3個產生日志服務器分布在不同的機房,要把所有的日志都收集到一個集群中存儲。下 面我們開發配置Flume NG集群

7.2、flume集群配置

配置Agent1,Agent2,Agent3,分別位於192.168.50.100-102三台機器,配置相同,如下所示:
flume-client.properties

#agent1 name
agent1.channels = c1
agent1.sources = r1
agent1.sinks = k1 k2
#set gruop
agent1.sinkgroups = g1
#set channel
agent1.channels.c1.type = memory
agent1.channels.c1.capacity = 1000
agent1.channels.c1.transactionCapacity = 100
agent1.sources.r1.channels = c1
agent1.sources.r1.type = exec
agent1.sources.r1.command = tail -F /home/hadoop/flumetest/dir/logdfs/flumetest.log
agent1.sources.r1.interceptors = i1 i2
agent1.sources.r1.interceptors.i1.type = static
agent1.sources.r1.interceptors.i1.key = Type
agent1.sources.r1.interceptors.i1.value = LOGIN
agent1.sources.r1.interceptors.i2.type = timestamp
# set sink1
agent1.sinks.k1.channel = c1
agent1.sinks.k1.type = avro
agent1.sinks.k1.hostname = hadoopmaster
agent1.sinks.k1.port = 52020
# set sink2
agent1.sinks.k2.channel = c1
agent1.sinks.k2.type = avro
agent1.sinks.k2.hostname = hadoopslave1
agent1.sinks.k2.port = 52020
#set sink group
agent1.sinkgroups.g1.sinks = k1 k2
#set failover
agent1.sinkgroups.g1.processor.type = failover
agent1.sinkgroups.g1.processor.priority.k1 = 10
agent1.sinkgroups.g1.processor.priority.k2 = 1
agent1.sinkgroups.g1.processor.maxpenalty = 10000

配置Collector1和Collector2,分別位於192.168.50.100-101兩台台機器,綁定的IP(或主機名)不同,需要修改為各自所在機器的IP(或主機名)
192.168.50.100(hadoopmaster)的flume-server.properties配置如下:

#set Agent name
a1.sources = r1
a1.channels = c1
a1.sinks = k1
#set channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# other node,nna to nns
a1.sources.r1.type = avro
a1.sources.r1.bind = hadoopmaster
a1.sources.r1.port = 52020
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = static
a1.sources.r1.interceptors.i1.key = Collector
a1.sources.r1.interceptors.i1.value = hadoopmaster
a1.sources.r1.channels = c1
#set sink to hdfs
a1.sinks.k1.type=hdfs
a1.sinks.k1.hdfs.path=hdfs://hadoopmaster:8020/flume/logdfs
a1.sinks.k1.hdfs.fileType=DataStream
a1.sinks.k1.hdfs.writeFormat=TEXT
a1.sinks.k1.hdfs.rollInterval=1
a1.sinks.k1.channel=c1
a1.sinks.k1.hdfs.filePrefix=%Y-%m-%d
a1.sinks.k1.hdfs.fileSuffix=.txt  

192.168.50.101(hadoopslave1)的flume-server.properties配置如下:

#set Agent name
a1.sources = r1
a1.channels = c1
a1.sinks = k1
#set channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# other node,nna to nns
a1.sources.r1.type = avro
a1.sources.r1.bind = hadoopslave1
a1.sources.r1.port = 52020
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = static
a1.sources.r1.interceptors.i1.key = Collector
a1.sources.r1.interceptors.i1.value = hadoopslave1
a1.sources.r1.channels = c1
#set sink to hdfs
a1.sinks.k1.type=hdfs
a1.sinks.k1.hdfs.path=hdfs://hadoopmaster:8020/flume/logdfs
a1.sinks.k1.hdfs.fileType=DataStream
a1.sinks.k1.hdfs.writeFormat=TEXT
a1.sinks.k1.hdfs.rollInterval=1
a1.sinks.k1.channel=c1
a1.sinks.k1.hdfs.filePrefix=%Y-%m-%d
a1.sinks.k1.hdfs.fileSuffix=.txt

7.3、flume集群啟動

在Collector各節點上啟動命令如下所示:

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

注:命令中的a1表示配置文件中的Agent的Name,如配置文件中的a1。flume-server.properties表示配置文件所在配置,需填寫准確的配置文件路徑。
在Agent各節點上啟動命令如下所示:

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

注:命令中的agent1表示配置文件中的Agent的Name,如配置文件中的agent1。flume-client.properties表示配置文件所在配置,需填寫准確的配置文件路徑。

7.4、Flume NG集群的高可用(故障轉移)測試

場景如下:我們在Agent1節點上傳文件,由於我們配置Collector1的權重比Collector2大,所以 Collector1優先采集並上傳到存儲系統。然后我們kill掉Collector1,此時有Collector2負責日志的采集上傳工作,之后,我 們手動恢復Collector1節點的Flume服務,再次在Agent1上次文件,發現Collector1恢復優先級別的采集工作。具體截圖如下所 示:
Collector1優先上傳:

HDFS集群中上傳的log內容預覽:

Collector1宕機,Collector2獲取優先上傳權限:

 

HDFS文件系統中的截圖預覽:

 

 

 上傳的文件內容預覽:

8、總結

在配置高可用的Flume NG時,需要注意一些事項。在Agent中需要綁定對應的Collector1和Collector2的IP和Port,另外,在配置Collector 節點時,需要修改當前Flume節點的配置文件,Bind的IP(或HostName)為當前節點的IP(或HostName),最后,在啟動的時候,指定配置文件中的Agent的Name和配置文件的路徑,否則會出錯。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM