Flink Standalone集群jobmanagers高可用配置


    上篇文章簡單敘述了Flink standalone集群的基礎部署,在生產環境中假如只有1個jobmanager的話,那么這個節點一旦掛掉,所有運行的task都會中斷,帶來的影響比較大,因此在生產環境至少要保證jobmanager的高可用,至少2個節點,也可以將jobmanager和taskmanager兩個實例運行到1個物理節點上,多個taskmanager和多個jobmanager並存實現高可用,高可用需要依賴zookeeper的故障恢復,因此要先准備好zookeeper集群,建議獨立搭建zookeeper集群,不要用flink內置的單節點zookeeper,之前原有的環境如下:

    bigdata1 - jobmanager

    bigdata2,bigdata3,bigdata4 - taskmanager

    目前zookeeper集群為:bigdata1,bigdata2,bigdata3,端口號為2181

    接下來要進行jobmanager擴展,在bigdata4上面運行jobmanager,和bigdata1的jobmanager共同實現高可用. 

    首先在一個節點開始配置,這里現在bigdata1開始配置:

    配置:conf/flink-conf.yaml 找到High Availability配置部分,這部分默認都是注釋的也就是不使用高可用,需要手動去掉注釋並且添加一些配置項,具體配置如下:

high-availability: zookeeper
high-availability.storageDir: file:///data/flink/ha
high-availability.zookeeper.quorum: bigdata1:2181,bigdata2:2181,bigdata3:2181
high-availability.zookeeper.path.root: /flink
high-availability.cluster-id: /flink_cluster

    high-availability默認是NONE,表示不使用高可用,這里改成zookeeper

    high-availability.storageDir 這個是高可用中用於存儲一些較大的對象用於恢復,文檔中建議配置所有節點都可以訪問到的資源,推薦使用hdfs,這里配置的是本地文件系統,具體有效性需要驗證,建議生產環境使用hdfs

    high-availability.zookeeper.quorum 配置zookeeper集群

    high-availability.zookeeper.path.root  配置flink在zookeeper中的path,整個集群要統一,這里是/flink;如果是多個flink集群使用同一個zookeeper集群,那么這里要區分開. 

    high-availability.cluster-id   集群的標識,整個集群要一致,在zookeeper下以及storageDir下都有這個cluster-id指定的目錄,用於存放必須的協調數據

    上面這些配置無誤后,保存文件

    配置masters,文件:conf/masters,添加bigdata4的節點

    

    同時conf/slaves保持不變,仍然為bigdata2,bigdata3,bigdata4

    然后將flink-conf.yaml和masters配置同步到集群其他所有節點,同時保證zookeeper服務已經正常運行 

    執行: bin/start-cluster.sh 啟動集群,啟動后會發現bigdata4多出了StandaloneSessionClusterEntrypoint進程,這個時候通過zookeeper客戶端執行 get /flink/flink_cluster/leader/rest_server_lock 查看當前的jobmanager master可以一般會看到是bigdata1

    

    然后可以嘗試將bigdata1上面的StandaloneSessionClusterEntrypoint進程kill掉,通過bigdata4:8081訪問web ui,這個時候故障轉移flink日志可能會報錯,稍微等待一段時間,然后界面就會加載成功,正常看到slots和task managers以及詳細的任務,說明這個時候jobmanager成功進行了故障轉移,實現了高可用,同時查看zookeeper上面的節點也會切換成bigdata4了

    另外注意配置高可用之后,之前的flink-conf.yaml中的配置項jobmanager.rpc.port就不再生效,這個配置項只針對之前的單個jobmanager的獨立集群,現在這個端口會自動選擇並且多個jobmanager都是不一樣的,但是我們不用去關心他,對使用flink沒有任何影響. 

    以上就是flink jobmanager高可用的配置,配置起來還是比較簡單的,推薦在生產環境中使用,集群穩定性更好. 

    參考文檔: https://ci.apache.org/projects/flink/flink-docs-release-1.9/zh/ops/jobmanager_high_availability.html 

    對於新版的flink有時候可能是偶然的原因導致第一次啟動flink集群的時候報一些莫名其妙的錯誤死活啟動不起來,這個時候可以嘗試重啟zookeeper集群,刪除對應的/flink節點或者調大zookeeper tickTime,再啟動flink集群一般就正常了. 


免責聲明!

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



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