vlambda博客
学习文章列表

Mycat 实现读写分离

问题:

  • 1.现有的网数据读写都在MySQL 主库进行操作,有没有可能读写分别在主库和从库分开进行?

  • 2.NGINX 是否可以做反向代理或者负载均衡?(包括php 或者java 的站点)

  • 3.如果nginx 单点服务器宕机,如何保证业务的连续性?



MySQL 的读写分离:mycat


1.环境:

  • 主库:192.168.10.10

  • 从库:192.168.10.129

  • mycat:192.168.10.128


2..配置主从

  • (略,过程参照MySQL 主从搭建)


3.安装jdk

  • tar xf jdk /usr/local/jdk1.8.0_77


vi /etc/profile

  • export JAVA_HOME=/usr/local/jdk1.8.0_77

  • export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile


4..配置安装mycat

  • tar xf Mycat-server.tar.gz -C /opt/


cd /opt/mycat


vi conf/schema.xml

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://io.mycat/">

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"

dataNode="dn1">

</schema>

<dataNode name="dn1" dataHost="localhost1" database="test" />

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"

writeType="0" dbType="mysql" dbDriver="native"

switchType="slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<writeHost host="db1" url="192.168.10.10:3306" user="root"

password="000000">

<readHost host="hostS2" url="192.168.10.129:3306"

user="root" password="000000" />

</writeHost>

</dataHost>

</mycat:schema>



vi conf/server.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mycat:server SYSTEM "server.dtd">

<mycat:server xmlns:mycat="http://io.mycat/">

<system>

<property name="useSqlStat">0</property> <!-- 1 为开启实时统计、0

为关闭-->

<property name="useGlobleTableCheck">0</property> <!-- 1 为开启

全加班一致性检测、0 为关闭-->

<property name="sequnceHandlerType">2</property>

<property name="processorBufferPoolType">0</property>

<property

name="handleDistributedTransactions">0</property>

<property name="useOffHeapForMerge">1</property>

<property name="memoryPageSize">1m</property>

<property name="spillsFileBufferSize">1k</property>

<property name="useStreamOutput">0</property>

<property

name="systemReserveMemorySize">384m</property>

<property name="useZKSwitch">true</property>

</system>

<user name="root">

<property name="password">123456</property>

<property name="schemas">TESTDB</property>

</user>

</mycat:server>


/opt/mycat/bin/mycat start


4.数据准备及验证:

(1)主库新建数据库并创建表:

  • create database db1;

  • use db1

  • create table db1 (id int null,name char(20) null);


(2)从库查询数据库及表

  • show databases;

  • use db1

  • show tables;


(3)mycat 服务器插入数据

  • 登陆:mysql -h127.0.0.1 -P8066 -uroot -p123456


(4)查询数据库:

  • show databases;


(5)查询表:

  • use TESTDB;

  • show tables;


(6)查询表结构:

  • DESC db1;


(7)插入数据:

  • INSERT INTO db1 (id,name) values (1,"yunwei");


(8)验证读写分离:

  • mycat 服务器:mysql -h127.0.0.1 -P9066 -uroot -p123456 -e 'show@@datasource;'


(9)验证结果: