jenkins雙向備份;高可用部署;

若是把一個Jenkins的整個目錄賦值到另外一個Jenkins的目錄,則須要務必保持兩個Jenkins版本是相同的,否則容易出現Jenkins插件兼容性問題。前端

另外使用inotify+rsync備份的時候(從主Jenkins往備Jenkins備份),注意,一旦切換到備Jenkins,就要裏面終止同步進程,知道爲何嗎?node

緣由是,若是不中止同步任務,那麼主Jenkins的內容會不停的同步到備Jenkins,那麼在備Jenkins上的新Jobs會被刪除掉,這樣備Jenkins上不能使用的。個人同步策略是,保持備Jenkins的/var/lib/jenkins目錄和主Jenkins一致,那麼好比/var/lib/jenkins/jobs的內容也一致性能

方案是:優化

一、經過keepalived實現jenkins主備,一個虛擬IP後面兩個物理IP。spa

二、經過inotify+rsync實現master的jobs目錄、workspace(能夠不一樣步)同步到slave上的jobs、workspace,這樣切換到slave的jenkins,才能保證任務是是相同的。.net

後來把整個Jenkins目錄都備份了,查看yum安裝的jenkins安裝目錄爲/var/lib/jenkins,把這個目錄都備份後,從主jenkins切換到備jenkins後,用戶感知到的前端是徹底相同的,其中包括每一個Jobs的配置,slave節點配置,Jenkins的全局配置等等,其實就是同一個Jenkins,這樣保持了主備的一致性。對主jenkins的一些更改,天然同步到備jenkins上。插件

這些視圖信息保存在/var/lib/jenkins/config.xml裏xml

節點信息保存在/var/lib/jenkins/nodes裏blog

jobs任務保存在/var/lib/jenkins/jobs裏進程

 

 

三、備機須要重啓,以使從master同步過來的jobs內容在slave上的jenkins生效。

四、一旦切換到slave,應該當即中止master向slave的同步操做,即應該當即中止rsync同步進程,否則slave上新產生的內容會被刪除掉

其實能夠優化同步策略,只把主Jenkins的內容同步到備Jenkins上,而不刪除備Jenkins上新增的內容

五、同時開啓slave的rsync進程,開始反向同步:這裏是雙向同步

基本上有下面幾個狀態:

master的jenkins工做時,開啓master的rsync進程,向slave同步

master的jenkins異常時,關閉master的rsync進程,關閉master的jenkins進程

slave的jenkins開始工做時,啓動slave的jenkins,啓動slave的rsync進程,開始向master同步

master異常恢復後,關閉slave的jenkins進程,關閉slave的rsync進程

注意這裏異常判斷條件是看虛擬IP指向那臺物理IP,指向的認爲是正常的

 

 jenkins性能提高:http://discuss.greatops.net/t/jenkins/32

相關文章
相關標籤/搜索