前言
本文为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

3.
#### 目录结构解析

1. conf/ 配置文件
2. lib/ 依赖jar包
3. logs/ 运行日志
4. bin/ 启停脚本
4.
#### conf/配置文件下的三大核心配置文件

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

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

### 配置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. 
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. 
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. 
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. 
3. 启动mycat
1.
cd/usr/local/mycat/bin
./mycatstart
cat/usr/local/mycat/logs/wrapper.log
2. 
配置Mysql主从
-
主库:
grant all privileges on *.* to 'mycat'@'%' identified by '123456'; flush privileges; -
从库:
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. 
2.
#在slave2上:
insert into test values('2','lisi');
1. 
3.
#在master上:
insert into test values('3','wangwu');
1. 
4. 使用客户端查看结果
1. 读取两个从库成功
1. 
2. 写入主库成功
1. 
1. 
2. 且两个从库没有
1. 
2. 