• jenkins双向备份;高可用部署;


    如果把一个Jenkins的整个目录赋值到另一个Jenkins的目录,则需要务必保持两个Jenkins版本是相同的,不然容易出现Jenkins插件兼容性问题。

    另外使用inotify+rsync备份的时候(从主Jenkins往备Jenkins备份),注意,一旦切换到备Jenkins,就要里面终止同步进程,知道为什么吗?

    原因是,如果不停止同步任务,那么主Jenkins的内容会不停的同步到备Jenkins,那么在备Jenkins上的新Jobs会被删除掉,这样备Jenkins上不能使用的。我的同步策略是,保持备Jenkins的/var/lib/jenkins目录和主Jenkins一致,那么比如/var/lib/jenkins/jobs的内容也一致

    方案是:

    1、通过keepalived实现jenkins主备,一个虚拟IP后面两个物理IP。

    2、通过inotify+rsync实现master的jobs目录、workspace(可以不同步)同步到slave上的jobs、workspace,这样切换到slave的jenkins,才能保证任务是是相同的。

    后来把整个Jenkins目录都备份了,查看yum安装的jenkins安装目录为/var/lib/jenkins,把这个目录都备份后,从主jenkins切换到备jenkins后,用户感知到的前端是完全相同的,其中包括每个Jobs的配置,slave节点配置,Jenkins的全局配置等等,其实就是同一个Jenkins,这样保持了主备的一致性。对主jenkins的一些更改,自然同步到备jenkins上。

    这些视图信息保存在/var/lib/jenkins/config.xml里

    节点信息保存在/var/lib/jenkins/nodes里

    jobs任务保存在/var/lib/jenkins/jobs里

     

    3、备机需要重启,以使从master同步过来的jobs内容在slave上的jenkins生效。

    4、一旦切换到slave,应该立即停止master向slave的同步操作,即应该立即停止rsync同步进程,不然slave上新产生的内容会被删除掉

    其实可以优化同步策略,只把主Jenkins的内容同步到备Jenkins上,而不删除备Jenkins上新增的内容

    5、同时开启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

  • 相关阅读:
    Linux学习笔记(第一章)
    C#中的抽象类有什么好处?究竟它是用来干事什么的呢?
    C#中的 增 、删、 改、 查功能
    在Visual C#中用ListView显示数据记录
    10.14JDBC之数据库连接池之C3P0
    10.19JDBC之使用C3P0连接池重新实现JDBCUtils方法
    10.12JDBC之DAO实现类的优化
    10.13JDBC之数据库连接池
    RhinoMock入门(3)——4种Mock类型
    wse说谈(3)——策略,用户令牌
  • 原文地址:https://www.cnblogs.com/shengulong/p/6764452.html
Copyright © 2020-2023  润新知