您的位置:首页 > 其它

Mycat 读写分离

2019-07-30 15:56 85 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_44697035/article/details/97785447

昨天在windows的测试机器上玩了半天都没做出来,所以今天就拿linux的测试机再重新做一遍找找感觉。

纯测试环境,3台centos7.3,因为都没有安装mysql,所以全部安装mariadb。

以下为10.1版本的mariadb,国内的yum源,也可以直接安装系统自带的,那就是5.5版本的。

 

[code]# vim /etc/yum.repos.d/mariadb.repo
​
[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.1/centos7-amd64
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

​
[code]# yum install -y mariadb-server&&systemctl restart mariadb
# mysql_secure_installation

回车,密码,确认密码,回车到直接结束,mariadb就装好了。

 

配个本地解析

[code]# vim /etc/hosts

192.168.2.104 mycat

192.168.2.106 write

192.168.2.112 read1

 

以下为两台做读写分离的数据库机器,做同样的操作:

[code]MariaDB [(none)]> create database test character set utf8 collate utf8_bin;

MariaDB [(none)]> grant all on test.* to 'test'@'%' identified by '123456';

MariaDB [(none)]> flush privileges;

创建一个用于做读写分离的数据库,创建一个用来授权mycat的账号。

 

以下为mycat机器:

可以先远程登录测试一下刚才创建的数据库账号是否能使用,然后安装mycat

阿里源:

[code]# curl -o /etc/yum.repos.d/Ali.repo http://mirrors.aliyun.com/repo/Centos-7.repo

EPEL源:

[code]# wget https://mirrors.aliyun.com/repo/epel-7.repo

去mycat官网下载最新版的mycat,包比较小,下载很快:

[code]# wget http://dl.mycat.io/1.6.7.1/Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz

 

因为mycat需要java环境支持,所以还需要去oracle官网下载jdk的包:

不知道为啥wget不能直接下载,下下来只有几十K,那我去官网自己下载了再传上来。

 

我下好的度盘链接

提取码:owyu

版本:1.8.0_221

解压jdk包

[code]# tar xvf jdk-8u221-linux-x64.tar.gz -C /usr/local/

做个软链接

[code]# ln -s /usr/local/jdk1.8.0_221/ /usr/local/java

修改环境变量,让这个新增的JAVA环境优先使用

[code]# vim /etc/profile

JAVA_HOME=/usr/local/java

PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME PATH

刷新一下变量配置文件

[code]# source /etc/profile

查看java变量

[code]# env |grep JAVA

查看java版本

[code]# java -version

解压mycat

[code]# tar xvf Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz -C /usr/local/

# cd /usr/local/mycat/conf

给两个主要修改的配置文件备份一下,要是出错方便从头来过

[code]# cp schema.xml schema.xml.bak

# cp server.xml server.xml.bak

 

[code]# vim server.xm

 

这里是写的mycat登录的账号,可以给root也可以给别的,原配置文件有两组,下面那一组我已经删掉了,如果要留下那组的话,那schema.xml文件里的schema标签也必须有两组,不然无法启动mycat。这里的test为逻辑库,自定义名字,和schema里的逻辑库名相对应就行,两个文件必须互相参照,否则肯定无法启动。

[code]# vim schema.xml

 

我把注释行全删掉了,看的更清楚一些,因为只做一个简单的读写分离,所以表级的那些行我也删掉了。这个文件里的格式要求非常严格,错一个字母都可能导致mycat启动不了,标签之间必须有对应,并且错误日志非常让人肝疼,它并不告诉你是这个配置文件写错了,只会报一些JVM的错误。

比方说

 

看到这些错误还会以为是java环境的问题,实际上就是配置文件写错了。

如果只是简单的做个读写分离,可以直接CP这个配置文件覆盖掉原来的,自己改上对应的信息就行。

 

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">

        </schema>
        <dataNode name="dn1" dataHost="hostpoll" database="test" />
        <dataHost name="hostpoll" maxCon="1000" minCon="10" balance="1"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="writehost" url="write:3306" user="test"
                                   password="123456">
                        <readHost host="readhost" url="read1:3306" user="test" password="123456" />
                </writeHost>
                </dataHost>
</mycat:schema>
 

启动mycat,这里就算出错也不会报错,这里启动失败会在/usr/local/mycat/logs/wrapper.log生成这个日志文件,查看这个日志里的错误信息,可以给mycat也做个环境变量

[code]# /usr/local/mycat/bin/mycat start

查看进程是否起来了

[code]# ps aux |grep mycat

查看java对应端口

[code]# ss -tnlp |grep java

 

如果java端口没起,mycat的进程可能会启动几秒然后挂掉,一定要确认java端口

登录mycat账号测试读写分离,mycat默认数据端口为8066,管理端口9066

[code]# mysql -h127.0.0.1 -P8066 -p123456

 

测试图就不截了,一般会在这个基础上做个主从复制,写主机为主,读主机为从。

我发现我昨天在windows上应该也是错在schema.xml文件上了。

先来记录一下自己所知道的一些信息:

schema 标签用于定义 MyCat 实例中的逻辑库,MyCat 可以有多个逻辑库,每个逻辑库都有自己的相关配 置。可以使用 schema 标签来划分这些不同的逻辑库。 如果不配置 schema 标签,所有的表配置,会属于同一个默认的逻辑库。

Table 标签定义了 MyCat 中的逻辑表,所有需要拆分的表都需要在这个标签中定义。(这次实验没有做表的拆分,我对这个也不太了解,以后有空需要完整的看看mycat的官方文档,自己了解的还是太浅薄了)

dataNode 标签定义了 MyCat 中的数据节点,也就是我们通常说所的数据分片。一个 dataNode 标签就是 一个独立的数据分片。

里面的name=是逻辑节点,自定义,和schema标签里的逻辑节点想对应;dataHost=是逻辑池,和dataHost标签里的逻辑池相对应,database=是虚拟库,需要在后方读写分离的机器上创建真实库与之对应。

dataHost 标签 ,该标签在 mycat 逻辑库中也是作为最底层的标签存在,直接定义了具 体的数据库实例、读写分离配置和心跳语句。像上方的select user(),其实就是执行这条命令,如果能执行说明这台机器是好,如果执行失败说明这台机器挂了,这就是一种心跳检测,换成别语句也可以。

balance 属性
负载均衡类型,目前的取值有 3 种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
2. balance="1", 开启读写分离,readhost负责读数据,writehost负责写数据。
3. balance="2", 所有读操作都随机的在 writeHost、readhost 上分发。
4. balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。

writeType 属性
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,以切换后的为准.
2. writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
DBtype: 数据库类型
DBdriver:数据库驱动
switch type:数据类型转换
slave Threshold :从机数量限制

最后的writeHost和readHost就是对应后方读写数据库的一些账号密码了,host=也是一个逻辑名,可以自定义;url=是IP地址,可以使用解析。

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: