微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mysql+Mycat实现数据库主从同步与读写分离


文章源于浅谈MySQL集群高可用架构
文章中的架构扩展介绍,之前写过一篇关于MHA的文章MySQL集群高可用架构之MHA


Mycat介绍


官网: http://mycat.io/ 
电子书: http://mycat.io/document/Mycat_V1.6.0.pdf 
书: http://blog.csdn.net/wind520/article/details/53213691

MyCAT采用Java开发,实现MysqL公开的二进制协议,将自己伪装成MysqL Server;应用只需连接MyCAT 执行sql,MyCAT按照配置的策略,分发sql至相应的MysqL节点。

什么是MYCAT


Mycat整体架构图

图片



Mycat特点介绍


  • 支持sql92标准

  • 支持MysqL、Oracle、DB2、sql Server、Postgresql等DB的常见sql语法

  • 遵守MysqL原生协议,跨语言,跨平台,跨数据库的通用中间件代理。

  • 基于心跳的自动故障切换,读写分离,MysqL主从,以及galera cluster集群。

  • 支持galera for MysqL集群,Percona Cluster或者MariaDB cluster

  • 基于Nio实现,有效管理线程,解决高并发问题。

  • 支持数据的多片自动路由与聚合,sum,count,max等常用的聚合函数,跨库分页

  • 支持全局序列号,解决分布式下的主键生成问题。

  • 分片规则丰富,插件化开发,易于扩展。

  • 强大的web,命令行监控。

  • 支持前端作为MysqL通用代理,后端JDBC方式支持Oracle、DB2、sql Server 、 mongodb 、巨杉。

  • 集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。




MysqL主从同步


这个配置这里就不再赘述了,可参考前面的文章

Linux系统MySQL数据库主从同步实战过程


图片

图片

图片





安装Mycat服务


生产环境最好单独使用服务器进行安装,测试环境安装在主库上

需要安装JAVA环境

[root@MysqL-m ~]# java -version

java version "1.8.0_144"

Java(TM) SE Runtime Environment (build 1.8.0_144-b01)

Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

图片

安装Mycat服务

[root@MysqL-m local]# wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

[root@MysqL-m local]# tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

[root@MysqL-m local]# cd mycat/

[root@MysqL-m mycat]# ll

total 24

drwxr-xr-x 2 root root 4096 Sep 23 19:13 bin

drwxrwxrwx 2 root root 4096 Mar  1  2016 catlet

drwxrwxrwx 4 root root 4096 Sep 23 19:13 conf

drwxr-xr-x 2 root root 4096 Sep 23 19:13 lib

drwxrwxrwx 2 root root 4096 Oct 28  2016 logs

-rwxrwxrwx 1 root root  217 Oct 28  2016 version.txt

[root@MysqL-m mycat]# cat >>/etc/profile<<EOF

> export MYCAT_HOME=/usr/local/mycat

> export PATH=$PATH:$MYCAT_HOME/bin

> EOF

[root@MysqL-m mycat]# source /etc/profile




配置Mycat服务


图片

#以下四项取消注释,修改如下

<!--认是65535 64K 用于sql解析时最大文本长度 -->

<property name="maxStringLiteralLength">65535</property>

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

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

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

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

图片

配置schema.xml文件

图片

图片

主从服务器上配置读写的用户user并给以相应的权限


启动服务

图片

图片

登陆管理管理端口,查看是否有认的逻辑数据库

图片

查看数据读写入口

图片

从上面可以看出数据写入与读取的入口在哪个库上




测试Mycat读写分离功能


接下来测试通过mycat来进行对主从数据库的读写操作

图片

图片

上面的数据是从逻辑数据库插入与查询的,接下来分别从主从库查看数据是否写入成功

图片

图片

图片

再次查看数据源的入口情况

图片




Mycat性能监控


@H_766_404@MYCAT监控


下载WEB管理端软件

wget https://github.com/MyCATApache/Mycat-download/blob/master/mycat-web-1.0/Mycat-web-1.0-SNAPSHOT-20160617163048-linux.tar.gz


需要安装zookeeper

[root@MysqL-m local]# wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

[root@MysqL-m local]# tar zxf zookeeper-3.4.6.tar.gz

[root@MysqL-m local]# ln -s zookeeper-3.4.6 zookeeper

[root@MysqL-m conf]# cp zoo_sample.cfg zoo.cfg

[root@MysqL-m bin]# ./zkServer.sh start

JMX enabled by default

Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[root@MysqL-m ~]# lsof -i :2181

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

java 3639 root 25u IPv6 19337 0t0 

TCP *:eforward (LISTEN)


安装WEB管理端

[root@MysqL-m bin]# cd /usr/local/

[root@MysqL-m local]# tar zxf Mycat-web-1.0-SNAPSHOT-20160617163048-linux.tar.gz

[root@MysqL-m local]# cd mycat-web/mycat-web/WEB-INF/classes/

[root@MysqL-m classes]# ll

total 28

drwxr-xr-x 3 root root 4096 Jun 17  2016 com

-rw-r--r-- 1 root root  367 Jun 17  2016 jdbc.properties

-rw-r--r-- 1 root root 4068 Jun 17  2016 log4j2.xml

drwxr-xr-x 3 root root 4096 Jun 17  2016 mybatis

-rw-r--r-- 1 root root  411 Jun 17  2016 mycat.properties

drwxr-xr-x 3 root root 4096 Jun 17  2016 org

drwxr-xr-x 2 root root 4096 Sep 26 00:21 spring

[root@MysqL-m classes]# vim mycat.properties

#

#Mon Jan 16 15:37:36 CST 2012

show.period=3000000

zookeeper=10.0.0.11:2181 

[root@MysqL-m mycat-web]# /usr/local/mycat-web/start.sh &

[1] 3684

[root@MysqL-m mycat-web]# nohup: ignoring input and appending output to `nohup.out'

[root@MysqL-m mycat-web]# lsof -i :8082

COMMAND  PID USER  FD  TYPE DEVICE SIZE/OFF NODE NAME

java 3685 root 122u IPv6 20997 0t0 TCP *:us-cli (LISTEN)

图片

图片

图片

图片



推荐阅读

精心整理|公众号文章目录大全

Docker容器技术入门(一)

Docker容器技术入门(二)

进程管理工具Supervisor(送书活动)

精心整理|清空网盘、抓紧上车

“金三银四”的折腾之聊一聊面试

或许这些你会感兴趣??

民工哥 “有问必答” 专栏开通,欢迎来撩


·end·



版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐