Mycat高可用解决方案三(读写分离)
Mycat高可用解决方案三(读写分离)
一、系统部署规划
名称 |
IP |
主机名称 |
配置 |
Mycat主机01 |
192.168.199.112 |
mycat01 |
2核/2G |
Mysql主节点 |
192.168.199.110 |
mysql01 |
2核/2G |
Mysql从节点 |
192.168.199.111 |
mysql02 |
2核/2G |
二、软件版本:
进入下载列表地址:http://dl.mycat.io
MySQL 版本:mysql-5.7.9
下载地址: https://downloads.mysql.com/archives/get/file/mysql-5.7.9-linux-glibc2.5-x86_64.tar.gz
JDK版本:jdk1.7
下载地址:http://dl.mycat.io/jdk-7u79-linux-x64.tar.gz
备用jdk1.8
下载地址:http://dl.mycat.io/jdk-8u20-linux-x64.tar.gz
mycat版本:1.6.5
下载地址:http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
https://github.com/MyCATApache/Mycat-Server/archive/1.6.5-RELEASE.zip
HAProxy版本:haproxy-1.8.15.tar.gz
下载地址:https://src.fedoraproject.org/repo/pkgs/haproxy/haproxy-1.8.15.tar.gz
其他版本列表页:https://src.fedoraproject.org/repo/pkgs/haproxy/
或者
yum install haproxy -y
keepalived版本:
下载地址:http://www.keepalived.org/software/keepalived-2.0.11.tar.gz
其他版本下载列表页:http://www.keepalived.org/download.html
或者
yum install keepalived -y
三、mycat 读写分离-架构图
MyCat 介绍 ( MyCat 官网:http://www.mycat.io/)
MyCat 的读写分离是基于后端 MySQL 集群的主从同步来实现的,而 MyCat 只是 提供语句的分发功能。
MyCat1.4 开始支持 MySQL 主从复制状态绑定的读写分离机制,让读更加安全可靠。
四、MyCat 的安装
mycat主机配置:192.168.199.112
1、配置网络
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
#HWADDR=00:50:56:a1:12:53
IPADDR=192.168.199.112
GATEWAY=192.168.199.2
NETMASK=255.255.255.0
DNS1=8.8.8.8
DNS2=192.168.199.2
2、设置 MyCat 的主机名和 IP 与主机名的映射
# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mycat-01
# vi /etc/hosts
127.0.0.1 localhost
127.0.0.1 mycat-01
192.168.199.112 mycat-01
192.168.199.110 mysql-01
192.168.199.111 mysql-02
3、因为 MyCat 是用 Java 开发的,因此 MyCat 运行需要安装 JDK(准确来说是 JRE 就够了),并且需要 JDK1.7 或以上版本
卸载自带的openjdk版本:
[root@mycat-01 jdk1.7.0_79]# rpm -qa |grep java
tzdata-java-2018g-1.el6.noarch
java-1.7.0-openjdk-1.7.0.201-2.6.16.0.el6_10.x86_64
[root@mycat-01 jdk1.7.0_79]# rpm -e --nodeps tzdata-java-2018g-1.el6.noarch
[root@mycat-01 jdk1.7.0_79]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.201-2.6.16.0.el6_10.x86_64
[root@mycat-01 jdk1.7.0_79]#
安装jdk1.7
mkdir -p /java wget http://dl.mycat.io/jdk-7u79-linux-x64.tar.gz mkdir -p /usr/local/java/
tar -zxvf jdk-7u79-linux-x64.tar.gz -C /usr/local/java/
配置JDK环境变量:
# vi /etc/profile
## java env
export JAVA_HOME=/usr/local/java/jdk1.7.0_79
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
# source /etc/profile
# java -version
4、创建 mycat 用户并设置密码(密码:mycat)
# useradd mycat
# passwd mycat
# cd /usr/local/
# chown mycat:mycat -R mycat/
其他相关命令:
1、创建用户: 在创建用户时,需要为新建用户指定一用户组,如果不指定其用户所属的工作组,自动会生成一个与用户名同名的工作组。 创建用户 mycat 的时候指定其所属工作组mycats,例:useradd –g mycats mycat 2、使用 passwd 命令为新建用户设置密码(密码:mycat) 例:passwd mycat 注意:没有设置密码的用户不能使用。 3、命令 usermod 修改用户账户 例:将用户 mycat 的登录名改为 my1, usermod –l my1 mycat 例:将用户 mycat 加入到 users组中, usermod –g mycats mycat 例:将用户 mycat 目录改为/mycats/my1 usermod –d /mycats/my1 mycat 4、使用命令 userdel 删除用户账户 例:删除用户mycat userdel mycat 例:删除用户 mycat2,同时删除他的工作目录 userdel –r mycat2
自己总结的另外一种方式:
1、执行命令找到用户目录并删除:
find / -name mycat
rm -rf /home/mycat 和可怀疑的文件目录
2、执行命令删除用户:
cat /etc/passwd
vi /etc/passwd
连击dd删除mycat用户
3、执行命令删除用户组:
cat /etc/group
vi /etc/group
连击dd删除mycat用户
1、与用户(user)和用户组(group)相关的配置文件;
1)与用户(user)相关的配置文件;
/etc/passwd 注:用户(user)的配置文件;
/etc/shadow 注:用户(user)影子口令文件;
2)与用户组(group)相关的配置文件;
/etc/group 注:用户组(group)配置文件;
/etc/gshadow 注:用户组(group)的影子文件;
2、管理用户(user)和用户组(group)的相关工具或命令;
1)管理用户(user)的工具或命令;
useradd 注:添加用户
adduser 注:添加用户
passwd 注:为用户设置密码
usermod 注:修改用户命令,可以通过usermod 来修改登录名、用户的家目录等等;
pwcov 注:同步用户从/etc/passwd 到/etc/shadow
pwck 注:pwck是校验用户配置文件/etc/passwd 和/etc/shadow 文件内容是否合法或完整;
pwunconv 注:是pwcov 的立逆向操作,是从/etc/shadow和 /etc/passwd 创建/etc/passwd ,然后会删除 /etc/shadow 文件;
finger 注:查看用户信息工具 id 注:查看用户的UID、GID及所归属的用户组 chfn 注:更改用户信息工具
su 注:用户切换工具 sudo 注:sudo 是通过另一个用户来执行命令(execute a command as another user),su 是用来切换用户,然后通过切换到的用户来完成相应的任务,
但sudo 能后面直接执行命令,比如sudo 不需要root 密码就可以执行root 赋与的执行只有root才能执行相应的命令;但得通过visudo 来编辑/etc/sudoers来实现;
visudo 注:visodo 是编辑 /etc/sudoers 的命令;也可以不用这个命令,直接用vi 来编辑 /etc/sudoers 的效果是一样的;
sudoedit 注:和sudo 功能差不多;
2、管理用户组(group)的工具或命令;
groupadd 注:添加用户组;
groupdel 注:删除用户组;
groupmod 注:修改用户组信息
groups 注:显示用户所属的用户组
grpck grpconv 注:通过/etc/group和/etc/gshadow 的文件内容来同步或创建/etc/gshadow ,如果/etc/gshadow 不存在则创建;
grpunconv 注:通过/etc/group 和/etc/gshadow 文件内容来同步或创建/etc/group,然后删除gshadow文件;
5、上传安装包 Mycat-server-1.6.5-release-20180122220033-linux.tar.gz 到 MyCat 服务器中的/home/mycat 目录,
并解压并移动到 /usr/local/mycat 目录
或者
直接下载安装包:
wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local/
cd /usr/local/mycat/
设置 MyCat 的环境变量
# vi /etc/profile
## mycat env
export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:$MYCAT_HOME/bin
# source /etc/profile
五、配置MyCat
简单的读写分离(schema.xml和server.xml),只有在特殊规则需要配置rule.xml
1、在配置 MyCat 前,请确认 MySQL 的主从复制安装配置已完成并正常运行。MySQL 主从数据的同步在MySQL 中配置,MyCat 不负责数据同步的问题。
补充:
(1) MySQL 主从复制配置中,如果涉及到函数或存储过程的同步复制,需要在/etc/my.cnf 中的[mysqld]段中增加配置 log_bin_trust_function_creators=true ,
或在客户端中设置 set global log_bin_trust_function_creators = 1;
(2) 如果要做读写分离下的主从切换,那么从节点也有可能会变为写节点,因此从节点就不能设置为只读 read_only=1 。
(3) Linux 版本的 MySQL,需要设置为 MySQL 大小写不敏感,否则可能会发生找不到表的问题。可在/etc/my.cnf 的[mysqld]段中增加 lower_case_table_names=1 。
2、配置 MyCat 的 schema.xml
schema.xml 是 MyCat 最重要的配置文件之一,用于设置 MyCat 的逻辑库、表、数据节点、dataHost 等内容。
[mycat@mycat-01 ~]# cd /usr/local/mycat/conf/
[root@mycat-01 conf]#vi schema.xml
参数说明:编写习惯:从下往上,dataHost > dataNode > schema(table)
本次配置:(dtd新老版本不一样,这里要注意)
老版本: | 新版本: |
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
|
<?xml version="1.0"?>
|
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 3、定义MyCat的逻辑库,逻辑库的概念与MySQL中的 database 概念相同 -->
<!-- 方式一:非读写分离 schema -->
<!-- <schema name="wr-off-schema01" checkSQLschema="false" sqlMaxLimit="100" dataNode="wr-off-dn01"></schema> -->
<!-- <schema name="wr-off-schema02" checkSQLschema="false" sqlMaxLimit="100" dataNode="wr-off-dn02"></schema> -->
<!-- 方式二:读写分离 schema -->
<schema name="wr-on-schema01" checkSQLschema="false" sqlMaxLimit="100" dataNode="wr-on-dn01"></schema>
<schema name="wr-on-schema02" checkSQLschema="false" sqlMaxLimit="100" dataNode="wr-on-dn02"></schema>
<!-- 2、定义MyCat的数据节点 -->
<!-- 方式一:非读写分离 dataNode -->
<!-- <dataNode name="wr-off-dn01" dataHost="dtHost01" database="test01" /> -->
<!-- <dataNode name="wr-off-dn02" dataHost="dtHost01" database="test02" /> -->
<!-- 方式二:读写分离 dataNode -->
<dataNode name="wr-on-dn01" dataHost="dtHost02" database="test01" />
<dataNode name="wr-on-dn02" dataHost="dtHost02" database="test02" />
<!-- 注意:schema中的每一个dataHost中的host属性值必须唯一,否则会出现主从在所有dataHost中全部切换的现象。-->
<!-- 1、定义数据的物理主机 -->
<!-- 方式一:非读写分离 dataHost -->
<!-- 定义数据主机dtHost01,只连接到MySQL读写分离集群中的Master节点,不使用MyCat托管MySQL主从切换 -->
<!--
<dataHost name="dtHost01" maxCon="500" minCon="20" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.199.110:3306" user="root" password="123456" />
</dataHost>
-->
<!-- 方式二:使用MyCat托管MySQL主从切换 -->
<!-- 定义数据主机dtHost02,连接到MySQL读写分离集群,并配置了读写分离和主从切换 -->
<dataHost name="dtHost02" maxCon="500" minCon="20" balance="1" writeType="0"
dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<!-- 通过show slave status检测主从状态,
当主宕机以后,发生切换,从变为主,原来的主变为从,这时候show slave status就会发生错误,因为原来的主没有开启slave,
不建议直接使用switch操作,而是在DB中做主从对调。
-->
<heartbeat>show slave status</heartbeat>
<writeHost host="hostM2" url="192.168.199.110:3306" user="root" password="123456" />
<readHost host="hostS2" url="192.168.199.111:3306" user="root" password="123456" />
</writeHost>
<writeHost host="hostS2" url="192.168.199.111:3306" user="root" password="123456" />
</dataHost>
<!-- 参数balance决定了哪些MySQL服务器参与到读SQL的负载均衡中 -->
<!-- balance="0",为不开启读写分离,所有读操作都发送到当前可用的writeHost上-->
<!-- balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡-->
<!-- balance="2",所有读操作都随机的在writeHost、readHost上分发-->
<!-- MyCat1.4版本中,若想支持MySQL一主一从的标准配置,并且在主节点宕机的情况下,从节点还能读取数据,
则需要在MyCat里配置为两个writeHost并设置balance="1" -->
<!-- writeType="0",所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost-->
<!-- writeType="1",仅仅对于galera for mysql集群这种多主多节点都能写入的集群起效,此时Mycat会随机选择一个writeHost并写入数据,
对于非galera for mysql集群,请不要配置writeType=1,会导致数据库不一致的严重问题 -->
</mycat:schema>
MyCat1.4 开始支持 MySQL 主从复制状态绑定的读写分离机制,让读更加安全可靠,配置如下:
MyCat 心跳检查语句配置为 show slave status,dataHost上定义两个新属性:switchType="2" 与 slaveThreshold="100",此时意味着开启MySQL主从复制状态绑定的读写分离与切换机制,MyCat心跳机制通过检测 show slave status 中的"Seconds_Behind_Master", "Slave_IO_Running", "Slave_SQL_Running" 三个字段来确定当前主从同步的状态以及Seconds_Behind_Master主从复制时延,当 Seconds_Behind_Master大于slaveThreshold 时,读写分离筛选器会过滤掉此 Slave 机器,防止读到很久之前的旧数据,而当主节点宕机后,切换逻辑会检查Slave 上的Seconds_Behind_Master 是否为 0,为 0 时则表示主从同步,可以安全切换,否则不会切换。
3、配置 server.xml
server.xml 主要用于设置系统变量、管理用户、设置用户权限等。
[root@mycat-01 conf]# vi server.xml
老版本: | 新版本: |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
|
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="defaultSqlParser">druidparser</property>
<property name="charset">utf8mb4</property>
<!-- <property name="useCompression">1</property>-->
<!--1为开启mysql压缩协议-->
<!-- <property name="processorBufferChunk">40960</property> -->
<!--
<property name="processors">1</property>
<property name="processorExecutor">32</property>
-->
<!--默认是65535 64K 用于sql解析时最大文本长度 -->
<!--<property name="maxStringLiteralLength">65535</property>-->
<!--<property name="sequnceHandlerType">0</property>-->
<!--<property name="backSocketNoDelay">1</property>-->
<!--<property name="frontSocketNoDelay">1</property>-->
<!--<property name="processorExecutor">16</property>-->
<!--<property name="mutiNodeLimitType">1</property> --> <!-- 0:开启小数量级(默认);1:开启亿级数据排序-->
<!--<property name="mutiNodePatchSize">100</property> --> <!-- 亿级数量排序批量 -->
<!--
<property name="processors">32</property>
<property name="processorExecutor">32</property>
<property name="serverPort">8066</property>
<property name="managerPort">9066</property>
<property name="idleTimeout">300000</property>
<property name="bindIp">0.0.0.0</property>
<property name="frontWriteQueueSize">4096</property>
<property name="processors">32</property> -->
</system>
<!-- 用户1,对应的MyCat逻辑库连接到的数据节点对应的主机为MySQL主从复制配置中的Master节点,
没实现读写分离,读写都在该Master节点中进行 -->
<!--
<user name="mycat01">
<property name="password">123456</property>
<property name="schemas">wr-off-schema01,wr-off-schema02</property>
</user>
-->
<!-- 用户2,对应的MyCat逻辑库连接到的数据节点对应的主机为主从复制集群,并通过MyCat实现了读写分离 -->
<user name="mycat02">
<property name="password">123456</property>
<property name="schemas">wr-on-schema01,wr-on-schema02</property>
</user>
<!-- 用户3,只读权限-->
<user name="mycat03">
<property name="password">123456</property>
<property name="schemas">wr-on-schema01,wr-on-schema02</property>
<property name="readOnly">true</property>
</user>
</mycat:server>
mycat用户密码加密:
为root用户生成加密后的密码:cd /usr/local/mycat/lib/
java -cp Mycat-server-1.6.5-release.jar io.mycat.util.DecryptUtil 0:root:12345
<property name = "usingDecrypt">1</property>
<property name = "password">hpYb3oDTK+R9M1d6jHkQZoymhRwEM8zq47km/5/26A5k8B9LpraNFbaeZFBregpgoy24TslumO8aWzieL+u84g==</property>
4、防火墙中打开 8066 和 9066 端口
MyCat 的默认数据端口为 8066,mycat 通过这个端口接收数据库客户端的访问请求。
管理端口为 9066,用来接收 mycat 监控命令、查询 mycat 运行状况、重新加载配置文件等。
[root@mycat-01 mycat]# vi /etc/sysconfig/iptables
增加:
## MyCat
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8066 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9066 -j ACCEPT
重启防火墙:
[root@mycat-01 mycat]# service iptables restart
5、修改 log 日志级别为 debug
以便通过日志确认基于 MyCat 的 MySQL 数据库集群读写分离的数据操作状态(可以在正式上生产前改成 info 级别)
[mycat@mycat-01 conf]$ vi /usr/local/mycat/conf/log4j.xml
6、启动 MyCat
[mycat@mycat-01 bin]$ cd /usr/local/mycat/bin/
(1) 控制台启动,这种启动方式在控制台关闭后,MyCat 服务也将关闭,适合调试使用:
[mycat@mycat-01 bin]$ ./mycat console
(2) 可以采用以下后台启动的方式:
[mycat@mycat-01 bin]$ ./mycat start
Starting Mycat-server...
(对应的,重启: mycat restart , 关闭: mycat stop )
检查启动日志:tail -f /usr/local/mycat/logs/wrapper.log
或者 通过jps -m命令查看:
[mycat@mycat-01 bin]$ jps 2052 Jps 1980 WrapperSimpleApp [mycat@mycat-01 bin]$ jps -m 1980 WrapperSimpleApp io.mycat.MycatStartup start 2062 Jps -m [mycat@mycat-01 bin]$
7、MyCat 连接测试
(1)如果本地 Windows 安装有 MySQL,可以使用已有的 mysql 客户端远程操作 MyCat
mysql -umycat02 -p123456 -h 192.168.199.112 -P8066
1:如何查看MySQL相关的编码格式默认值
在cmd中,输入指令"mysql –u root –p”以root身份连接mysql数据库
然后有两种方式查看编码格式:
1)show variables like ‘character%’;
2)show variables like ‘collation%’;
2:既然可以用命令查看,当然也可以用命令修改了
稍微解释一下:
character_set_client:客户端编码方式;
character_set_connection:建立连接时使用的编码;
character_set_database:数据库的编码;
character_set_result:结果集的编码;
character_set_server:数据库服务器的编码;
I:执行命令:set NAMES ‘utf8’;
该命令等同于执行如下三条命令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
但是,该设置的编码格式,只对当前连接(窗口)有效,即用另外一个Dos窗口再连接mysql数据库进行查看,编码格式是没有改变的。
II:数据库、表、字段,均可以在创建时设置其默认编码格式,或者在其后进行修改
1)create database dbname character set utf8;
alter database dbname character set utf8;
2)create table tname(…) default charset=utf8;
alter table type character set utf8;
3)create table tname(flag_deleted enum('Y','N') character set utf8 not null default 'N')
alter table type modify type_name varchar(50) character set utf8;
3:比较好的,也是建议的,却是最后压轴的磨磨唧唧登场的方法,如下... ...
修改MySQL的配置文件my.ini。
在Window系统下,MySQL的配置文件是在MySQL安装目录下的my.ini文件,但是可能安装完成后,在目录下木有my.ini文件,而是如下这些文件:
这时候可以去网上下载一个my.ini文件然后放到目录下即可,或者在C:\ProgramData\MySQL\MySQL Installer目录下有:
选择其中一个版本的my-template-x.x.ini改名成my.ini,放到安装目录下也可以。至于细节再在my.ini中具体配置即可。
my.ini配置文件修改细节:
I:在[mysqld]标签下加
default-character-set=utf8
character_set_server=utf8
lower_case_table_names=1 //表名不区分大小写(此与编码无关)
II:在[mysql]标签下加
default-character-set=utf8
III:在[mysql.server]标签下加
default-character-set=utf8
IV:在[mysql_safe]标签下加
default-character-set=utf8
V:在[client]标签下加
default-character-set=utf8
4:在Dos窗口中执行
net stop mysqlservice //关闭mysql服务
net stop mysqlservice //启动mysql服务
然后在查看一下mysql默认的编码格式,是否改变成功!(最后绝招你可以重装mysql,然后在安装的那个步骤进行设置)
附注:
1:连接mysql数据库时的字符串,设计编码类型的时候如下所示
jdbc:mysql://127.0.0.1:3306/dbname?useUnicode=true&characterEncoding=utf-8
2:mysql支持哪些编码格式,查看%MySQL%\share\charsets\Index.xml即可
3:mysql的配置文件加载顺序
c:/windows/my.cnf-->c:/windows/my.ini-->c:/my.cnf-->c:/my.ini-->$installdir/my.ini(%MySQL_HOME%/my.ini)-->defaults-extra-file=path
(2)如果为了方便,需要在 MyCat 主机上对 MyCat 进行操作(把 MyCat 当是本地 MySQL 来操作),可以在 MyCat 节点主机上安装 MySQL 客户端:
[mycat@mycat-01 bin]$ su root
[root@mycat-01 bin]# yum install mysql -y
使用安装好的 mysql 客户端登录 MyCat
[mycat@mycat-01 bin]$ mysql -umycat02 -p123456 -h192.168.199.112 -P8066
(3)解决客户端查询乱码:
如果使用mycat主机上安装了mysql客户端进行查询出现乱码,则需要设置客户端的编码,
在/etc/my.cnf(windows系统 为$MYSQL_HOME/my.ini)中的[client],设置客户端的默认编码为utf8。
[root@mycat-01 mycat]# vi /etc/my.cnf
增加:
[client]
default-character-set=utf8
保存后再查询,乱码问题解决,如
(4) 使用第三方 MySQL 管理客户端连接 MyCat 测试(navicat 支持,MySQL-Front 兼容性不太好),以 navicat 为例:
8、读写分离测试
(1) 监听 MyCat 日志
[mycat@mycat-01 ~]$ cd /usr/local/mycat/logs/
[mycat@mycat-01 logs]$ tail -f mycat.log
滚动监听主从节点,从节点监听两次(是因为从节点配置了主从切换和读写分离,本身是写节点,主机宕机又能作为主节点)
(2) 读测试
[mycat@mycat-01 logs] mysql -umycat02 -p123456 -h192.168.199.112 -P8066
mysql> show databases;
mysql> use wr-on-schema01;
mysql> show tables;
mysql> select * from login_user;
日志变化:
多次执行select * from login_user 语句,MyCat 打印出来的日志信息显示读操作请求都是路由到 Slave 节点(192.168.199.111)。
(2) 写测试
mysql> insert into login_user (userName, pwd) values('曹操', '123456');
执行上面的新增插入语句后,此时对应的 MyCat 日志信息如下:
多次执行以上插入语句,发现新增数据都是从 Master 节点(192.168.199.110)插进入的,并且 Slave 节点(192.168.199.111)通过 Binlog 同步了 Master 节点中的数据。
综上,基于 MyCat 的读写分离集群配置成功。
==================================================================
常见问题:10038错误码
10038错误码,一般是服务端开启了防火墙
如果重启服务器,可能把临时的防火墙重置为开启状态
解决办法:
1、配置防火墙不拦截:修改/etc/sysconfig/iptables 文件,添加以下内容:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
2、永久关闭防火墙:chkconfig iptables off