天下風雲出我輩
一入江湖歲月催

使用Mycat实现Mysql读写分离

Mycat是一个开源分布式数据库中间件,具体信息详见:http://www.mycat.io/

这里基于Mysql主从复制  实现读写分离。

 

 

一、配置JDK1.7+环境,详见 配置安装jdk环境

这里Mycat直接安装在Master上。

二、下载Mycat

cd /usr/local

wget http://dl.mycat.io/1.6.6.1/Mycat-server-1.6.6.1-release-20180908155252-linux.tar.gz

tar -zxvf Mycat-server-1.6.6.1-release-20180908155252-linux.tar.gz

#配置环境变量
vim /etc/profile,在系统环境变量文件中增加 MYCAT_HOME=/usr/local/Mycat
export PATH=$PATH:$MYCAT_HOME/bin
执行 source /etc/profile 命令,使环境变量生效

安装完成后,目录如下:

目录 说明
bin mycat命令,启动、重启、停止等
catlet catlet为Mycat的一个扩展功能
conf confMycat 配置信息,重点关注
lib Mycat引用的jar包,Mycat是java开发的
logs 日志文件,包括Mycat启动的日志和运行的日志。

配置

Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件:

文件 说明
server.xml Mycat的配置文件,设置账号、参数等
schema.xml Mycat对应的物理数据库和数据库表的配置
rule.xml Mycat分片(分库分表)规则


三、编辑配置文件

3.1 编辑server.xml

<!--表示mycat的登录用户名-->
<user name="root">
<!--表示mycat的登录密码-->
<property name="password">123456</property>
         <!--表示mycat的逻辑数据库名称,可以自定义-->
<property name="schemas">TESTDB</property>
</user>
<!-- 用户2,只读权限-->
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>

 

3.2 编辑schema.xml

<!--TESTDB表示mycat的逻辑数据库名称
当schema节点没有子节点table的时候,一定要有dataNode属性存在(指向mysql真实数据库),
-->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<!--指定master的真实数据库test-->
<dataNode name="dn1" dataHost="localhost1" database="test" />
<!--指定mastet的ip -->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!--表示mysql的心跳状态-->
<heartbeat>select user()</heartbeat>
<!-- master负责写 -->
<writeHost host="hostM1" url="192.168.1.235:3306" user="root"
password="Test/2018">
<!--slave负责读-->
<readHost host="hostS2" url="192.168.1.234:3306" user="root" password="Test/2019" />
</writeHost>
<!-- 配置双主的可以多加备用服务器,挂了之后自动提升Master>
 < !-- writeHost host="hostS1" url="localhost2:3306" user="root" password="123456" --/> 
</dataHost>

注意:

1、后端root账户默认不允许远程连接,需要开启,生产环境建议使用单独的账户并赋权。

2、Mycat文档中要求后端Mysql集群对应的主机名需要映射IP

参数详解:

balance 决定了哪些MySQL服务器参与到读SQL的负载均衡中。

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

balance=”1″,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。

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

balance=”3″,所有读请求随机的分发到writeHost下的readhost执行,writeHost不负担读压力

writeType表示写模式

writeType=”0″,所有的操作发送到配置的第一个writehost

writeType=”1″,随机发送到配置的所有writehost

writeType=”2″,不执行写操作

switchType指的是切换的模式,目前的取值也有4种:

switchType=‘-1‘ 表示不自动切换

switchType=‘1‘ 默认值,表示自动切换

switchType=‘2‘ 基于MySQL主从同步的状态决定是否切换,心跳语句为show slave status

switchType=‘3‘基于MySQL galary cluster的切换机制(适合集群),心跳语句为show status like ‘wsrep%‘。

启动Mycat服务

mycat   start 
#服务管理
{ console | start | stop | restart | status | dump }

[[email protected] mycat]# ss -lntup |egrep  '(8066|9066)'
tcp    LISTEN     0      100      :::8066      :::*         users:(("java",pid=39626,fd=81))
tcp    LISTEN     0      100      :::9066      :::*         users:(("java",pid=39626,fd=77))

四、读写分离验证

4.1在Mycat上测试创建表以及插入数据,看后端Master与Slave是否同步

Mycat

mysql -h127.0.0.1 -uroot -p123456 -P8066 -DTESTDB

mysql>  create table temp(id int,name varchar(64));
mysql> insert into temp values(1,'aaa');

#Mster和Slave重复同样的操作查询
mysql> select * from test.temp;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
+------+------+
1 row in set (0.02 sec)

4.2停掉主从配置,然后插入数据验证。

Slave上停掉主从

mysql> stop slave;

Mycat上插入数据,然后分别查看Master与Slave

mysql> insert into temp values(1,'eee');
Query OK, 1 row affected (0.03 sec)

mysql> insert into temp values(1,'ggg');
Query OK, 1 row affected (0.00 sec)

Mster

mysql> select * from test.temp;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
| 1 | eee |
| 1 | ggg |
+------+------+
3 rows in set (0.00 sec)

Slave (还是之前的数据,读写分离成功)

mysql> select * from test.temp;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
+------+------+
1 row in set (0.00 sec)

start slave; 开启主从同步之后数据还是会同步过来。

赞(4) 打赏
未经允许不得转载:Anonym0x1 » 使用Mycat实现Mysql读写分离

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏