MySQL :: 针对多个备库或多机集群,OneProxy是更好的数据库负载均衡软件!

在很多以信息读取和展示为主的业务场景中,可以布署很多台MySQL备库或者一套MySQL多机集群(基于Gaera Cluster技术)来提升系统的数据查询能力,并可以在一台读库出问题时,可以将它简单地踢除出去,只要其余活着的读库还足以承担起所有的流量,就可以做到单台机器或少量机器发生故障时,对整个业务系统没有任何影响。通常会在多台备库前面安置一个F5设备来将流量均分到多个备库,或具有类似负载均衡功能的软件(如LVS、Haproxy等)来完成此功能,而到底有多少个读库可以完全对应用透明。

mysql_load_balance_oneproxy

当使用F5硬件或LVS/Haproxy软件时,由于它们不能识别数据库协议,所以只能基于连接做负载均衡,在应用层必须要区分读操作和写操作,创建两个数据源,读数据源连接到主库,备数据源连接到F5/LVS/Haproxy上,将读操作转发到读数据源。即使我们有足够的资源来做应对层的调整,也还有一些其他的问题需要考虑。

  1. 如何实时检测后端数据库的状态?F5/LVS/Haproxy并不是为MySQL设计的,而是标准的TCP层协议转发,因此你需要自己编写脚本来检测后端状态,将不可用的MySQL节点下线。
  2. 如何自动踢出有复制延时的MySQL节点,以够读到太旧的数据?并且在MySQL从节点跟上主库以后,又加回来进供读流量服务?要实现这个功能需要写好多相当复杂的脚本。
  3. 如何重用空闲连接?F5/LVS/Haproxy是基于连接的负载均衡,随着应用节点数的增长,数据库的连接数也会跟随着线性增长。

OneProxy是专门的基于数据库协议的负载均衡软件,可以支持MySQL数据库和PostgreSQL数据库,它可以很好地解决上面的问题。

  1. OneProxy可以在一秒内检测到后端数据库的状态,事实上每隔250毫秒就会发送一个状态检测命令,使用脚本很难做到这么实时。
  2. OneProxy可以检测备库和主库之间的复制时延,并可以设置一个最大时延,只要复制时延超过设定时间,就不参与读流量;只要跟上主库后,就可以马上参与读流量分担。
  3. OneProxy可以保持到后端数据库的长连接,这些连接可以被不同的请求、不同的应用共享,彻底避免数据库连接过多。
  4. OneProxy可以在同一个连接内做读写分离方案,可做到对应用完全透明,省去了应用层的改造成本。

当你在使用MariaDB的集群技术(Galera Cluster)或Percona的集群技术(XtraDB Cluster)时,设计负载均衡策略时,还需要考虑到以下两点:

  1. 尽量选择一个节点作为写入节点,以最大化地避免数据冲突的可能性,或者按分表规则进行负载分流。
  2. 当当前写入结点故障后,可以自动选择一个新的节点来作为写入结点,并且最好是不需要应用做任何相应处理。

使用F5/LVS/Haproxy时,这些要求将变得相当复杂和困难,需要编写大量的脚本才能完成。但在OneProxy里,这些功能都是预先定义好的负载均衡策略。OneProxy本身具有极高的性能,也可以搭建多台OneProxy组成一个高可用的集群

既然准备上F5/LVS/Haproxy来做负载均衡,也可以考虑在这一层做些其他的功能,例如找一个具有安全访问控制透明读写分离自动故障切换性能数据收集, 高可用连接池等多项功能的负载均衡方案,甚至支持分库分表以及SQL防注入防炎墙功能的高性能解决方案。OneProxy能满足以上所有的需求,因为OneProxy懂数据库协议,平民软件懂数据库,所以面对不同的需求也可以用同一个解决方案来省心地解决。