首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

十八,MyCat配置读写分离

  • 25-04-22 15:01
  • 2412
  • 11354
juejin.cn

一,介绍

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

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

image-20240908084131907

二,一主一从

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

image-20240908084240558

环境准备

主机角色用户名密码
192.168.200.211masterroot1234
192.168.200.212slaveroot1234

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

三,一主一从读写分离

  • 配置

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

    image-20240908084630986

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

  • 负载均衡而策略取值

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

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

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

四,双主双从

双主双从

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

    image-20240908090504753

  • 环境准备

    编号IP预装软件角色
    1192.168.200.210MYSQL,MyCatMyCat中间件服务器
    2192.168.200.211MYSQLM1
    3192.168.200.212MYSQLS1
    4192.168.200.213MYSQLM2
    5192.168.200.214MYSQLS2
  • 双主从的搭建

    • 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属性控制,通过writeType及switchType来完成失败自动切换的。

image-20240908092556920

  • 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.xml 和 rule.xml 文件进行更细粒度的配置,指定哪些表需要分库分表,哪些表不需要。

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

注:本文转载自juejin.cn的normaling的文章"https://juejin.cn/post/7495586466824290344"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

133
开发工具
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top