文章出處

 niubi-job是什么

  

  niubi-job是LZ耗時三個星期,費盡心血打造的一個具備高可靠性以及水平擴展能力的分布式任務調度框架,采用quartz作為底層的任務調度管理器,zookeeper做集群的管理與協調。

  

niubi-job可以做什么

  

  niubi-job與Hadoop的MR框架,包括storm等的目標不同,niubi-job主要針對的是需要定時執行,且同一時間只能有一個節點運行此任務的場景。例如,有一個定時任務是定時去請求某個API獲取交易的狀態,然后將狀態更新到數據庫里。類似于這樣的job,就非常適合niubi-job去做。

  特別強調,niubi-job強制保證同一個任務在同一時間只可能被一個節點運行,這是niubi-job最大的特征,也是用好niubi-job必須要知道的。

  

特性

  

  1、動態發布任務,通過web控制臺上傳jar包即可發布任務,發布新任務時,正在運行的任務不受任何影響。

  2、可靠性較高的災備機制,采用成熟的分布式系統解決方案zookeeper處理節點間的協作。

  3、智能負載均衡,擁有理論上無限的伸縮能力(僅master-slave模式支持)

  4、有較為詳細的任務執行日志。

  5、支持spring的運行環境。

  6、支持多種模式,例如單機模式、偽分布式以及真正的分布式。

  7、簡單易用,降低門檻。

  8、未完待續...

  

安裝使用

  

  好了,對于框架本身的介紹就暫時到這里,本文主要的任務是教會大家如何使用niubi-job。后續,LZ還會出一系列文章去講解niubi-job的框架設計,原理以及一些其它的內容,比如類加載機制等。

  

安裝要求

  

  使用niubi-job,你需要具備以下環境和軟件。

  1、JDK1.8+(正確配置JAVA_HOME,且保證java -version可以正確運行)

  2、關系型數據庫(MYSQL最佳,因為niubi-job默認的數據庫配置是mysql,請手動建立一個叫做job的數據庫)

  3、zookeeper-3.4.7。

  4、tomcat7+。

  除了以上之外,你當然還需要下載niubi-job相關的軟件。niubi-job主要分為兩部分,一部分是web控制臺,以war包方式提供,可以在tomcat等web容器當中運行。另外一部分就是節點的運行程序,以zip和tar.gz方式提供,請根據自己的操作系統自由選擇。

  下載的地址可以到LZ的個人博客里下載最新版本,地址分別如下。

  http://www.zuoxiaolong.com/download/niubi-job-cluster.zip

  http://www.zuoxiaolong.com/download/niubi-job-cluster.tar.gz

  http://www.zuoxiaolong.com/download/niubi-job-console.war

  當然了,也可以從LZ的github上面clone下來源碼自己編譯,不過這需要你的本機有maven和git,然后一一執行以下命令即可。

  git clone git@github.com:xiaolongzuo/niubi-job.git
  cd niubi-job
  mvn clean package

  執行完以上命令后,在你當前文件夾里,就會出現上面的三個文件。

  

安裝步驟

  

  好了,有了以上環境,基本上已經安裝了一半了。不要害怕,接下來很簡單,跟著LZ一起往下進行吧。

  

啟動三個zookeeper

  

  如果你已經下載好了zookeeper-3.4.7的安裝包,那么請啟動三個zookeeper。當然,一個也是完全可以的。具體的安裝步驟這里就不贅述了,搜索“zookeeper偽分布式安裝”,網絡上有大量的教程。

  LZ這里只給大家一個方便下載zookeeper的鏈接,大家可以點擊下載zookeeper-3.4.7,地址為:http://www.zuoxiaolong.com/download/zookeeper-3.4.7.tar.gz

  

啟動數據庫

  

  以mysql為例,mysql安裝的步驟不再贅述,請自行參考網絡上的資料,一把一把的。只需要切記,建立一個叫job的database就行了。niubi-job的orm框架采用hibernate,可以逆向生成數據庫的表,因此不需要數據庫的初始化腳本,只需要建立好數據庫即可。

  如果你沒有mysql數據庫,也沒有關系,在接下來自行配置一下即可。只要不是特別奇葩的關系型數據庫,相信hibernate都是支持的。

  

啟動niubi-job-console

  

  niubi-job-console是niubi-job項目的web控制臺,是給開發人員操作的Web UI界面,用它可以上傳jar包,發布和停止任務,查看節點和任務運行情況等。

  首先下載tomcat7或8,然后解壓,將niubi-job-console.war包放到tomcat容器的webapps目錄下,接下來啟動tomcat。 

  接下來,見證奇跡的時刻就到了,進入http://localhost:8080/niubi-job-console,你會看到如下界面。

  當然了,你也可能會啟動報錯,不過這沒關系,99%的可能是你數據庫或者zookeeper的配置不對,請進入到下面的文件夾

${tomcat_home}/webapps/niubi-job-console/WEB-INF/classes

  你會看到一個叫config.properties的文件,或許你需要修改一下這個文件。它的內容如下。

  

  這些參數的解釋如下,你可以根據自己的需要修改。

  connectString:zookeeper地址

  driverClass:數據庫驅動(具體的配置請根據自己的數據庫自行選擇,此外,請自行引入相應的數據庫驅動包,放在lib文件夾下)

  jdbcUrl:數據庫連接地址(ps:LZ這里默認的數據庫叫job,當然了,你如果不喜歡的話,那就改了它!)

  user & password:這兩項很明顯是用戶名和密碼了。

  hibernate.dialect:數據庫方言(ps:如果你使用了其它數據庫,記得把方言改成你的數據庫方言。)

  hibernate.*:接下來的參數就不一一介紹了,這屬于hibernate的知識,有興趣的可以自行研究下。(ps:還有很多參數在這里并沒有出現,但也同樣支持)

  

啟動niubi-job-cluster

  

  啟動好console以后,重點就來了。niubi-job-cluster是整個niubi-job項目的核心,也是最耗費LZ心血的地方。它是niubi-job中節點的應用程序,每一個啟動的節點都是集群中的一員,它們相互協作,來完成任務的調度。

  niubi-job-cluster的啟動方式比較簡單,下載完以后,解壓它,你可以看到如下目錄。

  如果你是linux或者mac操作系統,就進入bin目錄執行以下命令

sh startup.sh  

  如果你是windows系列操作系統,則雙擊startup.bat。

  如果啟動成功,則如下。(LZ的操作系統是mac,僅供參考)

   

Tips[如未遇到,請忽略]:  

  由于操作系統編碼的格式問題,可能會出現這個錯誤:bad interpreter: No such file or directory   這個時候只需要執行以下命令即可解決。   vi startup
.sh   :set ff=unix //這是在vi模式下輸入的   :wq //保存退出。   不要忘了將以上操作對shutdown.sh和bootstrap.sh同樣都做一遍。

  好了,咱們看下日志文件里面是什么,如下。

  

  到這里,你已經啟動了一個節點,niubi-job-cluster默認的模式為master-slave模式。因此進入控制臺的master-slave頁面,并且進入node manager頁面,就可以看到我們的節點了。

  接下來,我們來嘗試在一個機器上啟動多個niubi-job-cluster(偽分布式),首先將niubi-job-cluster復制出三份。然后進入每個niubi-job-cluster的conf文件夾。可以看到有一個job.properties文件,如下。

  這些參數的含義如下,可以按照自己的需要配置。

  zookeeper.addresses:zookeeper集群地址

  jar.repertory.url:console的地址

  node.mode:枚舉類型(standby和masterSlave二選一)

  shutdown.port:關閉需要監聽的端口(偽分布式主要就是把這個端口改成不一樣的,比如三個節點分別是9101,9102,9103)

  給每個niubi-job-cluster改完端口以后,就可以依次啟動另外兩個節點了。這個時候,你會看到node manager里面出現了三個節點。如下。

  好了,到這里基本上一個偽分布式的niubi-job集群已經部署好了。

  

上傳jar包和發布任務

  

  所謂的jar包,其實就是你的任務,具體的開發模板請參考LZ的github,里面有兩個示例,一個是普通的java項目,一個是基于spring的項目。地址如下。

  https://github.com/xiaolongzuo/niubi-job/tree/master/niubi-job-samples

  LZ已經給上面兩個示例項目打好了jar包(切記,打包時要把自己的依賴也打進去,同時將niubi-job-scheduler排除在外,在LZ的這兩個示例項目中,打包時只需要激活release的profile即可),可以從LZ的個人網站上下載,地址如下。

  http://www.zuoxiaolong.com/download/niubi-job-sample-common.jar

  http://www.zuoxiaolong.com/download/niubi-job-sample-spring.jar

  下載完以后,進入控制臺的upload jar界面,就可以上傳jar包了。這里需要填寫一下需要掃描的packages,這是必須要填的。如下。

  如此將兩個jar都上傳后,在job runtime manager頁面可以看到四個任務。如下。

  如圖,按照圖中所示即可進入任務發布界面,輸入cron表達式后,選擇execute,任務將會被啟動。咱們將四個任務都啟動,可以看到如下圖。

 

  接下來,我們進入node manager界面,可以看到任務是平均分配的。如下圖。

  其中master上面運行了兩個任務,而兩個子節點分別被分配了一個任務。這個時候,你可以嘗試關閉其中一個節點,你會發現任務將會被平均分配到剩下的節點當中。比如你這時候把master關掉,那么剩下的兩個slave將有一個成為master,并且剩下的兩個節點會每個有兩個任務。

  

結束語

  

  到現在為止,你的niubi-job已經搭建起來了。當然了,這只是單機版的體驗方式,真正在生產中使用的時候,需要使用真正的分布式模式,而且還需要做一些其它方面的工作,以期讓niubi-job更好的工作。比如,可以把console存儲jar包的地方,和節點下載jar后存放的位置指向同一個硬盤,這樣節點將不再需要下載jar包。

  由于本次發布的是niubi-job的第一版,因此還有很多不足之處,包括web控制臺的UI也非常粗糙。LZ歡迎大家去github上面給niubi-job提issue,或者提交PR。當然,你也可以和LZ在網上交流(聯系方式在左側),或者在下方留言。

 

未完待續......


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()