CN113961349B - 一种qpid集群控制方法及系统 - Google Patents
一种qpid集群控制方法及系统 Download PDFInfo
- Publication number
- CN113961349B CN113961349B CN202111260776.3A CN202111260776A CN113961349B CN 113961349 B CN113961349 B CN 113961349B CN 202111260776 A CN202111260776 A CN 202111260776A CN 113961349 B CN113961349 B CN 113961349B
- Authority
- CN
- China
- Prior art keywords
- node
- qpid
- master
- state
- service
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5072—Grid computing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/547—Messaging middleware
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Small-Scale Networks (AREA)
Abstract
本发明公开的一种QPID集群控制方法,包括获取本节点QPID服务状态;获取Master节点状态;根据本节点角色和Master状态进行角色处理。本发明还公开了执行上述QPID集群控制方法的系统。本发明公开的一种QPID集群控制方法及系统,解决了现有QPID集群方案适用性不强的问题。
Description
技术领域
本发明属于QPID集群系统技术领域,具体涉及一种QPID集群控制方法。本发明还涉及一种QPID集群控制系统。
背景技术
AMQP是Advanced Message Queuing Protocol,即高级消息队列协议。AMQP是一个标准化的消息中间件协议。它的目标是让不同语言、不同系统的应用互相通信,并提供一个简单统一的模型和编程接口。这样,人们就可以采用各种语言和平台来实现自己的应用,当需要和其他系统通信时,只要采用AMQP协议即可。
QPID是Apache Foundation的一个开源项目,是一个AMQP实现。它提供了C++和Java两个版本的broker,并支持多种语言的客户端,它还包括一个配置工具集。除了完全实现了AMQP的基本功能之外,QPID还采用集群方案并提供了安全认证。
常规的QPID的集群方案有:1)RHCS是Red Hat Cluster Suite(红帽子集群套件)方案;2)corosync+pacemaker方案。两种方案原理类似,都是通过管理qpidd-primary服务,始终保证qpidd-primary在集群的一个节点上运行,实现QPID集群运行方案。其中,运行qpidd-primary的节点上的QPID服务状态为Active,其余非Active。
这两种方案都使用了成熟技术实现了QPID集群方案,但对于某些应用场景,仍然存在一些缺陷,比如在大型航天测控软件系统中应用QPID集群方案实现分布式系统的消息通信,这样的应用场景需要高度自动化、高可靠性、易维护。但是无论是RHCS还是corosync+pacemaker,维护都比较复杂,不易维护;而且qpidd-primary服务不能保证100%切换成功,可能导致QPID集群无Active节点,不能正常工作,可靠性大打折扣,影响系统的自动化运行。有些航天测控软件系统采用双节点机制,无论是RHCS还是corosync+pacemaker方案,都使用了投票机制,使用投票机制的集群系统至少需要三个节点,对于只有两个节点的集群,可能存在“脑裂”现象,不能正常使用。
发明内容
本发明的目的在于提供一种QPID集群控制方法,解决了现有QPID集群方案适用性不强的问题。
本发明的另一目的在于提供一种QPID集群控制系统。
本发明所采用的第一种技术方案是:一种QPID集群控制方法,包括以下步骤:
步骤1、获取本节点QPID服务状态,状态包括是否在运行以及运行时的状态,根据状态确定本节点QPID角色,并将角色状态写入分布式缓存;
步骤2、获取Master节点状态,获取方式为从分布式缓存读取并判断其持续改变性;
步骤3、控制QPID服务,如果本节点QPID角色为Master,且Master状态中的节点标识与本节点一致,则不改变本节点QPID服务状态,并将Master状态写入分布式缓存,否则将本节点切换为Slave;如果本节点QPID角色为Slave,且没有Master或Master状态中节点标识与本节点一致,则将QPID角色切换为Active;如果QPID角色为Invalid,且Master状态中的节点标识与本节点一致,则从分布式缓存将Master节点状态删除。
本发明第一种技术方案的特点还在于,
步骤1中获取本节点QPID服务状态的方式为:判断QPID服务的PID文件是否存在,如果不存在则本节点QPID未运行,本节点QPID角色为Invalid;否则,读取PID文件内容,获取QPID服务进程标识,通过进程标识获取/proc下的该进程目录是否存在,如果目录存在,则本节点QPID运行,否则本节点QPID未运行,则本节点QPID角色为Invalid;如果本节点运行,通过“qpid-ha status”命令查询状态,如果状态为Active,则本节点QPID角色为Master,否则为Slave。
步骤2中获取Master节点状态的获取方式为:如果从分布式缓存获取Master节点状态失败,或状态连续不改变,则认为Master节点不存在。
步骤2中获取的Master节点状态包括:节点标识、时间戳、运行计数以及连续运行时间;其中,节点标识为可唯一标识QPID节点的内容,运行计数为该Master节点上一次被切换为Master后的累加计数,连续运行时间为该Master节点上一次被切换为Master后的累计运行时间。
步骤3中将本节点切换为Slave的方式为:读取QPID服务的PID文件内容,获取进程标识,kill该进程,删除PID文件。
将QPID角色切换为Active的方式为:将Master节点状态写到分布式缓存中,其中节点标识为本节点标识、时间戳为当前时间、运行计数为1、连续运行时间为0;执行状态切换为Active的命令“qpid-ha promote --cluster-manager”,并判断命令执行结果,如果执行不成功,或本节点QPID实际状态不为Active,则从分布式缓存删除Master节点状态,读取QPID服务的PID文件内容,获取进程标识,kill该进程,删除PID文件。
步骤3中将Master状态写入分布式缓存,Master状态中的节点标识为本节点标识、时间戳为当前时间、运行计数为上一次的计数加1、连续运行时间为本节点上一次被切换为Master后的累计运行时间。
本发明所采用的第二种技术方案是:一种执行上述QPID集群控制方法的系统,包括不少于两个QPID集群节点,每个节点上有QPID服务和QPID监控服务;分布式缓存服务器;连接所有集群节点和分布式缓存服务器的网络。
本发明第二种技术方案的特点还在于,
QPID服务和QPID监控服务均以系统服务的方式运行,QPID监控服务为实现QPID集群控制方法的应用程序。
本发明的有益效果是:
1)本发明提出的系统,不需要RHCS或corosync+pacemaker等专业集群管理套件,QPID服务和QPID监控服务均由操作系统的服务管理方式管理,不再需要额外的集群管理套件,安装维护简单,高效可靠,易维护;
2)本发明提出的系统,不使用投票机制,在只有两个节点的集群上,也可以稳定正常运行,扩充了QPID集群的适用范围;
3)本发明提出的系统,提高了容错机制,规避了执行切换为Active不成功的问题,提高了可靠性。
附图说明
图1是本发明一种QPID集群控制系统的结构示意图;
图2是本发明一种QPID集群控制方法的流程示意图;
图3是本发明一种QPID集群控制方法中获取本节点QPID服务状态的流程示意图;
图4是本发明一种QPID集群控制方法中获取Master节点状态的流程示意图;
图5是本发明一种QPID集群控制方法中根据本节点角色和Master状态控制QPID服务的流程示意图。
具体实施方式
下面结合附图以及具体实施方式对本发明进行详细说明。
本发明提供了一种QPID集群控制系统100,如图1所示,包括节点1(101)、节点2(102)、节点3(103),节点1、节点2、节点3通过网络交换机104相连,节点1上运行QPID服务1(105)、QPID监控服务1(106),节点2上运行Redis服务器(107),节点3上运行QPID服务2(108)、QPID监控服务2(109)。QPID服务1、QPID服务2、QPID监控服务1、QPID监控服务2以系统服务systemd的方式运行管理。Redis服务器是系统所用的分布式缓存服务器。节点1和节点3均运行linux操作系统。QPID监控服务1、QPID监控服务2执行本申请实施例公开的QPID集群控制方法。
对于图1所示的实施例,只是示例性的,具体实施时不限于节点数量,分布式缓存服务器不限于Redis,Redis服务器运行的节点能与QPID服务所在节点相同。
本发明还提供了一种QPID集群控制方法200,如图2所示,步骤如下:
步骤201:获取本节点QPID服务状态,所述状态包括是否在运行、以及运行时的状态,根据状态确定本节点QPID角色,并将角色状态写入分布式缓存,转步骤202;
获取本节点QPID服务状态的详细步骤见图3及其相关描述。
步骤202:获取Master节点状态,获取方式为从分布式缓存读取并判断其持续改变性,转步骤203;
本步骤的详细步骤见图4及其相关描述。
步骤203:根据本节点角色和Master状态进行角色处理,转步骤201。
本步骤的详细描述见图5及其相关描述。
Master节点指的是QPID服务状态为Active的节点,Slave节点是QPID服务状态为非Active的节点。
需要说明的是,流程200是循环执行的,QPID监控服务实现是以服务形式存在的进程。
图3给出了根据本发明一种QPID集群控制方法获取本节点QPID服务状态的流程300。流程如下:
步骤301:判断QPID服务进程的PID文件/var/run/qpidd.pid是否存在,不存在转步骤302,存在转步骤303;
步骤302:置本节点QPID角色为Invalid,返回;
步骤303:读取QPID服务进程的PID文件/var/run/qpidd.pid中的pid值,转步骤304;
步骤304:通过pid获取/proc下的QPID服务进程目录是否存在,不存在转步骤302,存在转步骤305;
步骤305:执行“qpid-ha status”命令获取QPID服务状态,转步骤306;
步骤306:判断QPID服务状态是否为Active,是Active转步骤307,不是Active转步骤308;
步骤307:置本节点QPID角色为Master,返回;
步骤308:置本节点QPID角色为Slave,返回。
需要说明的是,流程300是步骤201的执行过程,/var/run/qpidd.pid是可配置的,可以根据实际情况设置。
图4是根据本发明一种QPID集群控制方法获取获取Master节点状态的流程400。流程如下:
步骤401:判断Redis中键QpidMasterNode是否存在,不存在转步骤402,存在转步骤403;
步骤402:置Master状态为不存在,返回;
步骤403:从Redis中读取键QpidMasterNode的值,转步骤404;
步骤404:值无效或读取失败,转步骤402,否则转步骤405;
步骤405:计算读取值的hash值,转步骤406;
步骤406:判断计算所得hash值是否与上一次读取的值计算所得hash值一致,一致转步骤407,否则转步骤408;
步骤407:Master状态不变计数加1,转步骤409;
步骤408:Master状态不变计数为0,返回;
步骤409:Master状态不变计数是否大于5,如果大于5,则转步骤402,否则返回。
需要说明的是,流程400的步骤是202的执行过程。QpidMasterNode是表示Master状态的Redis键。Master状态不变计数是表示Master状态连续变化的参数,如果Master状态一直变化,表示Master存在,则置其值为0;如果连续5次读取的值不变化,则认为已经不存在Master。其中Master状态内容包括:节点标识、时间戳、运行计数、连续运行时间。其中节点标识为可唯一标识QPID节点的内容,运行计数为该Master节点上一次被切换为Master后的累加计数,连续运行时间为该Master节点上一次被切换为Master后的累计运行时间。
图5是根据本发明一种QPID集群控制方法根据本节点角色和Master状态控制QPID服务流程500,流程如下:
步骤501:判断本节点QPID角色是否为Master,如果为Master转步骤502,否则转步骤505;
步骤502:判断Master状态中的节点标识是否与本节点标识一致,如果一致转步骤503,否则转步骤504;
步骤503:将Master状态写入Redis,返回;
步骤504:读取QPID服务的PID文件内容,获取进程标识,kill该进程,删除PID文件,返回;
步骤505:判断本节点QPID角色是否为Slave,如果为Slave转步骤506,否则转步骤508;
步骤506:判断Master状态中的节点标识是否与本节点标识一致,如果一致转步骤507,否则返回;
步骤507:将Master节点状态写到Redis中,其中节点标识为本节点标识、时间戳为当前时间、运行计数为1、连续运行时间为0;执行状态切换为Active的命令“qpid-hapromote --cluster-manager”,转步骤510;
步骤508:判断Master状态中的节点标识是否与本节点标识一致,如果一致转步骤509,否则返回;
步骤509:从Redis中删除键QpidMasterNode,返回;
步骤510:判断步骤507中的命令“qpid-ha promote --cluster-manager”是否执行成功,成功转步骤511,否则转步骤512;
步骤511:判断本节点QPID实际状态是否为Active,是Active则返回,不是Active则转步骤512;
步骤512:从Redis删除QpidMasterNode,读取QPID服务PID文件内容,获取进程标识,kill该进程,删除PID文件,返回。
步骤504和步骤512中的实际上是相当于重启QPID服务的过程,因为QPID服务通过service及systemd管理时,通过kill命令停止其执行后,操作系统会自动重启该服务。
对于步骤503中的将Master状态写入Redis的过程,写入的内容为:节点标识为本节点标识、时间戳为当前时间、运行计数为上一次的计数加1、连续运行时间为本节点上一次被切换为Master后的累计运行时间。注意该步骤和步骤507 中的将Master节点状态写到Redis中的过程的不同。
流程500的执行过程是步骤203的处理过程。
根据本申请的实施例,上文参考实施例图和流程图描述过程及实施例可以被实现为计算机软件部件。本申请的全部或部分可被应用为计算机程序产品的一部分,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法或技术方案。
Claims (7)
1.一种QPID集群控制方法,其特征在于,包括以下步骤:
步骤1、获取本节点QPID服务状态,状态包括是否在运行以及运行时的状态,根据状态确定本节点QPID角色,并将角色状态写入分布式缓存;Master节点指的是QPID服务状态为Active的节点,Slave节点是QPID服务状态为非Active的节点;本节点QPID未运行,则本节点QPID角色为Invalid;本节点运行,状态为Active,则本节点QPID角色为Master,否则为Slave;
步骤2、获取Master节点状态,获取方式为从分布式缓存读取并判断其持续改变性;获取的Master节点状态包括:节点标识、时间戳、运行计数以及连续运行时间;其中,节点标识为可唯一标识QPID节点的内容,时间戳为当前时间,运行计数为该Master节点上一次被切换为Master后的累加计数,连续运行时间为该Master节点上一次被切换为Master后的累计运行时间;如果从分布式缓存获取Master节点状态失败,或状态连续不改变,则认为Master节点不存在;
步骤3、控制QPID服务,如果本节点QPID角色为Master,且Master状态中的节点标识与本节点一致,则不改变本节点QPID服务状态,并将Master状态写入分布式缓存,否则将本节点切换为Slave;如果本节点QPID角色为Slave,且没有Master或Master状态中节点标识与本节点一致,则将QPID角色切换为Active;如果QPID角色为Invalid,且Master状态中的节点标识与本节点一致,则从分布式缓存将Master节点状态删除。
2.如权利要求1所述的一种QPID集群控制方法,其特征在于,所述步骤1中获取本节点QPID服务状态的方式为:判断QPID服务的PID文件是否存在,如果不存在则本节点QPID未运行,本节点QPID角色为Invalid;否则,读取PID文件内容,获取QPID服务进程标识,通过进程标识获取/proc下的QPID服务进程目录是否存在,如果目录存在,则本节点QPID运行,否则本节点QPID未运行,则本节点QPID角色为Invalid;如果本节点运行,通过“qpid-hastatus”命令查询状态,如果状态为Active,则本节点QPID角色为Master,否则为Slave。
3.如权利要求1所述的一种QPID集群控制方法,其特征在于,所述步骤3中将本节点切换为Slave的方式为:读取QPID服务的PID文件内容,获取进程标识,kill该进程,删除PID文件。
4.如权利要求1所述的一种QPID集群控制方法,其特征在于,所述将QPID角色切换为Active的方式为:将Master节点状态写到分布式缓存中,其中节点标识为本节点标识、时间戳为当前时间、运行计数为1、连续运行时间为0;执行状态切换为Active的命令“qpid-hapromote --cluster-manager”,并判断命令执行结果,如果执行不成功,或本节点QPID实际状态不为Active,则从分布式缓存删除Master节点状态,读取QPID服务的PID文件内容,获取进程标识,kill该进程,删除PID文件。
5.如权利要求1所述的一种QPID集群控制方法,其特征在于,所述步骤3中将Master状态写入分布式缓存,Master状态中的节点标识为本节点标识、时间戳为当前时间、运行计数为上一次的计数加1、连续运行时间为本节点上一次被切换为Master后的累计运行时间。
6.一种执行如权利要求1所述的QPID集群控制方法的系统,其特征在于,包括不少于两个QPID集群节点,每个节点上有QPID服务和QPID监控服务;分布式缓存服务器;连接所有集群节点和分布式缓存服务器的网络。
7.如权利要求6所述的一种执行QPID集群控制方法的系统,其特征在于,所述QPID服务和QPID监控服务均以系统服务的方式运行,QPID监控服务为实现QPID集群控制方法的应用程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111260776.3A CN113961349B (zh) | 2021-10-28 | 2021-10-28 | 一种qpid集群控制方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111260776.3A CN113961349B (zh) | 2021-10-28 | 2021-10-28 | 一种qpid集群控制方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113961349A CN113961349A (zh) | 2022-01-21 |
CN113961349B true CN113961349B (zh) | 2022-09-06 |
Family
ID=79467887
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111260776.3A Active CN113961349B (zh) | 2021-10-28 | 2021-10-28 | 一种qpid集群控制方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113961349B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111371866A (zh) * | 2020-02-26 | 2020-07-03 | 厦门网宿有限公司 | 一种处理业务请求的方法和装置 |
CN111556165A (zh) * | 2019-08-01 | 2020-08-18 | 广州知弘科技有限公司 | 基于云计算的信息处理方法和系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9635124B2 (en) * | 2014-01-15 | 2017-04-25 | Qualcomm Connected Experiences, Inc. | Conveying state changes using connectionless messaging and a store-and-forward cache |
CN106161511B (zh) * | 2015-03-31 | 2020-01-21 | 华为技术有限公司 | 业务请求处理方法、相关装置及系统 |
CN110046896B (zh) * | 2019-04-26 | 2022-03-01 | 腾讯科技(深圳)有限公司 | 一种区块处理方法和节点以及系统 |
CN113127565A (zh) * | 2021-04-28 | 2021-07-16 | 联通沃音乐文化有限公司 | 基于外部观察者组的分布式数据库节点同步的方法和装置 |
-
2021
- 2021-10-28 CN CN202111260776.3A patent/CN113961349B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111556165A (zh) * | 2019-08-01 | 2020-08-18 | 广州知弘科技有限公司 | 基于云计算的信息处理方法和系统 |
CN111371866A (zh) * | 2020-02-26 | 2020-07-03 | 厦门网宿有限公司 | 一种处理业务请求的方法和装置 |
Non-Patent Citations (2)
Title |
---|
Andes: A Highly Scalable Persistent Messaging System;Charith Wickramarachchi等;《2012 IEEE 19th International Conference on Web Services》;20120806;第504-511页 * |
基于冗余主从节点架构的飞行器遥测参数采集系统研究;陈玉坤等;《宇航计测技术》;20201215;第51-56页 * |
Also Published As
Publication number | Publication date |
---|---|
CN113961349A (zh) | 2022-01-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7970823B2 (en) | System for sharing data objects among applications | |
CN111416821A (zh) | 物联网设备信息采集方法、系统和装置 | |
CN109656742B (zh) | 一种节点异常处理方法、装置及存储介质 | |
EP1518385A1 (en) | Opc server redirection manager | |
CN112506702B (zh) | 数据中心容灾方法、装置、设备及存储介质 | |
CN111274052A (zh) | 数据分发方法、服务器及计算机可读存储介质 | |
CN111125261A (zh) | 基于分布式缓存的数据传输方法 | |
CN109522043B (zh) | 一种配置数据的管理方法、装置及存储介质 | |
US20240295412A1 (en) | Method for operating and maintaining an electronic map, method for using electronic map data and service system | |
CN105607606A (zh) | 一种基于双主板架构的数据采集装置及方法 | |
CN111475333B (zh) | 一种基于openstack的数据库备份方法及装置 | |
CN114422335A (zh) | 通信方法、装置、服务器及存储介质 | |
CN113961349B (zh) | 一种qpid集群控制方法及系统 | |
CN114138568A (zh) | Redis哨兵模式下客户端故障转移的调度方法及系统 | |
CN112711606A (zh) | 数据库访问方法、装置、计算机设备和存储介质 | |
CN113765690A (zh) | 集群切换方法、系统、装置、终端、服务器及存储介质 | |
CN114500289B (zh) | 控制平面恢复方法、装置、控制节点及存储介质 | |
Carlini et al. | A new approach for sending dispatching orders using protocol IEC 60870-5-104 | |
CN113190546A (zh) | 一种Eureka服务管控方法、系统及可读存储介质 | |
CN113965608A (zh) | 一种数控设备数据收集及指令下发系统 | |
CN113672346A (zh) | 一种基于rook实现多MGR服务部署的方法 | |
CN115473809B (zh) | 一种基于微服务架构的配置处理方法、装置和存储介质 | |
CN117992257B (zh) | 一种分布式数据库并行数据采集处理方法 | |
CN115878696B (zh) | 一种分布式数据处理集群高可用方法和装置 | |
CN111464520B (zh) | 一种数据处理方法、装置、存储介质及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |