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)
相关推荐
普通人61 天前
WebGL与WebGPU入门指南
开发语言·webgl·1024程序员节
猫猫不是喵喵.2 天前
从0到1创建一个微服务项目
java·数据库·微服务·1024程序员节
fish_zzzz5 天前
笔记-论数据结构2
1024程序员节
普通人66 天前
PHP文件读写完全指南
开发语言·php·1024程序员节
Martina_03216 天前
AI生成3D场景从白模换成精模后镜头全偏了?用6步检查单位、枢轴与层级替换
图像处理·人工智能·3d·ai·自然语言处理·材质·1024程序员节
星云_byto7 天前
CSS布局
人工智能·机器学习·目标跟踪·1024程序员节
张小姐的猫10 天前
【MySQL】访问 & 数据流动原理
android·数据库·mysql·adb·1024程序员节
工业HMI实战笔记11 天前
印刷电路板HMI:SMT贴装的元件定位界面
制造·设计规范·设计语言·1024程序员节
Martina_032111 天前
AI生成3D模型一合并网格,材质就串色?用6步检查材质槽、UV与图集重映射
图像处理·人工智能·3d·材质·uv·游戏策划·1024程序员节
橙光成长11 天前
android-ad-cleaner:android免 Root 批量关闭系统开屏与营销推送
android·1024程序员节