Mycat读写分离部署手册

前言

本文为mycat读写分离部署手册,侧重与mycat的部署,因此将跳过主从分离部分,至MyCat安装与目录结构说明部分才开始有实操输出,后续会单独出一版主从复制实战操作。

MyCat简介与核心功能

复制代码
  ### 定位

  1. MyCat作为开源的分布式数据库中间件
复制代码
  ### 能力

  1. 兼容 MySQL 协议、具备 SQL 解析、SQL 路由
复制代码
  ### **核心特性**

  1. 读写分离、分库分表、高可用、负载均衡

读写分离架构原理

复制代码
  ### 底层基础

  1. mysql主从复制
复制代码
  ### 本质/核心逻辑

  1. 将查询请求(SELECT)路由至从库

  2. 写操作(INSERT/UPDATE/DELETE)发送至主库
复制代码
  ### 作用

  1. 在逻辑层做路由分流,应用无感知

环境准备&依赖要求

复制代码
  ### 操作系统建议

  1. CentOS 7+ / Ubuntu 20.04+
复制代码
  ### Java运行环境

  1. JDK 8 或以上版本

         tar zxf jdk-8u191-linux-x64.tar.gz -C /usr/java/

         vim /etc/profile.d/java.sh
         export JAVA_HOME=/usr/java/jdk1.8.0_191
         export PATH=$JAVA_HOME/bin:$PATH
         export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

         source /etc/profile.d/java.sh
         java -version
复制代码
  ### MySQL版本要求

  1. 5.6及以上,提前搭建主从复制
复制代码
  ### 网络连通性检查

  1. 确保应用服务器可访问主从数据库节点

MySQL主从复制配置

复制代码
  ### 主库配置

  1. 启用binlog、设置server-id、创建同步用户
复制代码
  ### 从库配置

  1. 配置master信息、启动slave进程、验证同步状态
复制代码
  ### 运维

  1. 监控主从延迟,同步故障排查

MyCat安装与目录结构说明

复制代码
  ### 下载与解压

  1.

     #### 下载MyCat官方发行包(如1.6.8或更高稳定版)

         #官方网站
         http://www.mycat.org.cn/
         #github
         https://github.com/MyCATApache/Mycat-download
         下载地址
         wget https://github.com/MyCATApache/Mycat-download/blob/master/1.6-
         RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

  2.

     #### 解压至指定路径并配置环境变

         tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C
         /usr/local/
         cd /usr/local/mycat

     ![](https://i-blog.csdnimg.cn/direct/4c5a3690b0084fb1a2d32262bd53d2c6.png)
  3.

     #### 目录结构解析

     ![](https://i-blog.csdnimg.cn/direct/b90716ec48334600bacb60c2f6b545a7.png)
     1. conf/ 配置文件

     2. lib/ 依赖jar包

     3. logs/ 运行日志

     4. bin/ 启停脚本

  4.

     #### conf/配置文件下的三大核心配置文件
     ![](https://i-blog.csdnimg.cn/direct/1b6cdae843c24059a630124574fd64ff.png)

     1. `schema.xml`
        1. 逻辑库、表、dataNode、dataHost、主从数据源映射

     2. `server.xml`

        1. 账号密码、访问端口(默认 9066)、连接池参数

     3. `rule.xml`

        1. 路由规则、读写策略
复制代码
  ### 创建用户并修改权限

  1.

         useradd mycat
         passwd mycat 123456
         chown -R mycat.mycat /usr/local/mycat

     ![](https://i-blog.csdnimg.cn/direct/939176b26052437e91333ea23bfbf5cb.png)

MyCat服务启动与管理

复制代码
  ### 配置环境变量

  1.

         vim /etc/profile.d/mycat.sh
         export MYCAT_HOME=/usr/local/mycat
         export PATH=$MYCAT_HOME/bin:$PATH

         source /etc/profile.d/mycat.sh
复制代码
  ### 配置hosts(多节点集群)

  1.

         vim /etc/hosts
         #在行尾添加
         192.168.28.103 slave1
         192.168.28.102 slave2
         192.168.28.100 master

     ![](https://i-blog.csdnimg.cn/direct/ceb313dec3244a6f9e87b6aa56b0100d.png)
复制代码
  ### 配置mycat

  1. server配置

     1. 用户:mycat

        1.

               vim /usr/local/conf/server.xml

               #用户名:mycat
               <user name="mycat">
                   #密码:123456
                   <property name="password">123456</property>
                   #可访问逻辑库:ha
                   <property name="schemas">ha</property>
               </user>
                   #权限:默认是读写都有

        2. ![](https://i-blog.csdnimg.cn/direct/793fb10e15bb48798b0b69dffc600b0f.png)
     2. 用户:usr

        1.

               #用户名:usr
               <user name="user">
                   #密码:user
                   <property name="password">user</property>
                   #只能访问:ha
                   <property name="schemas">ha</property>
                   <property name="readOnly">true</property>
               </user>
                   #只读用户,不能写入

        2. ![](https://i-blog.csdnimg.cn/direct/b7cc65a9fdb44a02a7ed8c5b7455cf26.png)

     3. dml(颗粒度)权限含义:增删改查(1 1 1 1)

  2. schema配置

     1. 备份

        1.

               mv /usr/local/mycat/conf/schema.xml /usr/local/mycat/conf/schema.xml.bak

        2. ![](https://i-blog.csdnimg.cn/direct/1ebd2d0df8064eea9b354711319e8711.png)

     2. vim schema.xml按需配置文件

        1.

               <?xml version="1.0"?>
               <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
               <mycat:schema xmlns:mycat="http://io.mycat/">
               #定义语句库
               <schema name="ha" checkSQLschema="false" sqlMaxLimit="100"
               dataNode='dn1'>
               </schema>
               #数据节点
               <dataNode name="dn1" dataHost="dthost" database="ha"/>
               #数据主机组
               <dataHost name="dthost" maxCon="500" minCon="10" balance="1"
               writeType="0" dbType="mysql" dbDriver="native" switchType="-1"
               slaveThreshold="100">
               #心跳语句
               <heartbeat>select 1</heartbeat>
               #主库
               <writeHost host="master" url="192.168.28.100:3306" user="mycat"
               password="123456">
               #从库
                   <readHost host="slave1" url="192.168.28.103:3306" user="mycat"
               password="Root@123456" />
                   <readHost host="slave2" url="192.168.28.102:3306" user="mycat"
               password="Root@123456" />
               </dataHost>
               </mycat:schema>

        2. ![](https://i-blog.csdnimg.cn/direct/46c4f161381a4e4382d791f53e42906b.png)

  3. 启动mycat

     1.

            cd/usr/local/mycat/bin
            ./mycatstart
            cat/usr/local/mycat/logs/wrapper.log

     2. ![](https://i-blog.csdnimg.cn/direct/829f12b46aa148c393cdf043bb2f6cb9.png)

配置Mysql主从

  1. 主库:

    复制代码
    grant all privileges on *.* to 'mycat'@'%' identified by '123456';
    flush privileges;
  2. 从库:

    复制代码
    grant all privileges on *.* to 'mycat'@'%' identified by 'Root@123456';

验证读写分离是否正常

复制代码
      #先安装数据库
      yum install -y mariadb-server mariadb
      systemctl start mariadb.service
      #在客户端服务器上测试
      mysql -u mycat -p123456 -h 192.168.28.128 -P8066
      //通过mycat服务器代理访问mysql ,在通过客户端连接mysql后写入的数据只有主服务会记录,然后同步给从--从服务器
复制代码
      #在主服务器上:
      create table test(id int, name varchar(20));
复制代码
      #在两台从服务器上:
      stop slave; 
      use ha;

  1.

         #在slave1上:
         insert into test values('1','zhangsan');
         insert into test values('2','lisi');

     1. ![](https://i-blog.csdnimg.cn/direct/e34f19320753460bb0ae3c6e8c82adef.png)
  2.

         #在slave2上:
         insert into test values('2','lisi');

     1. ![](https://i-blog.csdnimg.cn/direct/5c57803b9f584b1ebe6ba9c2fe566fb2.png)
  3.

         #在master上:
         insert into test values('3','wangwu');

     1. ![](https://i-blog.csdnimg.cn/direct/0775d081a2d545eba3c466db04750c03.png)

  4. 使用客户端查看结果

     1. 读取两个从库成功

        1. ![](https://i-blog.csdnimg.cn/direct/6078365115164209824dd1665dd37aab.png)

     2. 写入主库成功

        1. ![](https://i-blog.csdnimg.cn/direct/2aa98deb14fb4fcbb56a9a0d7909124b.png)

           1. ![](https://i-blog.csdnimg.cn/direct/36bb0162796349eabb64a81622ee9f25.png)

        2. 且两个从库没有

           1. ![](https://i-blog.csdnimg.cn/direct/e34f19320753460bb0ae3c6e8c82adef.png)

           2. ![](https://i-blog.csdnimg.cn/direct/5c57803b9f584b1ebe6ba9c2fe566fb2.png)
相关推荐
小哈里2 小时前
【编译器】从计算机系统原理到 LLM 编译器与算子优化
大模型·编译器·1024程序员节·计算机系统原理·算子优化·推理平台
蚰蜒螟2 小时前
vmware17 ubuntu24.04编译android aosp16
1024程序员节
希望20172 小时前
杂|使用dfs遍历数组
1024程序员节
码完就睡2 小时前
Linux——以太网协议
运维·服务器·网络·1024程序员节
职豚求职小程序刷题2 小时前
光大证券在线测评|时间&考点整理好啦(附练习题库)
1024程序员节
天远API3 小时前
零信任架构实战:基于天远企业二要素验证构建自动化跨境物流货代授信签约网关
人工智能·1024程序员节·工具分享
@嵌入式扫地僧3 小时前
实战教程:NVIDIA Jetson Nano 8GB 搭建本地 RAG 大语言模型知识库完整指南
人工智能·ai·jetson nano·1024程序员节·rag
叼烟扛炮3 小时前
Linux 学习笔记(三十二):线程控制——创建、等待与分离
linux·运维·服务器·笔记·学习·1024程序员节
天天进步20153 小时前
Unity 2020.3 反复提示安全模式:一次 CS0009 与 DLL 文件占用的排查记录
unity·1024程序员节