转载

mysql读写分离实现 jdk+mycat环境部署

DB Proxy,数据库中间件

mycat功能

1. 读写分离M-S-S  M-M-S-S

2. 负载均衡   Galera Cluster

3. 支持数据的分片自动路由与聚合

同类产品

MySQL Proxy          MySQL官方    

Atlas                     奇虎360

DBProxy                美团点评

cober                    阿里巴巴

MyCat                   阿里巴巴

Mycat概述

Mycat是一个开源的分布式数据库系统,不同于oracle和mysql,Mycat并没有存储引擎,但是Mycat实现了mysql协议,前段用户可以把它当做一个Proxy。其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端mysql存储引擎里面。最新版本的Mycat不仅支持mysql,还可以支持MS SqlServer,Oracle,DB2等关系型数据库,而且还支持MongoDB这种NoSQL。Mycat对调用者屏蔽了后端存储具体实现。

Mycat的原理是先拦截用户的SQL语句并做分析:分片分析,路由分析,读写分离分析,缓存分析等,再对将该SQL语句发送到指定规则的数据库。最终将存储引擎返回的结果返回给用户.

架构:    一台MyCat LB     4台mysql  servers(服务器) 做成M-M-S-S

mysql读写分离实现 jdk+mycat环境部署

开始配置环境:

首先准备好mysql的主从复制,我的是M-M-S-S (双主双从)再接着配置java环境,最后部署mycat

一、配置java环境

JRE  ( Java Runtime Environment)  

是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。

JDK (JDK:Java Development Kit )

JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。

下载:   jdk

mysql读写分离实现 jdk+mycat环境部署

mycat对于 jdk的版本没有太高的的要求 8 9 10 的版本都行

[root@localhost ~]# jdk-10.0.1_linux-x64_bin.tar.gz -C /usr/local

[root@localhost ~]# ln -s /usr/local/jdk-10.0.1/ /usr/local/java

[root@localhost ~]# vim /etc/profile #添加环境变量

/etc/profile最后面添加:

JAVA_HOME=/usr/local/java/bin

PATH=$PATH:$JAVA_HOME

或者

[root@localhost ~]# vim /etc/profile

mysql读写分离实现 jdk+mycat环境部署

[root@localhost ~]# source /etc/profile #刷新环境变量

[root@localhost ~]# env |grep java #验证环境变量

[root@localhost ~]# java -version #查询java版本,查不出来就是环境变量设置有问题

java端口号9066

下载mycat

mysql读写分离实现 jdk+mycat环境部署

[root@localhost ~]# tar xf  Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

[root@localhost ~]# ls /usr/local/mycat/

二、配置mycat前端

配置mycat前端

[root@localhost ~]# vim  /usr/local/mycat/conf/server.xml

注释掉多余用户

mysql读写分离实现 jdk+mycat环境部署

启动mycat管理员 登录mycat的账户

mysql读写分离实现 jdk+mycat环境部署

配置mycat后端

请务必先备份此文件    schema.xml    

[root@localhost ~]# vim /usr/local/mycat/conf/schema.xml

上面这个是我自己的配置

mysql读写分离实现 jdk+mycat环境部署

这个schema 的 name="mycat"  和  bataNode 的database="mycat"  再加上前端的mycat 必须一致,否则会报错。

mysql读写分离实现 jdk+mycat环境部署

schema name:mycat维护的集群名称。

datanode:后方节点群的名称。

datahost:后方节点群的主机名称。

writehost:写主机

readhost:读主机

小技巧!!!!倒着看。一般的脚本倒着看都能看懂.

关于属性(参数)的介绍:

负载均衡类型:

1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。

2. balance="1", 全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,

简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2     互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。

3. balance="2", 所有读操作都随机的在 writeHost、readhost 上分发。

4. balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。

writeType 属性

1. writeType="0", 所有写操作发送到配置的第一个 writeHost,

第一个挂了切到还生存的第二个writeHost,

重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .

2. writeType="1",所有写操作都随机的发送到配置的 writeHost。

3. writeType="2",没实现。

三、配置后端mysql群

M-M-S-S准备Mycat连接的用户及权限:

再其中一个M 服务器上设置,其余都会同步

mysql > grant all on *.* to 'mycatproxy'@'192.168.0.118' identified by 'WJW952945084@qq.com';

四、启动MyCat

在mycat服务器上:

root@localhost ~]# /usr/local/mycat/bin/mycat start

Starting Mycat-server...

启动成功,否则就是配置Mycat后端语法错误。ps:这里启动成功并不能说明什么,是一种假象。你配置有问题它一样也能起来。

[root@localhost ~]# ss -tnlp |grep java #监测端口是否启动

[root@localhost ~]# ps aux | grep mycat #检测进程是否启动

为了显示效果在mycat服务器上安装一个  mariadb查看效果

[root@localhost ~]# yum install -y mariadb

[root@localhost ~]# mysql -h10.18.43.101 -uroot -p123456 -P8066

MySQL [(none)]> show databases;

+----------+

| DATABASE |

+----------+

| mycat    |

+----------+

1 row in set (0.00 sec)

注意后方mysql群中应该创建该库

在mycat上

select * from tianyun.t1;

insert into tianyun.t1 values(3);

查看效果

最后报错就去查询 mycat.log 日志

[root@localhost ~]# tailf /usr/local/mycat/logs/mycat.log

多库时设置mycat思路:

mysql读写分离实现 jdk+mycat环境部署 mysql读写分离实现 jdk+mycat环境部署
原文  http://blog.51cto.com/13590999/2129841
正文到此结束
Loading...