在Timer定时任务中_基于Redis自己实现一套双机互备_双活系统

该系统中使用了很多Timer来定时处理不同的任务,部署的时候为实现系统的稳定性,高可用性,


要求至少双活,或多活...本来基于SpringCloud的分布式能力,或者可以用分布式定时器,Quartz


如果以后再实现定时任务,要记得用这个吧Quartz,可以实现定时任务,关键是,可以实现定时任务


的分布式,保证同时只有一个定时任务在运行,不用自己再实现这个机制了..


但是由于之前设计这个系统的同事用到Timer,所以..现在还能继续做了..先自己实现一套再说.


思路是:


利用redis,存放服务器的IP,并且给IP打上标志位,比如{type:master , ip:10.11.12.13 , state :active ,time:2022-06-11 11:15}


1.对于主服务器:然后,系统启动以后,有定时器去,不停的检测,检测自己的IP和系统时间,跟获取出来的,redis中的,时间,和IP,是否一致,如果IP一致,就说明自己就是主服务器,并且自己的系统时间,减去redis中获取的时间,时间差没有大于超时时间,这个时候就去更新一下redis中的时间.


2.对于从服务器,启动以后也是去检测,不停的获取redis中的,{type:master , ip:10.11.12.13 , state :active ,time:2022-06-11 11:15} 数据,获取以后,用自己的IP跟获取的IP对比,发现自己不是主服务器,


然后就不做任何操作,然后不停的检测,直到检测到,自己的系统时间,和获取的redis的时间差,超过


超时时间,就说明主服务器已经不更新时间了,说明主服务器down机了,这个时候,从服务器,就可以


修改redis中的这个数据:{type:master , ip:10.11.12.13 , state :active ,time:2022-06-11 11:15}


把IP改成自己的,然后开始不停的,更新时间,同时,启动自己的定时服务开始处理数据.


3.而等主服务器恢复服务以后,主服务器会再次检测,但是检测到IP,不是自己的来,说明自己已经变成了从服务器,那么就开始做从服务器的工作不停的检测...


在Timer定时任务中_基于Redis自己实现一套双机互备_双活系统

在Timer定时任务中_基于Redis自己实现一套双机互备_双活系统

​编辑


循环上面的操作就实现了系统双活.


在Timer定时任务中_基于Redis自己实现一套双机互备_双活系统

在Timer定时任务中_基于Redis自己实现一套双机互备_双活系统

​编辑



发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章