集群服务器定时任务,只运行一个定时器的设计

(1)只在一台服务器上部署该定时任务代码。

(2)在定时任务代码上加上某个特定的ip限制,仅某个ip的服务器能运行该定时任务。

(3)利用数据库的共享锁事务管理机制来运行定时任务。

   第一步:新建一张数据库表,表有三个字段:status(表当前定时器是否处于可运行状态)、timestamp(时间戳)、serverIP(正在运行定时器的服务器IP)。

   第二步:检查是否有机器正在运行定时任务。检查方法:update定时任务表的status字段为1(1为执行中,0为未执行)、ip为自己的ip,如果update失败,则证明有机器在执行该定时任务,该机器的定时任务就不执行了,成功则进行第三步。

   第三步:执行定时任务的具体内容,结束还原excute字段为0。

另外:

  首先,我们先在数据库建一个表:timerT,表里面有三个字段:status(表当前定时器是否处于可运行状态)、timestamp(时间戳)、serverIP(正在运行定时器的服务器IP)。

这里其具体的用法是:当两台服务器,都运行起来后,服务器A开始执行定时器,这时,A会去读取表timerT的status字段,当为0时,则执行定时器的业务逻辑,此时A定时器,需要把status改为1,以便让另一台服务器的定时器B不去执行业务逻辑并把当前服务器的IP记录到表中,同时修改启动一个新的线程,在XXX长的时间间隔内不断去修改timestamp的值,当A执行完业务逻辑时,就把status的值改为0,这样B定时器就可以执行。

  这样做可以解决一个问题,就是:当其中一个定时器A挂掉后,我们另一个定时器B,可以比对timestap的值与当前时间是否超过XXX时长,如果超过,则证明定时器A已经挂掉,这时B就会把status的值改成1,把serverIP改成B定时器所在的服务器IP,并执行业务逻辑。

原文地址:https://www.cnblogs.com/lgg20/p/12329568.html

时间: 2024-10-11 05:11:52

集群服务器定时任务,只运行一个定时器的设计的相关文章

集群服务器+定时任务(Quartz) 重复执行的问题

x StackExchange.Redis private readonly IDatabase _db; string key = string.Concat("{自己命名的Redis前缀}", task.TaskDetailsId); //获取本机服务器IP地址 string valIp = GetLocalIP(); //Redis缓存中的IP地址, var valIpRedis = _db.StringGet(redisKey); /* * 方案1.每次都获取锁(redis.L

SQL Server集群服务器的优缺点

由二台或更多物理上独立的服务器共同组成的“虚拟”服务器称之为集群服务器.一项称做MicroSoft集群服务(MSCS)的微软服务可对集群服务器进行管理.一个SQL Server集群是由二台或更多运行SQL Server的服务器(节点)组成的虚拟服务器.如果集群中的一个节点发生故障,集群中的另一个节点就承担这个故障节点的责任. 认为一个SQL Server集群能够给集群中的两个节点带来负载平衡,这是一种常见的误解.虽然这似乎很有用,但却是不正确的.这也意味着集束SQL Server不能真正提高性能

每秒处理3百万请求的Web集群搭建-用 LVS 搭建一个负载均衡集群

这篇文章是<打造3百万次请求/秒的高性能服务器集群>系列的第3部分,有关于性能测试工具以及优化WEB服务器部分的内容请参看以前的文章. 本文基于你已经优化好服务器以及网络协议栈的基础之上,并使用 iperf 与 netperf 工具测试将服务器已优化到支持 500,000 次/秒的静态WEB页面的性能. 现在你已经做好足够准备进行安装服务器集群. Redhat 官网已经有一些不错的文章,所以我建议你在遇到不明白的问题时查看一下这些文章.不过你先别担心,我接下会一步步地讲解群集搭建的所有操作.

使用概要管理工具创建定制概要文件,并在此节点上 创建集群以及在集群服务器中部署应用

使用概要管理工具创建定制概要文件,并在此节点上 创建集群以及在集群服务器中部署应用 上篇介绍了在Lnux上安装WebsphereV8.5,以及使用概要管理工具创建了Dmgr管理概要文件. Dmgr服务器不能运行应用程序,应用程序需要运行在特定的JavaEE服务器上,Dmgr管理服务器只负责管 理与它联合的节点.可以在新建的profile对应的节点上创建Websphere实例或者集群实例.并把此节点与 Dmgr服务器联合,交由Dmgr管理.此篇介绍使用概要管理工具创建定制概要文件,并在此节点上创建

Redis集群服务器-高可用调研随笔[转]

今天改了一天的Bug,本想下午开始专研Redis命令集,结果也泡汤了.只能在下班的路上考虑下Redis集群服务器的高可用方案.随笔而已,尚未成型,仅作记录. 当然,我说的可能比较片面,欢迎拍砖.斧正. 一.Redis与MySQL对比 相同点: Master-Slave架构,集群架构下无法很好的完成数据拷贝,确保数据一致性. 支持数据文件持久化存储,但数据文件过大时,宕机重启可能存在安全隐患. 不同点: Redis时效性能远比MySQL要高得多,支持复杂的数据类型,基本上都是内存操作,效率远胜于M

集群服务器状态命令------rs.status()各个字段的含义

可根据rs.status() 查询集群服务器状态.字段解释: self 这个信息出现在执行rs.status()函数的成员信息中 stateStr用户描述服务器状态的字符串.有SECONDARY,PRIMARY,RECOVERING等 uptime 从成员可到达一直到现在经历的时间,单位是秒. optimeDate 每个成员oplog最后一次操作发生的时间,这个时间是心跳报上来的,因此可能会存在延迟 lastHeartbeat 当前服务器最后一次收到其他成员心跳的时间,如果网络故障等可能这个时间

集群服务器Session同步及一种基于Memcached的session同步

1 Session的集群管理 事实上,网站总是有状态的.每一个登录信息.用户信息常常被存储在session内部.而当一个网站被部署在不止一台服务器的时候,就会遇到session同步的问题.事实上即使一个很小的网站,也要至少有两台服务器互为备份,分单流量是必须得,更重要的是无缝切流量升级.为了保证服务的不间断又要进行网站的维护升级,切流量是最简单的.那么如何保证切流量的时候session也会跟着同步过去呢?在集群环境下,大致有以下几种手段 1.1 Session复制 这是一种在早期应用系统中使用较

ubuntu14.04 server 部署 zookeeper 集群服务器

zookeeper是什么? Apache ZooKeeper 是一个面向分布式应用程序的高性能协调服务器.它使用一个简单的接口暴露公共服务(比如命名和配置管理.同步和组服务),让用户不必从头开始编程.它为实现共识.组管理.领导者选举和到场协议(presence protocol)配备了现成的支持. 下面是我在ubuntu14.04 server中部署 zookeeper集群服务器的经验 zookeeper集群服务器的部署 1.安装jdk 之前安装jdk都是自己手动配置环境,这次为了偷懒就使用了a

Nginx搭建集群服务器过程详解

Nginx+Apache+PHP+MySQL搭建集群服务器过程详解 概念介绍在本文未能提及,请自助上网科普,直接进入过程详解: 集群架构图大致如下: 一.软件下载 序号 软件名称 软件版本 下载地址 1 操作系统 Windows Server 2008 Enterprise 64bit 2 Php php-5.6.19-Win32-VC11-x64 Thread Safe(由于HTTP服务器用的apache) http://windows.php.net/downloads/releases/p