【Mycat】MySQL读写分离

master-slave读写分离

项 目 Mycat MySQL-master MySQL-master-standby MySQL-slave
IP 10.230.4.131 10.230.3.194 10.230.3.195 10.230.2.132
Port 8077/9077 3306 3306 3307

MySQL为二主一从,3.195为3.194的standby,2.132为3.194的slave。

实验用例表如下:

CREATE TABLE 'yf.travelrecord' (
    'id' int(11) NOT NULL AUTO_INCREMENT,
    'org_code' varchar(20) NOT NULL,
    'test_name' varchar(20) DEFAULT NULL,
    PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Mycat的基本配置如下:




    
        
    
        select user()
        
            
        
        
        
    
            
 
  

通过show @@datasource查看后端数据库的分布情况

balance=0

不开启读写分离机制,所有的读操作都发送到当前的writeHost上。

balance=1

所有读操作都发送到了当前的wirteHost对应的readhost和备用的writehost,这样就可以减轻主库的压力,高效地提供写操作,而由其他服务器承担比较耗费资源的读操作。

balance=2

所有读操作都发送到所有的writeHost金额readhost上,即当前datahost内的服务器都参与分担读操作。这个场景比较适合主库压力不是很大时,也可以分担读操作,更合理地利用资源。

balance=3

所有读操作只发送到当前writeHost对应的readhost上。在实际应用时,比较适合双主热备、多个slave的情况。

MySQL Galera Cluster读写分离

MySQL Galera Cluster是一套基于同步复制的多主MySQL集群解决方案,使用简单,没有单点故障,可用性高,能很好地保证业务量不断增长时数据的安全和随时扩展。

MySQL Galera Cluster的主要特点有:多服务器的拓扑结构;真正的多主架构,任何节点都可以进行读写及同步复制,各节点之间无延迟且节点宕机不会导致数据丢失;紧密耦合,所有节点均保持相同的状态,节点之间没有不同的数据,无须主从切换操作或使用vip;在Failover的过程中无停机时间(其实不需要Failover),无须手工备份当前数据库并复制至新节点;支持InnoDB存储引擎;对应用透明,无需更改应用或进行极小的更改便可以在任意节点上进行读写;自动剔除故障节点,自动加入新节点;真正行级别的并发复制,客户端连接与操作单台MySQL数据库的体验一致。

Galera官方建议一套Cluster至少有3个节点,理论上可以多写,但是在多个实验环境和生产案例中,多写会引起较为严重的锁等待,所以使用Galera时推荐用一写多读。这样,Galera结合Mycat,很容易配置出一套读写分离的数据库架构。

项 目 Mycat Pxc1 Pxc2 Pxc3 Pxc1_slave
IP 10.230.4.131 10.230.3.194 10.230.3.195 10.230.3.195 10.230.2.132
Hostname xjw-cc-03 xjw-dba-01 xjw-dba-02 xjw-dba-03 rfd-dba-01
Port 8077/9077 3306 3306 3306 3307

3.194、3.195、3.196为一套Percona Xtradb Cluster,2.132为3.194节点的slave。

实验用例表如下:

CREATE TABLE 'yf.travelrecord' (
    'id' int(11) NOT NULL AUTO_INCREMENT,
    'org_code' varchar(20) NOT NULL,
    'test_name' varchar(20) DEFAULT NULL,
    PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Mycat的基本配置如下:




    
        
    
        show status like 'wsrep%'
        
        
        
        
        
        
    
            
 
  

balance=0

不进行读写分离,所有读写都走配置的dataHost的第一个writeHost。

balance=1

全部的readHost与stand by writeHost都参与select语句的负载均衡,如果Pxc的节点本身没带slave,则三个Pxc节点中 的一个作为写,另外两个作为读。按照我们的配置,pxc_M1将作为写节点,pxc_M2、pxc_M3参与度。

在第一个节点增加一台slave,Mycat配置如下:




    
        
show status like 'wsrep%'

这时pxc_S1也作为读节点加入读负载均衡。

balance=2

所有读操作都随机地在writeHost、readHost上分发。此时作为写节点的pxc_M1也参与读操作。

balance=3

所有读请求都随机地分发至writeHost对应的readHost执行,writeHost不负担读压力。如果writeHost没有对应的readHost,则查询分发至writeHost。

从上面的各种验证中可以看出,Galera Cluster有多个节点时,就能通过Mycat实现读写分离,而且从Galera的原理可以看出,节点间的同步是“实时”的,这就为那些对读写延迟要求严格的系统提供了很好的选择。如果某个读节点查询的资源消耗很大,影响了整个集群的性能,则这时可以在节点上加一个slave,把大查询再分离出去。增加slave或者调整读节点的操作对前端都是透明的,只需修改Mycat配置文件,重启或者重载Mycat即可。Galera Cluster的读写分离在某种意义上与Oracle ADG非常相似。

你可能感兴趣的:(工具组件)