MyCat读写分离与主从切换

什么是mycat,以及mycat的优点和特性本文不做赘述,本文继续本着实战的态度,来分享一些个人对mycat的基础功能实践。本文mycat的读写分离和主从切换的环境为mysql主从环境。

如何安装mysql数据库可以参考:
如何构建mysql主从环境可以参考:

本文的环境信息:
192.168.1.248 slave
192.168.1.250 master

主从配置完成后,Slave_IO_Running和Slave_SQL_Running状态都为yes
mysql> start slave;
Query OK, 0 rows affected (0.02 sec)
mysql> show slave status\G
*************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.250
                  Master_User: mysync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 429
              Relay_Log_File: HE1-relay-bin.000002
                Relay_Log_Pos: 592
        Relay_Master_Log_File: mysql-bin.000004
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

创建mycat用到的dataNode对应的数据库及mycat用到的数据库用户

mysql> grant all privileges on *.* to 'mycat'@'%' identified by 'MANAGER';
Query OK,0 rows affected (0.01 sec)
 
mysql> flush privileges;
Query OK,0 rows affected (0.00 sec)
 
mysql> create database db1;
Query OK,1 row affected (0.00 sec)
 
mysql> create database db2;
Query OK,1 row affected (0.01 sec)
 
mysql> create database db3;
Query OK,1 row affected (0.01 sec)

配置环境变量
[root@HE3 ~]# echo export PATH=$PATH:/usr/local/mycat/bin >>/etc/profile
[root@HE3 ~]# echo export MYCAT_HOME=/usr/local/mycat >> /etc/profile
[root@HE3 ~]# source /etc/profile

配置/etc/my.cnf中增加参数并重启数据库服务
lower_case_table_names=1

安装jdk7
[root@HE3 ~]# rpm -ivh jdk-7u79-linux-x64.rpm
Preparing...                ########################################### [100%]
  1:jdk                    ########################################### [100%]
Unpacking JAR files...
rt.jar...
jsse.jar...
charsets.jar...
tools.jar...
localedata.jar...
jfxrt.jar...

安装mycat

[root@HE3 ~]# tar xvf Mycat-server-1.5.1-RELEASE-20160816173057-linux.tar.gz -C /usr/local
[root@HE3 ~]# groupadd mycat -g 910
[root@HE3 ~]# useradd  mycat -g 910
[root@HE3 ~]# chown -R mycat:mycat /usr/local/mycat

修改必要的配置并启动
[root@HE3 ~]# cd  /usr/local/mycat/conf
[root@HE3 conf]# vim schema.xml
配置table,来决定table分片对应哪个dataNode还是global表,以及分片规则和片键

MyCat读写分离与主从切换

修改第43行的dataHost标签中的writeHost的url  10.10.10.250及用户名mycat和密码MANAGER

MyCat读写分离与主从切换

启动mycat
[root@HE3 bin]# cd /usr/local/mycat/bin
[root@HE3 bin]# mycat start
Starting Mycat-server...

观察wrapper.log文件中提示启动成功即可
[root@HE3 bin]# cd /usr/local/mycat/log

MyCat读写分离与主从切换

配置mycat
[root@HE3 conf]# vi /usr/local/mycat/conf/schema.xml
因为要涉及到实验主节点失败,write节点指向原从节点,所以要把主从节点都设置成writeHost
有关读写分离分发规则的相关dataHost标签属性balance值:
负载均衡类型,目前取值有3种:
(1) balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
(2) balance="1",全部的readHost与stand by writeHost 参与select语句负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情冴下,M2,S1,S2 都参与select语句的负载
均衡。(类似于balance=3,读操作只分发到除了真正的主节点之外的所有节点)
(3) balance="2",所有读操作都随机的在 writeHost、 readhost 上分发。(常用些,在所有主从节点上分发读请求)
(4) balance="3",所有读请求随机的分发到 writeHost 对应的readhost执行,writeHost不负担读压
力,注意 balance=3 叧在 1.4 及其以后版本有,1.3 没有。(常用些,只在从节点上分发读请求)
 
注:事务内的sql,默认走写节点,以注释/*balance*/开头,则会根据balance值决定
 
在本例中balance值设置为1,但是这个场景设置成3效果应该是一样的
 
有关主从(读写角色)切换设置属性规则的相关dataHost标签属性switchType值:
(1)-1表示不自动切换
(2)1默认值,自动切换
(3)2基于mysql主从同步的状态决定是否切换
(4)3基于cluster的切换,心跳语句要改成show status like 'wsrep%',这个里面配置的都是writehost
 
在本例中switchType值设置为1,表示自动切换,某些对主从数据一致要求较高的场景,建议使用2判断主从状态后再切换,或者使用galera cluster保证各节点数据一致然后将此值设置为3
 
切换的触发条件为主节点mysql服务崩溃或停止(暂时是这么理解的,希望批改的同学能给我解答一下)。
 
slaveThreshold 主从的延迟在多少秒以内,则把读请求分发到这个从节点,否则不往这个节点分发,假设生产环境能容忍的主从延时为60秒,则设置此值为60,此例中设置值为100
 
有关写请求是否分发到多个写节点规则的相关dataHost标签属性writeType值:
(1) 值0表示只分发到当前的主节点
(2) 值1表示分发到所有设定为writeHost的节点,不推荐使用,好像现在版本已经废除
 
此例中writeType值使用默认值0,写请求只分发到主节点,不会分发到其他的writeHost上

这里我们变更45行的心跳检测为show slave status,来方便之后我们的读写分离校验

MyCat读写分离与主从切换

验证读写分离效果
写操作

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3806ecbedab4444a50f9908dea1fc4cc.html