OneProxy :: 中间件从入门到精通系列之二,开始复杂的MySQL多实例配置

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

第一篇(务必请先看第一篇)中介绍了单个实例的配置,单实例场景很少见,一般都有一主一备或一主多备的情况。在OneProxy中所有的MySQL节点分为“master”和“slave”两种,“master”类型表示可以转发写入请求(所有流量),而“slave”类型表示只能接受只读请求(查询流量)。在上一个例子的基础上,我们来增加一个“master”节点,

[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

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

也可以在一行里写多个节点的地址,如下所示:

[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,172.30.12.6:3306@server1

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

如果新增节点的类型是“slave类型”,则如下所示:

[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-slave-addresses.1 = 172.30.12.6:3306@server1

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

在这个例子里先确保集群名字(MySQL Group Name,见“proxy-master-addresses”和“proxy-slave-addresses”选项“@”符后面的部份)是一样的,这个表示这些数据库的用户名、表结构和表数据都是一样的,它们之间具有数据同步机制(如异步复制、同步复制、XtraDB Cluster集群等),同样的SQL语句发到任何一个节点都不会出错(不考虑数据一致性要求)。

当一个集群里有两台以上“master”类型的MySQL节点时,如果OneProxy发现其中一台写操作失败,则第二次请求会切换到另一台“master”结点上,因此需要慎重考虑这种配置。对数据一致性要求不高的业务场景(例如风控里的用户轨迹数据,物联网里的监控数据等,请结合业务场景考虑),可以考虑这个配置,以保证写操作的高可用(无单点故障),对数据一致性要求严格的场景,不应当出现一个集群有多台“master”节点的情况。

OneProxy里也有流量均衡策略可以对读写流量进行配置,以实现读写分离这样的高可用策略,如何进行相应的配置,会在下一篇里进行介绍。