作者:SADFGHJKSADFV_565 | 来源:互联网 | 2023-07-08 15:24
有一次大会听运营商和金融行业等都对业务连续性提出了很高的要求。在保证一致性的前提下,尽可能短的减少停机时间。这个压力主要都是在数据库上。在灾难来临时候对数据库进行切换。我们平时说的高可用一般来说都是容灾的,其实对于性能来说不是直接的提升。主从两个数据库采用读写分离来缓解压力,属于间接提升。我还是那句话,提升性能还是靠SQL。当然我也不反对硬件提升来提升性能。只是反对不反思自己SQL一味的仅仅提升硬件。
不同数据库切换方法不太一样,不同数据库切换的难易程度也不一样。我们先来说说最复杂的。
要说哪种主备库切换最难,我接触下来是Oracle。以前一直使用的alter database switchover to xxx的命令。这个命令发出,备库会提升为主库。但是原来的主库就被关闭了,需要手工启动。其实可以通过DGMGRL命令做到完全自动化的。有图有真相,整个过程也就1分钟。也许看了这个大家觉得我刚说的切换最难也不难嘛。
也许是会者不难,难者不会吧。不过Oracle的ADG以及DGMGRL的配置相比较其他数据库而言是多了不少参数的。
下面说明MySQL的,MySQL架构不同方式不同。
A场景 一主一备。这种架构,只能切换一次,一次切换过后就要重建备库。通常这种我们推荐官方的router+一主两备模式。在主动或者被动关闭主库后,router引流到配置的第一候选节点上完成切换。(这种候选节点一定要是可写的,否则要手工去掉只读属性)。至于HMA,我是不用的。有GTID以后还用这个干什么?换句话说5.6以后就不应该有它了。
B场景 双主。由于互为主从,那么不存在数据库切换一说,是有keepalive引流到另外一个节点。
C场景MGR。由于这个是配合router使用的。在8.0.22以后的强一致加持下,所以数据是一致的。中间件router引流即可。
再说PG的,PG和Oracle类似,PG的流复制是主库到备库。原生的PG切换和Oracle的切换也类似,手动。我比较喜欢他这种touch standby.signal触发式切换,显得简单多了。
如果是一个新手Oracle ADG切换可能心里没底,新手可能切换失败,或者没有把握来回反复切换。但是PG这个,新手也有信心。
再说TiDB。这种天生分布式,不要切换。
再说Oracle RAC,天生多点读写,不要切换。(存储坏了另说,这种要考虑的话就要RAC+ADG以及OGG了)
最后,我从业多年,自己经手的数据库切换只存在于练习环境和讲课使用。正式环境其实都还算稳定,遇到问题重启一下也就行了,不用切换。只要硬件不坏,数据库一般来说都起得来(99.9%)。起不来再切换(只要不是恶搞删除文件的),都起得来。我很反感动不动就切换的,有可能是网络不稳定呢?有可能就是慢到一定程度短时间没响应呢?有可能就是短暂卡主了呢?,为了避免说是因为不会切换而不切换,特意说明了一下原理和做实验说明。
希望大家的系统除了演练,永远用不到切换。