码迷,mamicode.com
首页 > 其他好文 > 详细

Mycat高可用解决方案三(读写分离)

时间:2019-01-09 23:29:43      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:目录   名称   负载   archive   pts   bsp   包含   stand   false   

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

三、mycat 读写分离-架构图

MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ )

MyCat 的读写分离是基于后端 MySQL 集群的主从同步来实现的,而 MyCat 提供语句的分发功能。

MyCat1.4 开始支持 MySQL 主从复制状态绑定的读写分离机制,让读更加安全可靠。

技术分享图片

 四、MyCat 的安装

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 用户并设置密码
# useradd mycat
# passwd mycat

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

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

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://org.opencloudb/">

<!-- 定义MyCat的逻辑库,逻辑库的概念与MySQL中的 database 概念相同 -->

<!-- schema name="rc_schema1" checkSQLschema="false" sqlMaxLimit="100" dataNode="rc_dn1"></schema -->

<!-- schema name="pay_schema1" checkSQLschema="false" sqlMaxLimit="100" dataNode="pay_dn1"></schema-->

<schema name="rc_schema2" checkSQLschema="false" sqlMaxLimit="100" dataNode="rc_dn2"></schema>

<schema name="pay_schema2" checkSQLschema="false" sqlMaxLimit="100" dataNode="pay_dn2"></schema>

<!-- 其中checkSQLschema表明是否检查并过滤SQL中包含schema的情况,如逻辑库为 TESTDB,则可能写为select * from TESTDB.edu_user,此时会自动过滤TESTDBSQL变为select * from edu_user,若不会出现上述写法,则可以关闭属性为false -->

<!--sqlMaxLimit默认返回的最大记录数限制,MyCat1.4版本里面,用户的Limit参数会覆盖掉MyCatsqlMaxLimit默认设置-->

<!-- 定义MyCat的数据节点 -->

<!-- dataNode name="rc_dn1" dataHost="dtHost1" database="roncoo" / -->

<!-- dataNode name="pay_dn1" dataHost="dtHost1" database="edu_simple_pay" / -->

<dataNode name="rc_dn2" dataHost="dtHost2" database="roncoo" />

<dataNode name="pay_dn2" dataHost="dtHost2" database="edu_simple_pay" />

<!-- dataNode 中的 name 数据表示节点名称, dataHost表示数据主机名称, database表示该节点要路由的数据库的名称 -->

<!-- dataHost配置的是实际的后端数据库集群(当然,也可以是非集群) -->

<!-- 注意:schema中的每一个dataHost中的host属性值必须唯一,否则会出现主从在所有dataHost中全部切换的现象 -->

<!-- 定义数据主机dtHost1,只连接到MySQL读写分离集群中的Master节点,不使用MyCat托管MySQL主从切换 -->

<!--

<dataHost name="dtHost1" 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主从切换 -->

<!-- 定义数据主机dtHost2,连接到MySQL读写分离集群,并配置了读写分离和主从切换 -->

<dataHost name="dtHost2" 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>

 

<!-- can have multi write hosts -->

<writeHost host="hostM2" url="192.168.199.110:3306" user="root" password="123456" />

<writeHost host="hostS2" url="192.168.199.111:3306" user="root" password="123456" />

</dataHost>

<!-- 参数balance决定了哪些MySQL服务器参与到读SQL的负载均衡中 -->

<!-- balance="0",为不开启读写分离,所有读操作都发送到当前可用的writeHost-->

<!-- balance="1",全部的readHoststand by writeHost参与select语句的负载均衡-->

<!-- balance="2",所有读操作都随机的在writeHostreadHost上分发-->

<!-- MyCat1.4版本中,若想支持MySQL一主一从的标准配置,并且在主节点宕机的情况下,从节点还能读取数据,则需要在MyCat里配置为两个writeHost并设置balance="1" -->

<!-- writeType="0",所有写操作都发送到可用的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 则表示主从同步,可以安全切换,否则不会切换。


 

 

 

 

 

 

 常见问题: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

 

 

 

Mycat高可用解决方案三(读写分离)

标签:目录   名称   负载   archive   pts   bsp   包含   stand   false   

原文地址:https://www.cnblogs.com/gaogaoyanjiu/p/10241185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!