mysql高可用方案漫谈(一)本文章来自于阿里云云栖社区引言: AliCloudDBHA系统是为阿里云mysql,sqlserver,pgsql三大数据库提供实例高可用的一整套技术方案,确保系统能够在故障中快速恢复。同时HA也满足日常运维管理中涉及到主备切换的需求。由于mysql在业内使用最为广泛,所以本系列先介绍mysql实例高可用的相关技术。基本架构: 目前使用最为广泛的实例架构是采用一主一备share-nothing的结构。数据链路支持RLB+dbnode与RLB+proxy+dbnode两种。为简便起见,本文以proxy链路,引擎为innodb的实例为例介绍。 主备同步模式支持半同步,与异步两种方式,。 这里简要介绍下三种同步方式的区别: 异步模式:mit请求后,依次执行:写redologprepare,写入binlog,mit,返回客户端成功。 半同步模式:mit后,依次执行redologprepare,写binlog/发往备库(两个步骤并行),等待备库回复收到ack,mit,给用户回复成功。 强同步模式:mit后,依次执行redologprepare,写binlog/发往备库(并行),等待备库fsync到磁盘后,mit,给用户恢复成功。 以上步骤中,mit 影响。 分为0,1,2三种设置,具体含义这里不再赘述。写入binlog步骤受sync_binlog参数影响,具体数字含义,也不再赘述。在两个参数双1条件下,数据最为安全可靠,性能略有下降。本文假设我们都是设置在双1条件下。健康检测与切换类型:健康检测: HA使用update语句对mysql实例分别通过VIP,物理IP进行检测,这样检测的优点是可以检测从VIP到用户实例主库的整条链路的可用性,同时配合备库的io线程的健康状况,避免HA到用户主库网络故障情况下,主库实例健康时的误判。 HA每次update成功时,HA都将主库的时间戳记录到HA当中,同时更新主备库的心跳表,让备库同步主库写入的时间戳,当发生切换时,对比HA中与实例备库中保存的时间戳,可以得到备库大致的延迟。作为主备延迟的判断依据之一。当实例发生连接超时,连接重置,更新超时,socket超时时都被称作故障切换。 普通切换 当发生mysql实例版本升级,规格升级,刷新实例参数等情况时,需要对实例做主备切换。切换基本步骤如下:预检查主备延迟,如果延迟较大,那么直接退出切换,等待下次切换。如果延迟在一定范围内,那么进入切换流程,调用proxyapi切换VIP指向备库。Proxy此时会hold住用户新的连接和请求,不会访问备库(桥接)。关于桥接的具体详情可以参考proxy技术方案的文章。kill主库连接,设置read_only参数为ON。等待主库瞬间连接上来的事务结束。读取主库masterbinlog的位点信息,等待备库同步到该位点,由于之前进行过预等待所以此步骤不会等待很长时间,根据实际运行中数据观察可以控制在数秒以内。备库打开read_only为OFF调用proxyapi放开用户连接的请求。整个切换过程不会超过10S,用户会感觉到服务器卡住一小段时间后,恢复正常。 故障切换 mysql实例发生故障的环节可能多种多样,这里仅以主备库采用异步复制模
mysql 高可用方案漫谈(一) 来自淘豆网m.daumloan.com转载请标明出处.