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.gzhttps://github.com/MyCATApache/Mycat-Server/archive/1.6.5-RELEASE.zip
HAProxy版本:haproxy-1.5.19.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://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 localhost127.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版本:

[[email protected]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

[[email protected]-01 jdk1.7.0_79]# rpm -e --nodeps tzdata-java-2018g-1.el6.noarch

[[email protected]-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

[[email protected]-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.gztar -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 等内容。

[[email protected] ~]# cd /usr/local/mycat/conf/

[[email protected] 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,此时会自动过滤TESTDB,SQL变为select * from edu_user,若不会出现上述写法,则可以关闭属性为false -->

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

<!-- 定义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",全部的readHost与stand by writeHost参与select语句的负载均衡-->

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

<!-- 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

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

时间: 2024-10-07 22:43:19

Mycat高可用解决方案三(读写分离)的相关文章

专职DBA-基于MHA高可用搭建MySQL读写分离架构-Atlas

专职DBA-基于MHA高可用搭建MySQL读写分离架构-Atlas 1.Atlas介绍 Atlas是由Qihoo360,Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目. 它是在mysql-proxy-0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性. 360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条. 下载地址:https://github.com/Qihoo360/Atlas/releases 注意: 1.Atlas只能安装运

mysql+proxysql+keepalived实现高可用的数据库读写分离

前言 为了降低一台数据库的IO,远程连接数据库的时候,可以实现读写分离进行调度.这里就出现了一个单点,所以必须要做一个高可用.当然数据库服务器也需要做主从复制. 实验结构 说明:上图的拓扑只是整个架构中的一个小部分,其余功能的实现此图并未规划出来.此拓扑实现的目的是利用proxysql实现数据读写分离,并对proxysql高可用.两台安装了Keepalived和proxysql虚拟成一个VIP对外提供服务.这两台mysql服务器做的半同步复制,192.168.32.111是主节点负责用户的写操作

MySQL-高可用MHA+Atlas读写分离

公司最近为新的MySQL架构进行调整,要求给出方案,我这边提出使用MHA+Atlas做高可用集群读写分离架构,就多方讨论最终确认方案,进行实施: 一.简单说下MHA的工作原理 1个管理节点可以管理多套mysql架构,可以不装在mysql主机上 通过管理节点,来对其它数据节点上的mysql做监控,会每隔几秒做心跳检测 二.MHA的简单架构图 三.部署MHA 1,环境准备(依赖包.软件包.创建存放目录等)所有节点进行 #安装依赖包 [[email protected] ~]#yum install 

MySQL高可用解决方案MMM

一.MMM简介: MMM即Multi-Master Replication Manager for MySQL:mysql多主复制管理器,基于perl实现,关于mysql主主复制配置的监控.故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),MMM也能对从服务器进行读负载均衡,所以可以用它来在一组用于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份.节点之间重新同步功能的脚本.MySQL本身没有提供replication failover的解决方案,通过MMM方案能实

keepalived实现mycat高可用问题排查;道路坎坷,布满荆棘,定让你大吃一惊!

前言 开心一刻 医院里,一母亲带着小女孩打针.小女孩:“妈妈我不想打针,疼!”妈妈:“宝贝儿听话,这里这么多护士阿姨,咱们找个打针不疼的.”小女孩:“那哪个阿姨打针不疼呢?”妈妈:“妈妈也不知道,咱们试试看吧.”小女孩高兴的点了点头... 路漫漫其修远兮,吾将上下而求索! github:https://github.com/youzhibing 码云(gitee):https://gitee.com/youzhibing 问题背景 Mycat - 实现数据库的读写分离与高可用写完之后,本以为一两

LVS+Keepalived搭建MyCAT高可用负载均衡集群

LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.目前有三种IP负载均衡技术(VS/NAT.VS/TUN和VS/DR),十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq). Keepalvied Keepalived在这里主要用作RealServer的健康状态检查以及Mast

[ZZ]MySQL高可用解决方案

MySQL高可用解决方案(MySQL HA Solution) 什么是高可用性? 很多公司的服务都是24小时*365天不间断的.比如Call Center.这就要求高可用性.再比如购物网站,必须随时都可以交易.那么当购物网的server挂了一个的时候,不能对业务产生任何影响.这就是高可用性. 高可用性2个问题: 如何共享数据或同步数据?如何处理failover? 解释failover,意思就是当服务器down掉,或者出现错误的时候,可以自动的切换到其他待命的服务器,不影响服务器上App的运行.

net Core 使用MyCat分布式数据库,实现读写分离

net Core 使用MyCat分布式数据库,实现读写分离 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 MyCat2.0版本很快就发布了,关于MyCat的动态和一些问题,大家可以加一下MyCat的官方QQ群:106088787.我们今天主要介绍一下,在我们的Asp.net Core中如何使用Mycat,这源于一个大神(Amamiya Yuuko)的分享,但是,这中间还是有少许的 坑 : 首先,因为大神是比较忙的,而且主要分享关键技术,所以有些地方很简略,而往往这些简

浅谈秒级故障切换!用MHA轻松实现MySQL高可用(三)

MySQL复制是异步或者半同步的.当master故障时,一些slave可能并没有收到最新的relay log,也就意味着每个slave可能处于不同的状态.手动处理这些一致性问题是小事,因为不修复这些问题,就不能开始复制.但是手动修复这些问题,花费一个小时或更多的时间并不少见. 一主一从 如果架构是一主一从,就不会出现一部分slave的状态落后于最新的slave的问题.当master出现故障,可以将应用的流量全部发送给新的master(原来的slave).故障切换很容易解决.但是会有下面的问题.