Mycat分布式数据库架构解决方案--Mycat实现读写分离

简介: Mycat分布式数据库架构解决方案--Mycat实现读写分离
安装完成之后,我们对Mycat的重要配置文件进行了解析,到这里已经对Mycat有了一定的认识,那么我们开始来启动Mycat并连接,做一些简单的配置和使用操作。

Mycat快速入门

Mycat配置所可能使用的命令

  • 进入mycat安装的bin目录,启动命令:./startup_nowrap.sh
  • 进入mycat安装的bin目录,停止命令:./mycat stop
  • 查看是否存在运行mycat的进程: ps -ef
  • 查看mycat时时运行日志,进入logs目录:more mycat.log
  • 配置文件中删除一整行:vi打开配置文件,然后双击d键就会删除光标所在的一行
  • 配置文件中删除一整块:点击v,然后移动左右键,光标移动就会选中移动区域,再点击x即可删除

配置Mycat

使用Mycat实现读写分离其实比较简单,只要关注他的两个配置文件schema.xml/server.xml。

  • schema.xml主要负责数据库的连接配置
  • server.xml主要负责Mycat登录连接配置

schema

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="userDB" checkSQLschema="true" sqlMaxLimit="100">
        <table name="user" primaryKey="id" dataNode="dn1" />
    </schema>

    <dataNode name="dn1" dataHost="host1" database="test" />

    <!-- 读写分离 -->
    <dataHost name="host1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM" url="192.168.222.132:3306" user="root" password="123456">
            <readHost host="hostS1" url="192.168.222.133:3306" user="root" password="123456" />
            <readHost host="hostS2" url="192.168.222.134:3306" user="root" password="123456" />
        </writeHost>
    </dataHost>
</mycat:schema>

server

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
        - you may not use this file except in compliance with the License. - You
        may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
        - - Unless required by applicable law or agreed to in writing, software -
        distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
        WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
        License for the specific language governing permissions and - limitations
        under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
    <!-- Mycat中有两个重要的标签,分别是user、system -->
    <!-- system标签与系统配置有关 -->
    <system>
        <!-- 配置该属性的时候一定要保证mycat的字符集和mysql 的字符集是一致的。
        如果需要配置特殊字符集,如:utf8mb4,则可以在index_to_charset.properties中配置,配置格式
        为“ID=字符集”,例如:“224=utf8mb4”-->
        <property name="charset">utf8</property>
        <!-- 1为开启实时统计、0为关闭 -->
        <property name="useSqlStat">0</property>
        <!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
        <property name="nonePasswordLogin">0</property>
        <property name="useHandshakeV10">1</property>
        <!-- 1为开启全加班一致性检测、0为关闭 -->
        <property name="useGlobleTableCheck">0</property>
        <!-- SQL 执行超时 单位:秒-->
        <property name="sqlExecuteTimeout">300</property>
        <!-- 指定使用 Mycat 全局序列的类型。 0 为本地文件方式,1 为数据库方式,2 为时间戳序列方式,3 为分布式ZK ID 生成器,4 为 zk 递增 id 生成。 -->
        <property name="sequnceHandlerType">5</property>
        <!-- 必须带有MYCATSEQ_或者 mycatseq_进入序列匹配流程 注意MYCATSEQ_有空格的情况 -->
        <property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
        <!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
        <property name="subqueryRelationshipCheck">false</property>
        <property name="sequenceHanlderClass">io.mycat.route.sequence.handler.HttpIncrSequenceHandler</property>
        <!-- 默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
        <property name="processorBufferPoolType">0</property>
        <!-- 分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
        <property name="handleDistributedTransactions">0</property>
        <!-- off heap for merge/order/group/limit      1开启   0关闭 -->
        <property name="useOffHeapForMerge">0</property>
        <!-- 单位为m -->
        <property name="memoryPageSize">64k</property>
        <!-- 单位为k -->
        <property name="spillsFileBufferSize">1k</property>
        <property name="useStreamOutput">0</property>
        <!-- 单位为m -->
        <property name="systemReserveMemorySize">384m</property>
        <!--是否采用zookeeper协调切换  -->
        <property name="useZKSwitch">false</property>
        <!--如果为 true的话 严格遵守隔离级别,不会在仅仅只有select语句的时候在事务中切换连接-->
        <property name="strictTxIsolation">false</property>
        <property name="useZKSwitch">true</property>
    </system>

        <!-- name="root" 定义登录用户名 -->
    <user name="root">
        <!-- 定义了登录密码 -->
        <property name="password">123456</property>
        <property name="schemas">userDB</property>
    </user>
</mycat:server>

配置完成之后,我们启动Mycat即可:

进入bin目录
./mycat start

验证是否已经成功实现读写分离

首先我们在主服务器上增加两条数据,由于我们实现mysql主从复制,这个时候增加的两条数据,其他两台从服务器都会同时增加。数据如下:

在这里插入图片描述

在主服务器上添加的数据由于MySQL主从复制,所以在每一台服务器上看到的都是一样的数据,但是在从服务器上添加的数据主服务器和另外一台服务器上不会有,我们就利用这个特性添加。

在从服务器192.168.222.134上添加一条数据,如下:

在这里插入图片描述

134服务器上就具备了其他服务器不具备的数据,由于我们在schema中配置了写功能服务器132、读133/134两台,所以Mycat读取数据的时候应该是随机读取133/134中的某一台,我们登陆Mycat然后打开user表,多刷新几次就可以看到id为5的那条数据时有时无

登陆Mycat报错,先检查Mycat是否已经成功启动,如果没有启动可以进入mycat文件下logs目录中,打开wrapper.log查看原因
在这里插入图片描述

注意:

  • 配置登录用户的时候,我们的server要对应上我们schemas中的逻辑库,不然会报错。
  • 访问不到Mycat的时候检查端口8066,查看是否开放了端口
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
运维 监控 关系型数据库
AI 时代的 MySQL 数据库运维解决方案
本文探讨了大模型与MySQL数据库运维结合所带来的变革,介绍了构建结构化运维知识库、选择合适的大模型、设计Prompt调用策略、开发MCP Server以及建立监控优化闭环等关键步骤。通过将自然语言处理能力与数据库运维相结合,实现了故障智能诊断、SQL自动优化等功能,显著提升了MySQL运维效率和准确性。
1040 18
|
小程序 前端开发
2025商业版拓展校园圈子论坛网络的创新解决方案:校园跑腿小程序系统架构
校园跑腿小程序系统是一款创新解决方案,旨在满足校园配送需求并拓展校友网络。跑腿员可接单配送,用户能实时跟踪订单并评价服务。系统包含用户、客服、物流、跑腿员及订单模块,功能完善。此外,小程序增设信息咨询发布、校园社区建设和活动组织等功能,助力校友互动、经验分享及感情联络,构建紧密的校友网络。
475 1
2025商业版拓展校园圈子论坛网络的创新解决方案:校园跑腿小程序系统架构
|
Cloud Native 关系型数据库 分布式数据库
阿里云PolarDB与沃趣科技携手打造一体化数据库解决方案,助推国产数据库生态发展
阿里云瑶池数据库与沃趣科技将继续深化合作,共同推动国产数据库技术的持续创新与广泛应用,为行业生态的繁荣注入更强劲的技术动力。
阿里云PolarDB与沃趣科技携手打造一体化数据库解决方案,助推国产数据库生态发展
|
运维 监控 关系型数据库
AI 时代的 MySQL 数据库运维解决方案
本方案将大模型与MySQL运维深度融合,构建智能诊断、SQL优化与知识更新的自动化系统。通过知识库建设、大模型调用策略、MCP Server开发及监控闭环设计,全面提升数据库运维效率与准确性,实现从人工经验到智能决策的跃迁。
1227 27
|
10月前
|
SQL 弹性计算 关系型数据库
如何用读写分离构建高效稳定的数据库架构?
在少写多读业务场景中,主实例读请求压力大,影响性能。通过创建只读实例并使用数据库代理实现读写分离,可有效降低主实例负载,提升系统性能与可用性。本文详解配置步骤,助你构建高效稳定的数据库架构。
|
SQL 安全 关系型数据库
数据库安全管理新范式:DBKEEPER一体化数据库权限管控堡垒机解决方案
在数字化时代,数据库安全至关重要。DBKEEPER提供一站式数据库安全访问与权限管控解决方案,支持多种数据库,具备精细化权限管理、数据脱敏、高危操作拦截、全面审计等功能,助力企业实现智能、安全的数据治理,满足金融、医疗、互联网等行业合规需求。选择DBKEEPER,让数据库安全管理更高效!
数据库安全管理新范式:DBKEEPER一体化数据库权限管控堡垒机解决方案
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
11月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
767 2
|
11月前
|
存储 缓存 NoSQL
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
本文解析 Redisson 如何通过 Redis 实现分布式信号量(RSemaphore)与倒数闩(RCountDownLatch),利用 Lua 脚本与原子操作保障分布式环境下的同步控制,帮助开发者更好地理解其原理与应用。
825 6