使用Mycat构建读写分离数据库(含演示视频)
一、实验目的
(1)了解Mycat基本知识。
(2)掌握MySQL配置读写分离数据库的方法。
二、实验题目
构建读写分离数据库
三、背景知识
(一)MyCat
Mycat是一个彻底开源的,面向企业应用开发的大数据库集群。从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。
1、相关概念
MyCAT目前通过配置文件的方式来定义逻辑库和相关配置:MYCAT_HOME/conf/schema.xml中定义逻辑库,表、分片节点等内容; MYCAT_HOME/conf/rule.xml中定义分片规则; MYCAT_HOME/conf/server.xml中定义用户以及系统相关变量,如端口等。
关系图:
2、垂直切分
根据业务的不同,将不同业务的表放到不同的数据库中。
3、水平拆分
对数据量很大的表进行拆分,把这些表按照某种规则将数据存放到不同的数据库中。
四、实验步骤
(一)环境准备
(二)基础配置
1、mycat修改主机名:
hostnamectl set-hostname mycat
bash
2、db1修改主机名:
hostnamectl set-hostname db1
bash
3、db2修改主机名:
hostnamectl set-hostname db2
bash
4、三台节点上都修改host文件
vi /etc/hosts
192.168.100.10 mycat
192.168.100.20 db1
192.168.100.30 db2
cat /etc/hosts
此操作在db1上完成://实现免密链接
ssh-keygen 回车 回车 回车 回车 //创建公钥-私钥对
ssh-copy-id db2 //把公钥发送给db2
ssh-copy-id mycat //把公钥发送给mycat
scp /etc/hosts db1:/etc/ //远程传送文件到db2
scp /etc/hosts mycat:/etc/ //远程传送文件到mycat
scp /etc/yum.repos.d/local.repo mycat:/etc/yum.repos.d //远程传送yum仓库配置文件到mycat
(三)mycat的配置
1.上传应用系统包:project4到/opt目录下
2.在mycat节点上安装java环境
yum install -y java java-devel
java -version
3.部署mycat服务
将Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz上传到mycat的/root目录下,并解压到/usr/local
cd /root
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
chmod -R 777 /usr/local/mycat/
echo export MYCAT_HOME=/usr/local/mycat/ >> /etc/profile //配置环境变量
export PATH=$PATH:$MYCAT_HOME/bin
source /etc/profile
echo $MYCAT_HOME(检查)
4.编辑mycat服务读写分离的schema.xml,设置数据库写入节点为db1,读取节点db2,注意IP要修改
cat ../usr/local/mycat/conf/schema.xml
vi ../usr/local/mycat/conf/schema.xml ( 100dd)
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="USERDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"></schema>
<dataNode name="dn1" dataHost="localhost1" database="test" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" dbType="mysql" dbDriver="native" writeType="0" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
//以下两处的url需要根据真实情况修改
<writeHost host="hostM1" url="172.16.51.18:3306" user="root" password="123456">
<readHost host="hostS1" url="172.16.51.30:3306" user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
5.在mycat上修改schema.xml的用户权限
chown root:root ../usr/local/mycat/conf/schema.xml
6.编辑mycat用户的/usr/local/mycat/conf/目录下的server.xml,修改root用户的密码123456,访问mycat的逻辑库为USERDB,注意删除后几行
vi /usr/local/mycat/conf/server.xml
G
在配置文件的最后部分,修改
<user name="root">
<property name="password">123456</property>
<property name="schemas">USERDB</property>
然后删除如下几行:
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
保存并退出server.xml配置文件。
7.启动mycat服务
/bin/bash /usr/local/mycat/bin/mycat start
yum install net-tools
netstat -ntpl
(查看8066、9066端口是否开启,
如果有开放8066和9066端口,
则表示mycat服务开启成功
mycat服务默认的数据端口是8066,
而9066端口则是mycat管理端口,
用于管理mycat的整个集群状态)
yum install -y MariaDB-client
mysql -h127.0.0.1 -P8066 -uroot -p123456
show databases;
use USERDB
show tables;
create table company(id int not null primary key,name varchar(50),addr varchar(255));
insert into company values(1,"facebook","usa");
select * from company;
insert into company values(2,"basketball","usa");
select * from company;
8.验证mycat服务对数据库读写操作分离
mysql -h127.0.0.1 -P9066 -uroot -p123456 -e 'show @@datasource;'
五、实验内容
1. 依据配置好的母机克隆一个服务器作为mycat服务器,并按要求完成基本配置
2. 完成mycat的配置
3. 测试读写分离数据库是否成功。
演示视频如下: