vlambda博客
学习文章列表

使用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、水平拆分

  对数据量很大的表进行拆分,把这些表按照某种规则将数据存放到不同的数据库中。


 

 

四、实验步骤

 

(一)环境准备

 

(二)基础配置

1mycat修改主机名:

hostnamectl set-hostname mycat

bash

2db1修改主机名:

hostnamectl set-hostname db1

bash

3db2修改主机名:

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

(查看80669066端口是否开启,

如果有开放80669066端口,

则表示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. 测试读写分离数据库是否成功。


演示视频如下: