十八,MyCat配置读写分离

一,介绍

读写分离,简单地说是把对数据库的读和写操作分开 ,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效地减轻单台数据库的压力。

通过MyCat即可轻易实现上述功能,不仅可以支持MySQL,也可以支持0racle和SQLServer。

二,一主一从

MySQL的主从复制,是基于二进制日志(binlog)实现的。

环境准备

主机 角色 用户名 密码
192.168.200.211 master root 1234
192.168.200.212 slave root 1234

搭建详见主从复制 - wdadwa - 博客园 (cnblogs.com)

三,一主一从读写分离

  • 配置

    Mycat控制后台数据库的读写分离和负载均衡由schema.xml文件中datahost标签的balance属性控制。

    在读写分离的结构中,逻辑表可以不写,如果不指定会自动加载所在数据节点的数据库里面的所有表作为逻辑表。

  • 负载均衡而策略取值

    取值 含义
    0 不开启读写分离机制,所有读操作都可发送到当前可用的writeHost上
    1 全部的readHost与备用的writeHost都参与select语句的负载均衡(主要针对于双主从模式
    2 所有的读写操作都随机在writeHost,readHost上分发
    3 所有的读请求随机分发到writeHost对应的readHost上执行,writeHost不负担读压力

一主一从读写分离存在的问题:

  • 主节点Master宕机之后,业务系统就只能够读,而不能写入数据了。

四,双主双从

双主双从

  • 一个个主机 Master1用于处理所有写请求,它的从机 slave1和另一台主机 Master2还有它的从机 slave2 负责所有读请求。当 Master1主机宕机后,Master2主机负责写请求,Master1、Master2互为备机。架构图如下:

  • 环境准备

    编号 IP 预装软件 角色
    1 192.168.200.210 MYSQL,MyCat MyCat中间件服务器
    2 192.168.200.211 MYSQL M1
    3 192.168.200.212 MYSQL S1
    4 192.168.200.213 MYSQL M2
    5 192.168.200.214 MYSQL S2
  • 双主从的搭建

    • M1主库配置

      1. 修改配置文件/etc/my.cnf

        ini 复制代码
        #mysql服务id,保证整个集群环境中唯一,取值范围是1~2的32次方-1.默认为1
        server-id=1
        #指定同步的数据库
        binlog-do-db=db01
        binlog-do-db=db02
        binlog-do-db=db03
        #在作为从库数据库的时候,有写入操作也要更新二进制日志文件(因为和m2互为备用机)
        log-slave-updates
      2. 重启MySQL服务器

        bash 复制代码
        systemctl restart mysqld
    • M2主库配置

      1. 修改配置文件/etc/my.cnf

        ini 复制代码
        #mysql服务id,保证整个集群环境中唯一,取值范围是1~2的32次方-1.默认为1
        server-id=3
        #指定同步的数据库
        binlog-do-db=db01
        binlog-do-db=db02
        binlog-do-db=db03
        #在作为从库数据库的时候,有写入操作也要更新二进制日志文件(因为和m2互为备用机)
        log-slave-updates
      2. 重启MySQL服务器

        bash 复制代码
        systemctl restart mysqld
    • 创建两台主库之间进行主从复制的账号

      sql 复制代码
      #注,两个数据库都需要执行
      #创建MS用户,并设置密码,该用户可在任意主机连接该MySQL服务
      create user 'MS'@'%' identified with mysql_native_password by '123456';
      #为MS用户分配主从复制权限
      grant replication slave on *.* to 'MS'@'%';

      通过指令,查看两台主库的二进制日志坐标

      sql 复制代码
      show master status;
    • S1从库配置

      1. 修改配置文件/etc/my.cnf

        ini 复制代码
        #mysql服务id,保证整个集群环境中唯一,取值范围是1~2的32次方-1.默认为1
        server-id=2
      2. 重启MySQL服务器

        bash 复制代码
        systemctl restart mysqld
    • S2从库配置

      1. 修改配置文件/etc/my.cnf

        ini 复制代码
        #mysql服务id,保证整个集群环境中唯一,取值范围是1~2的32次方-1.默认为1
        server-id=2
      2. 重启MySQL服务器

        bash 复制代码
        systemctl restart mysqld
    • 配置两台从库关联的主库

      sql 复制代码
      CHANGE REPLICATION SOURCE TO SOURCE_HOST='master的ip地址',SOURCE_USER='上述配置的用户',SOURCE_PASSWORD='密码',SOURCE_LOG_FILE='log文件',SOURCE_LOG_POS='上述的postition';

      需要注意的是:Slave1对应Master1,Slave2对应Master2

      启动两台从库的主从复制,查看从库状态

      sql 复制代码
      start slave;
      show slave status \G;
    • 配置两台主库相互复制

      Master2复制Master2,Master1复制Master2,故下面要分别配置两次

      sql 复制代码
      CHANGE REPLICATION SOURCE TO SOURCE_HOST='master的ip地址',SOURCE_USER='上述配置的用户',SOURCE_PASSWORD='密码',SOURCE_LOG_FILE='log文件',SOURCE_LOG_POS='上述的postition';

      启动两台从库主从复制,查看从库状态

      sql 复制代码
      start slave;
      show slave status \G;

五,双主双从读写分离

Mycat控制后台数据库的读写分离和负载均衡由schema.xml文件datahost标签的balance属性 控制,通过writeTypeswitchType完成失败自动切换的。

  • balance="1"

    代表 全部的 readHost 与 stand bywriteHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->51,M2->52,并且 M1与M2互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。

  • writeType

    • 0:写操作都转发到第1台writeHost,writeHost1挂了,会切换到writeHost2上
    • 1:所有的写操作都随机的分发到配置的writeHost上
  • switchType

    • -1:不自动切换
    • 1:自动切换

六,总结

  1. 可以根据双主从的原理扩展为n主从。

  2. 分库分表可以结合主从复制

    • 可以在 Mycat 中配置特定的逻辑表进行分库分表,同时保留其他表不做分库分表处理。默认情况下,Mycat 会将所有表当作逻辑表,但你可以通过 Mycat 的 schema.xmlrule.xml 文件进行更细粒度的配置,指定哪些表需要分库分表,哪些表不需要。

    • schema.xml 中没有为某些表定义逻辑表,它们会被默认映射为物理表,Mycat 会自动处理这些表,直接将查询路由到后端的对应数据库。这种情况下,这些表不会使用分库分表策略,也不会有路由规则,Mycat 仅作为一个简单的代理,将操作转发到后端的主库或从库。

相关推荐
掘金詹姆斯17 分钟前
在项目中如何进行分库分表?
java·mysql
不辉放弃22 分钟前
第一章:MySQL视图基础
python·mysql
Cachel wood1 小时前
Mysql相关知识2:Mysql隔离级别、MVCC、锁
数据库·python·sql·mysql·中间件·数据分析·django
等等5432 小时前
mysql——基础知识
数据库·mysql
济宁雪人2 小时前
MySQL数据库(基础篇)
数据库·mysql
{⌐■_■}2 小时前
【MySQL】索引运算与NULL值问题详解:索引字段应尽量 NOT NULL ,NULL值不能参与部分索引运算
android·数据库·mysql
郭源潮12 小时前
《MySQL:MySQL表的约束-主键/复合主键/唯一键/外键》
数据库·mysql
苹果酱05673 小时前
Vue3 源码解析(六):响应式原理与 reactive
java·vue.js·spring boot·mysql·课程设计
江沉晚呤时5 小时前
在 Linux 上部署 .NET Core 应用并配置为开机自动启动
linux·服务器·mysql