PolarDB新增支持连接保持功能,避免由于一些运维操作(如升级配置、主备切换或升级小版本等)或非运维操作故障(如节点所在服务器故障)导致的连接闪断或新建连接短暂失败的问题,进一步提高PolarDB的高可用性。
实现原理
从连接建立的角度看,PolarDB中的一个会话(Session)包含了一个前端连接(即应用程序和Proxy的连接)和一个后端连接(即Proxy和后端数据库节点的连接)。开启连接保持功能后,当Proxy与旧主节点(即高可用切换前的主节点)连接断开时,Proxy与前端应用的连接保持不断(即应用程序看到的Session),同时Proxy会与新主节点(即高可用切换后的主节点)重新建立连接并且恢复之前的会话状态,以实现对应用程序端无感知的高可用切换。

MySQL的连接(会话)通常包括系统变量、用户变量、临时表、字符集编码、事务状态和的Prepare语句状态信息。本文以字符集编码的状态信息为例介绍开启连接保持功能前后的会话状态。
假设应用程序和Proxy间建立了一个连接,并执行了set names utf8; 命令,此时names=utf8就是这个连接的一个状态。当Proxy在新旧主节点中进行切换时,需要保留这个状态,否则会出现字符集乱码问题。所以连接保持的核心在于保证连接切换前后的会话状态一致。
当Proxy将连接从旧主节点切换到新主节点的过程中,会存在短暂的新老数据库同时不可写不可读的时间(具体时长受数据库压力影响),所以在切换时,Proxy会暂时停止将应用程序的连接请求路由到后端数据库,并根据新数据库可读可写能力的恢复时间决定路由方向:
- 若新数据库在60s内恢复了可写可读能力,Proxy会将请求路由到新数据库。
- 若新数据库的可读可写能力未能在60s内恢复,Proxy会断开与应用程序间的连接,应用程序需重新发起连接请求(即此时与未使用连接保持功能时的行为一致)。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




