一种基于Redis的双宿主系统的高可用方法

文档序号:31800722发布日期:2022-10-14 18:44阅读:81来源:国知局
一种基于Redis的双宿主系统的高可用方法
一种基于redis的双宿主系统的高可用方法
技术领域
1.本发明涉及数据通信技术领域,特别是涉及一种基于redis的双宿主系统的高可用方法。


背景技术:

2.redis数据库将所有数据存储在内存中,有很高的读写性能,支持rdb(快照方式)和aof(文件追加方式),常被用作高性能缓存服务器使用。redis sentinel(哨兵)节点是一个独立的进程,通过sentinel节点可以提供高可用性。
3.在基础的sentinel节点模式下,包括:三个sentinel节点,一个master服务器,两个slave服务器,其中三个sentinel节点互相通信,且每个sentinel节点都监视一个master服务器和两个slave服务器,两个slave服务器从master服务器中同步数据,当master服务器意外宕机时,sentinel节点通过基于raft协议的投票选举算法,先从sentinel节点中选出一个成为leader,再由leader从两个slave服务器中选出一个升为master服务器,自动完成故障转移。在故障转移的过程中,redis服务是不可用的,可能会导致数据丢失的情况出现,且现有的sentinel节点选举leader的投票算法不能在两台物理机上实现,故无法自动实现故障转移,提供高可用性。


技术实现要素:

4.本发明的目的在于:提供一种基于redis的双宿主系统的高可用方法。该新的redis服务模式,即双宿主模式,可在两台物理机上组建缓存高可用系统。
5.为实现上述目的,本发明提供如下技术方案:一种基于redis的双宿主系统的高可用方法,包括客户端、基于redis模式的一台物理机a、一台物理机b;所述客户端、物理机a、物理机b三者之间两两相连通信,所述客户端将待写入数据写入物理机a的master服务器中,物理机b的slave服务器从物理机a的master服务器中读取并缓存该待写入数据更新后反馈给客户端;所述物理机a包括一个sentinel节点1、物理机b包括一个sentinel节点2,所述sentinel节点1和sentinel节点2分别监控物理机a和物理机b的工作状态,通过执行步骤w1至步骤w3对物理机a进行状态监控,并在物理机a发生故障时,判断物理机a的故障类型i或故障类型ii;
6.针对物理机a的故障类型i:暂时下线;物理机a的故障类型ii:物理机a已经下线;
7.之后针对物理机a的故障类型i,通过调用物理机b的缓冲服务器,将来自客户端的待写入数据写入物理机b的缓冲服务器,并实时监测物理机a,在其恢复时重新启用;
8.针对物理机a故障类型ii,通过调用物理机b的缓冲服务器和物理机b的slave服务器,并实时监测物理机a,在其恢复时重新启用;实现待写入数据与物理机b反馈给客户端数据的正确性;
9.步骤w1:物理机b通过sentinel节点2、物理机a通过sentinel节点1分别周期性地发送ping命令至物理机a的master服务器,并在预设第一时长周期内判断物理机a的
sentinel节点1或物理机b的sentinel节点2是否接收到来自物理机a的master服务器反馈该ping命令对应的正确pong命令,是则执行步骤w3;否则,则执行步骤w2;
10.步骤w2:物理机b的sentinel节点2、物理机a的sentinel节点1分别在预设第二时长内判断物理机a的sentinel节点1或物理机b的sentinel节点2是否接收到来自物理机a的master服务器反馈该ping命令对应的正确pong命令,是则判定物理机a的故障类型为i:物理机a暂时下线,同时根据收到反馈命令的sentinel节点,获得判断物理机a暂时下线的物理机;否则在预设第二时长周期内均未接收到正确pong命令、或接收到错误pong命令,即判定物理机a的故障类型为ii:物理机a已经下线,同时根据收到反馈命令的sentinel节点获得判断物理机a已经下线的物理机;
11.步骤w3:返回步骤w1。
12.进一步地,前述的针对物理机a的故障类型i,通过调用物理机b的缓冲服务器,将待写入数据写入物理机b,并实时监测物理机a,在其恢复时重新启用,包括如下步骤s1至步骤s7;
13.步骤s1:判断物理机a发生故障暂时下线的物理机通知客户端,将待写入的数据写入至物理机b的缓冲服务器中,物理机b的缓冲服务器缓存该待写入的数据,并更新保存为数据m;物理机b的slave读取物理机b的缓冲服务器的数据m,客户端自动识别并连接物理机b的slave服务器,并读取数据m;随后执行步骤s2;
14.步骤s2:基于sentinel节点1和sentinel节点2分别监控物理机a和物理机b的工作状态,并判断物理机a发生故障暂时下线是否恢复,是则根据sentinel节点的位置,获得判断物理机a恢复的物理机,进入步骤s3;否则执行步骤s7;
15.步骤s3:判断物理机a发生故障暂时下线恢复的物理机通知客户端物理机a暂时下线已恢复,命令客户端将待写入数据写入物理机a的master服务器中;随后进入步骤s4;
16.步骤s4:判断物理机a发生故障暂时下线恢复的物理机通知物理机b,将物理机b的缓冲服务器中数据m全部缓存至物理机a的master服务器中,随后执行步骤s5;
17.步骤s5:物理机b的缓冲服务器判断该数据m是否成功缓存至物理机a的master服务器中;是则进入步骤s6;否则进入步骤s4;
18.步骤s6:物理机b的缓冲服务器清空其缓存服务器中的数据m;
19.步骤s7:执行步骤s1。
20.进一步地,前述的针对故障类型ii,通过调用物理机b的缓冲服务器和物理机b的slave服务器,并实时监测物理机a,在其恢复时重新启用,包括如下步骤q1至步骤q9;
21.步骤q1:触发故障转移机制:判断物理机a发生故障已经下线的物理机命令客户端将待写入数据写入物理机b的缓冲服务器中,物理机b的缓冲服务器缓存该待写入的数据,更新并保存为数据n;并定义客户端将待写入数据写入物理机b的缓冲服务器的时间点为t0判断物理机a发生故障已经下线的物理机命令客户端将时间点t0之后的待写入数据写入物理机b的slave服务器中,随后进入步骤q2;
22.步骤q2:判断客户端在时间点t0之后是否将待写入数据写入物理机b的slave服务器中;是则故障转移机制完成,进入步骤q3;否则执行步骤q9;
23.步骤q3:基于sentinel节点1和sentinel节点2分别监控物理机a和物理机b的工作状态,判断物理机a发生故障已经下线的物理机通知物理机b将物理机b的缓冲服务器中数
据n全部缓存至物理机b的slave服务器中;随后进入步骤q4;
24.步骤q4:客户端读取物理机b的slave服务器中的数据,物理机b的缓冲服务器清空其缓存服务器中的数据n;随后进入步骤q5;
25.步骤q5:物理机a的sentinel节点1,物理机b的sentinel节点2分别判断物理机a发生故障已经下线是否恢复,是则进入步骤q6,同时获得判断物理机a已经下线恢复的物理机,否则进入步骤q8;
26.步骤q6:判断物理机a已经下线恢复的物理机通知客户端物理机a已经下线已恢复,命令客户端将待写入数据写入物理机a的master服务器中;并命令物理机a的master服务器读取并缓存物理机b的slave服务器中缓存的数据;随后进入步骤q7;
27.步骤q7:客户端从物理机a的master服务器中读取数据;
28.步骤q8:返回步骤q5;
29.步骤q9:返回步骤q2。
30.进一步地,前述的物理机a的缓冲服务器在收到sentinel节点1或sentinel节点2的命令后与物理机b的slave服务器相连;所述物理机a的缓冲服务器用于与物理机b的slave服务器传输数据,所述物理机b的缓冲服务器用于与物理机a的master服务器传输数据。
31.进一步地,前述的所述物理机a的sentinel节点1、物理机b的sentinel节点2均通过心跳检测机制监测所述物理机a、物理机b工作状态。
32.进一步地,前述的步骤w1中,物理机b通过sentinel节点2、物理机a通过sentinel节点1分别周期性地发送ping命令至物理机a的master服务器,并在0.5秒内判断物理机a的sentinel节点1或物理机b的sentinel节点2是否接收到来自物理机a的master服务器反馈该ping命令对应的正确pong命令。
33.进一步地,前述的步骤w2中,物理机b通过sentinel节点2、物理机a通过sentinel节点1分别在大于0.5秒的时间判断物理机a的sentinel节点1或物理机b的sentinel节点2是否接收到来自物理机a的master服务器反馈该ping命令对应的正确pong命令。
34.通过新增添的双宿主模式,在出现断电、网络中断、服务器磁盘损坏、服务器故障,用户会访问不了,导致页面刷不出数据的青情况下,实现了在两台物理机上的故障转移,其中的缓冲服务器在redis服务不可用的情况下,起到临时保存数据的作用,能自动在短时间内恢复服务,避免了数据的丢失,提高了系统服务的可用性。基于redis提供的高可用服务,尤其是对微型企业来说,从至少三台物理机减少到两台,节约了运营成本。
附图说明
35.图1是系统工作流程图;
36.图2是本发明双宿主模式下的系统架构示意图。
具体实施方式
37.为了更了解本发明的技术内容,特举具体实施例并配合所附图式说明如下。
38.在本发明中参照附图来描述本发明的各方面,附图中示出了许多说明性实施例。本发明的实施例不局限于附图所述。应当理解,本发明通过上面介绍的多种构思和实施例,
以及下面详细描述的构思和实施方式中的任意一种来实现,这是因为本发明所公开的构思和实施例并不限于任何实施方式。另外,本发明公开的一些方面可以单独使用,或者与本发明公开的其他方面的任何适当组合来使用。
39.本技术实例可通过对redis数据库源码进行修改实现,使之能够在两台物理主机的情况下,提供redis的高可用服务。
40.如图2所示,铁路售票系统作为客户端,物理机a和物理机b提供redis的高可用服务。redis里存储的数据是k1102这趟车各个站的名字、各个站点的到时和发时,余票信息等,这些数据用户访问会比较频繁,redis性能很高,非常适合缓存这些访问频繁的数据。客户端、物理机a、物理机b三者之间两两相连通信,客户端将待写入数据写入物理机a的master服务器中,物理机b的slave服务器从物理机a的master服务器中读取并缓存该待写入数据更新后反馈给客户端;物理机a包括一个sentinel节点1、物理机b包括一个sentinel节点2。物理机a的sentinel节点1、物理机b的sentinel节点2均使用心跳检测机制监测所述物理机a、物理机b工作状态。
41.如图1所示,步骤w1:物理机b通过sentinel节点2、物理机a通过sentinel节点1分别周期性地发送ping命令至物理机a的master服务器,并在0.5秒内判断物理机a的sentinel节点1或物理机b的sentinel节点2是否接收到来自物理机a的master服务器反馈该ping命令对应的正确pong命令,是则继续执行该周期性的监测指令。
42.如果物理机b通过sentinel节点2、物理机a通过sentinel节点1未能在0.5秒内收到来自物理机a的master服务器反馈该ping命令对应的正确pong命令,则物理机b的sentinel节点2、物理机a的sentinel节点1分别在1秒内长内判断物理机a的sentinel节点1或物理机b的sentinel节点2是否接收到来自物理机a的master服务器反馈该ping命令对应的正确pong命令,是则判定物理机a的故障类型为i:物理机a暂时下线,同时根据收到反馈命令的sentinel节点,获得判断物理机a暂时下线的物理机;如果超过1秒未接收到来自物理机a的master服务器反馈该ping命令对应的正确pong命令,或者接收到错误pong命令,即判定物理机a的故障类型为ii:物理机a已经下线,同时根据收到反馈命令的sentinel节点获得判断物理机a已经下线的物理机。
43.针对故障类型i:当sentinel节点2判定master服务器暂时下线时,sentinel节点2通知客户端将待写入数据写入物理机b的缓冲服务器中,物理机b的缓冲服务器缓存代写入数据,并更新保存。sentinel节点1和sentinel节点2分别监控物理机a和物理机b的工作状态,并判断物理机a发生故障暂时下线是否恢复,是则根据sentinel节点的位置,获得判断物理机a恢复的物理机,该物理机通知客户端物理机a暂时下线已恢复,命令客户端将待写入数据写入物理机a的master服务器中,并且通知物理机b,将物理机b的缓冲服务器中数据全部缓存至物理机a的master服务器中数据同步完成后,物理机b的缓冲服务器清空。
44.针对故障类型ii:触发故障转移机制:判断物理机a发生故障已经下线的物理机向客户端订阅的频道发布switch-master的消息,告知客户端redis服务正在进行物理机a的master和物理机b的slave服务器的切换,客户端根据ip地址和端口号将待写入数据写入物理机b的缓冲服务器中,物理机b的缓冲服务器缓存该待写入的数据,更新并保存为数据n;并定义客户端将待写入数据写入物理机b的缓冲服务器的时间点为t0判断物理机a发生故障已经下线的物理机命令客户端将时间点t0之后的待写入数据写入物理机b的slave服务
器中。
45.判断客户端在时间点t0之后是否将待写入数据写入物理机b的slave服务器中;是则故障转移机制完成,判断物理机a发生故障已经下线的物理机通知物理机b将物理机b的缓冲服务器中数据n全部缓存至物理机b的slave服务器中;客户端读取物理机b的slave服务器中的数据,物理机b的缓冲服务器清空其缓存服务器中的数据n;判断客户端在时间点t0之后是否将待写入数据写入物理机b的slave服务器中;是则故障转移机制完成,否则继续执行判断故障转移是否完成的指令;如果故障转移完成,那么基于sentinel节点1和sentinel节点2分别监控物理机a和物理机b的工作状态,判断物理机a发生故障已经下线的物理机通知物理机b将物理机b的缓冲服务器中数据n全部缓存至物理机b的slave服务器中;随后客户端读取物理机b的slave服务器中的数据,物理机b的缓冲服务器清空其缓存服务器中的数据n;随后,物理机a的sentinel节点1,物理机b的sentinel节点2分别判断物理机a发生故障已经下线是否恢复,如果故障已下线恢复,判断物理机a已经下线恢复的物理机通知客户端物理机a已经下线已恢复,命令客户端将待写入数据写入物理机a的master服务器中;并命令物理机a的master服务器读取并缓存物理机b的slave服务器中缓存的数据;之后客户端即可从物理机a的master服务器中读取数据;如果故障下线没有恢复,那么就继续执行判断故障下线是否恢复的指令。
46.当客户端写入缓存数据时,如果物理机a突然宕机,物理机b将自身的ip地址和要写入的端口号发送给客户端,客户端根据ip地址和端口号将缓存数据写入物理机b中,物理机b中的slave服务器自动更新成为逻辑上的master服务器,期间通过缓冲服务器依然保持整个系统的服务可用状态,客户端自动识别并连接master服务器,实现服务高可用。
47.缓冲服务器拥有发布与订阅功能(pub/sub),通过将信息发送给频道(channel)来实现与其他redis进程通信。在缓冲服务器初始化时,sentinel节点通过master服务器和slave服务器上的__sentinel__:hello频道使用info命令获得缓冲服务器的身份信息,包括ip地址、端口号和运行id(runid),来更新网络拓扑结构。
48.缓冲服务器拥有自己的tcp端口号,使用socket与master服务器和salve服务器建立联系,传输缓存数据,并且使用aof文件形式实现缓存数据持久化。
49.通过新增添的双宿主模式,在出现断电、网络中断、服务器磁盘损坏、服务器故障,用户会访问不了,导致页面刷不出数据的青情况下,实现了在两台物理机上的故障转移,其中的缓冲服务器在redis服务不可用的情况下,起到临时保存数据的作用,能自动在短时间内恢复服务,避免了数据的丢失,提高了系统服务的可用性。基于redis提供的高可用服务,尤其是对微型企业来说,从至少三台物理机减少到两台,节约了运营成本。
50.虽然本发明已以较佳实施例阐述如上,然其并非用以限定本发明。本发明所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可作各种的更动与润饰。因此,本发明的保护范围当视权利要求书所界定者为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1