OneProxy :: 中间件从入门到精通系列之三,MySQL多实例间的流量分配

OneProxy是一款高效的数据库访问中间件(软件下载),具备连接池故障切换读写分离分库分表SQL防火墙SQL监控等多项实用功能;使用C语言开发,超过200个并发客户端时,可以做到基本无损转发;可以省去客户端应用的开发和配置工作量,让你迅速构建强大的数据库系统来支持业务的高速发展。

第一篇(务必请先看第一篇)中介绍了单个实例的配置,在第二篇中介绍了如何配置多个MySQL实例,如果没有看过前两篇的,建议先看一下。当只接入一个实例时,所有的流量不管读写,也不管什么策略,都只能转发到这一个实例,但是当我们配置了两个MySQL实例后,就可以认真思考流量的分配方式了。总得来讲可以有两种策略,如下所述:

  • 流量切换:当一个节点失败时,将流量或某种流量从当前切点切换到另一节点,实现无单点来追求系统的高可用。
  • 流量分担:所有节点共同承担流量或某种流量,以提升服务能力;同时,当一个节点切换时,余下的节点承担所有的流量或某种流量。

需要我们思考的流量也只有两种,如下所述:

  • 写操作:指对数据库的更新,包括DDL、DML语句,以及在显式事务中的所有语句。
  • 读操作:信息读取操作,通常指显式事务外的SELECT操作。

在OneProxy中可以用“proxy-group-policy”选项来指定某个MySQL集群的流量切换和流量分担策略,如下所示:

[oneproxy]
keepalive     = 1
log-file      = log/oneproxy.log
pid-file      = log/oneproxy.pid
lck-file      = log/oneproxy.lck

proxy-address            = :3307

# Format host:port@mysql_group_name
proxy-master-addresses.1 = 172.30.12.5:3306@server1
proxy-master-addresses.2 = 172.30.12.6:3306@server1

# traffic countrol policy for given mysql group, format: group_name:policy_name
proxy-group-policy.1     = server1:master_only

# Format username/password@default_database
proxy-user-list.1        = test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test

默认的策略为“master_only”,当MySQL集群中只有一个Master类型的节点时,既不具备流量切换的功能,也不具备流量分担的功能;当MySQL集群中有超过一个Master类型的切点时,才具备流量切换的功能。除“mater-only”外,其他可选的策略有:

  • read_failover:写流量同“master-only”,针对读流量,如果Master节点可用则从Master节点访问,如果Master节点不可用,则从Slave节点访问。此策略常用于关键配置数据的高可用。
  • read_slave:写流量同“master-only”,针对读流量,先从Slave节点读取,如果没有Slave可用,则从Master节点访问。此策略即一主多备情况下的读写分离策略。
  • read_balance:写流量同“master-only”,针对读流量,先从任一可用节点读取,包括Master和Slave类型。此策略即一主一备情况下的读写分离策略。
  • big_slave:写流量和简单SQL查询流量同“master-only”,针对复杂的SQL语句,先从Slave节点读取,如果没有Slave可用,则从Master节点访问。此策略为一主多备情况下的复杂SQL语句读写分离。
  • big_balance:写流量和简单SQL查询同“master-only”,针对复杂的SQL语句,先从任一可用节点读取,包括Master和Slave类型。此策略为一主一备情况下的复杂SQL语句读写分离。
  • write_failover:写流量同“master-only”,但通常配有多个Master类型节点,可以预防写操作失败;针对读流量,先从任一可用节点读取。针对XtraDB Cluster和Group Replication集群等多主集群设计的单写多读策略。
  • write_balance:针对每次写操作,任挑一台Master节点提供服务;针对读流量,先从任一可用节点读取。针对XtraDB Cluster和Group Replication集群等多主集群设计的多写多读策略。

每种不同的策略,需要考虑MySQL复制可能的时延,业务对数据一致性的要求,结合这两点进行综合考虑和选择,OneProxy提供成熟的流量分配策略和灵活的切换机制,能否适用则还是要看业务的需求。