官方网站:http://www.mycat.io/

======================================================

Mycat数据库中间件对于前端应用程序连接时会提供一套用户名和密码以及一个虚拟数据库名,这个虚拟数据库名可以是后端真实数据库中存在的,也可以是不存在的。最终前端应用程序要操作后端的真实数据库,连接的是mycat的虚拟数据库,由mycat连接真实数据库。mycat软件是用java编写的,所以需要java的运行环境,运行环境为jdk。

环境描述 :

192.168.122.105 node01 master

192.168.122.121 node01 master

192.168.122.137 node02 slave

192.168.122.103 mycat

准备工作:

关闭防火墙、selinux、同步时间,设置主机名,解析主机名

一、部署node01和node02的主从复制(略)

二、部署MyCAT

部署jdk环境

1、卸载系统自带jdk

[root@mycat ~]# rpm -qa | grep -E ‘gcj|jdk’

[root@mycat ~]# rpm -e –nodeps java-1.8.0-openjdk-headless java-1.8.0-openjdk java-1.7.0-openjdk java-1.7.0-openjdk-headless

2、安装mycat运行环境——jdk

[root@mycat ~]# tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local //1.8..0_91版本

[root@mycat ~]# ln -s /usr/local/jdk1.8.0_91 /usr/local/java

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

export JAVA__HOME=/usr/local/java

export PATH=$PATH:$JAVA__HOME/bin

[root@mycat ~]# source /etc/profile

[root@mycat ~]# java -version

java version “1.8.0_91”

Java(TM) SE Runtime Environment (build 1.8.0_91-b14)

Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

部署mycat

1、安装并启动MyCAT

[root@mycat ~]# useradd mycat

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

[root@mycat ~]# chown -R mycat.mycat /usr/local/mycat/

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

export MYCAT_HOME=/usr/local/mycat

[root@mycat ~]# source /etc/profile

[root@mycat mycat]# ll

总用量 16

drwxr-xr-x 2 root root 4096 8月 1 17:11 bin

drwxrwxrwx 2 root root 6 3月 1 2016 catlet

drwxrwxrwx 4 root root 4096 8月 1 17:11 conf

drwxr-xr-x 2 root root 4096 8月 1 17:11 lib

drwxrwxrwx 2 root root 6 10月 28 2016 logs

-rwxrwxrwx 1 root root 217 10月 28 2016 version.txt

注释:

conf:java写的配置文件大多以xml为结尾

conf/schema.xml:虚拟数据库对应后端真实数据的ip和真正数据库的名字

conf/server.xml:mycat呈现给应用程序的虚拟库名、连接的用户名和密码

logs/wrapper.log:mycat的日志文件

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

Starting Mycat-server…

[root@mycat ~]# netstat -antp | grep -E “8066|9066”

tcp6 0 0 :::9066 :::* LISTEN 3181/java

tcp6 0 0 :::8066 :::* LISTEN 3181/java

8066端口:应用程序以及开发人员写代码连接的都是mycat8066端口

2、配置MyCAT实现读写分离

[root@mycat mycat]# cp conf/server.xml{,.bak}

[root@mycat mycat]# cp conf/schema.xml{,.bak}

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

提供应用程序连接mycat使用的虚拟用户名和密码以及虚拟库名,多余的用户名行需要删掉,80行左右

<user name=”admin”>

<property name=”password”>redhat</property>

<property name=”schemas”>game</property>

</user>

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

定义虚拟数据库,虚拟数据库关联数据节点,数据节点中定义真实数据库的名字;同时dataNode还需要关联数据主机,数据主机中分别定义了真正后端数据库的端口号和ip以及连接数据库的用户名和密码

<?xml version=”1.0″?>

<!DOCTYPE mycat:schema SYSTEM “schema.dtd”>

<mycat:schema xmlns:mycat=”“>http://io.mycat/”>

scheme name:虚拟数据库名,和方才写的名字一样

<schema name=”game” checkSQLschema=”false” sqlMaxLimit=”100″ dataNode=”dn1″>

</schema>

多个数据库,复制上两行修改库名即可,

虚拟数据库要关联dataNode,定义真实数据库的名字和ip信息

<dataNode name=”dn1″ dataHost=”localhost1″ database=”game” />

balance=”1″,表示开启读写分离

<dataHost name=”localhost1″ maxCon=”1000″ minCon=”10″ balance=”1″

writeType=”0″ dbType=”mysql” dbDriver=”native” switchType=”1″ slaveThreshold=”100″>

<heartbeat>select user()</heartbeat> //mycat检测后端服务器是否存活的方法

<!– can have multi write hosts –>

下面定义写主机和读主机,mycat连接master做写操作,连接slave做读操作

<writeHost host=”hostM1″ url=”192.168.122.105:3306″ user=”mycatuser” password=”Www.1.com”>

自定义主机名,修改url为ip:3306,修改连接主机的用户名和密码,需要在主机上创建

<!– can have multi read hosts –>

<readHost host=”hostS2″ url=”192.168.1.137:3306″ user=”mycatuser” password=”Www.1.com” />

</writeHost>

<writeHost host=”hostM2″ url=”192.168.122.121:3306″ user=”mycatuser”

password=”Www.1.com”>

<!– can have multi read hosts –>

<readHost host=”hostS3″ url=”192.168.1.137:3306″ user=”mycatuser” password=”Www.1.com” />

</writeHost>

</dataHost>

</mycat:schema>

sever.xml文件中定义schema_name

schema.xml文件中定义dataNode,一个dataNata对应一个dataHost,一个dtaHost对应一个database

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

<?xml version=”1.0″?>

<!DOCTYPE mycat:schema SYSTEM “schema.dtd”>

<mycat:schema xmlns:mycat=”“>http://io.mycat/”>

<schema name=”game” checkSQLschema=”false” sqlMaxLimit=”100″ dataNode=”dn1″>

</schema>

<dataNode name=”dn1″ dataHost=”localhost1″ database=”game” />

<dataHost name=”localhost1″ maxCon=”1000″ minCon=”10″ balance=”0″

writeType=”0″ dbType=”mysql” dbDriver=”native” switchType=”1″ slaveThreshold=”100″>

<heartbeat>select user()</heartbeat>

<writeHost host=”hostM1″ url=”192.168.122.105:3306″ user=”mycatuser”

password=”Www.1.com”>

<readHost host=”hostS2″ url=”192.168.1.137:3306″ user=”mycatuser” password=”Www.1.com” />

</writeHost>

<writeHost host=”hostM2″ url=”192.168.122.121:3306″ user=”mycatuser”

password=”Www.1.com”>

<readHost host=”hostS3″ url=”192.168.1.137:3306″ user=”mycatuser” password=”Www.1.com” />

</writeHost>

</dataHost>

</mycat:schema>

[root@mycat ~]#

balance 属性

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

2. balance=”1″, 全部的 readHost 与 stand by writeHost备用写主机参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2

互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。

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

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

writeType 属性

1. writeType=”0″, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后以切换后的为准.

2. writeType=”1″,所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。

在后端任意数据库创建允许mycat连接的用户(主从会自动同步)

mysql> GRANT all ON *.* TO “mycatuser”@”%” IDENTIFIED BY “Www.1.com”;

mysql> FLUSH PRIVILEGES;

[root@mycat ~]# /usr/local/mycat/bin/mycat restart

[root@mycat ~]# netstat -antp | grep -E “8066|9066”

tcp6 0 0 :::9066 :::* LISTEN 3873/java

tcp6 0 0 :::8066 :::* LISTEN 3873/java

测试读写分离

[root@node02 ~]# mysql -u admin -p -h 192.168.122.103 -P 8066

Enter password: redhat

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.6.29-mycat-1.6-RELEASE-20161028204710 MyCat Server (OpenCloundDB)

mysql> show databases; //查看到虚拟数据库game库

mysql> use game;

mysql> show tables; //看到的表是实际数据库中真实的表

mysql> insert into account values(1,”haha”); //在表中插入数据,在从服务器上查看数据

原文地址:http://www.cnblogs.com/xgsh/p/16912939.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性