怎么理解Mycat读写分离

51次阅读
没有评论

共计 5883 个字符,预计需要花费 15 分钟才能阅读完成。

这篇文章主要介绍“怎么理解 Mycat 读写分离”,在日常操作中,相信很多人在怎么理解 Mycat 读写分离问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解 Mycat 读写分离”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

1 MySQL 读写分离的概述

Mysql 作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过。但在实际的生产环境中,由单台 Mysql 作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面。

因此,一般来说都是通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy/Amoeba)来提升数据库的并发负载能力,这样的方案来进行部署与实施的。

1.1   读写分离工作原理:

基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理 SELECT 查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

数据内部交换过程:

1.2   为什么要读写分离:

1)面对越来越大的访问压力,单台的服务器的性能成为瓶颈,需要分担负载;

2)主从只负责各自的写和读,极大程度的缓解 X 锁和 S 锁争用;

3)从库可配置 myisam 引擎,提升查询性能以及节约系统开销;

4)增加冗余,提高可用性。

1.3   实现读写分离的方式:

一般有两种方式实现

1)应用程序层实现,网站的程序实现;

2)应用程序层实现指的是在应用程序内部及连接器中实现读写分离。

优点:

A:应用程序内部实现读写分离,安装既可以使用;

B:减少一定部署难度;

C:访问压力在一定级别以下,性能很好。

缺点:

A:架构一旦调整,代码要跟着变;

B:难以实现高级应用,如自动分库,分表;

C:无法适用大型应用场景。

中间件层实现

中间件层实现是指在外部中间件程序实现读写分离

常见的中间件程序:

Cobar:

阿里巴巴 B2B 开发的关系型分布式系统,管理将近 3000 个 MySQL 实例。在阿里经受住了考验,后面由于作者的走开的原因 cobar 没有人维护了,阿里也开发了 tddl 替代 cobar。

MyCAT:

社区爱好者在阿里 cobar 基础上进行二次开发,解决了 cobar 当时存在的一些问题,并且加入了许多新的功能在其中。目前 MyCAT 社区活跃度很高,目前已经有一些公司在使用 MyCAT。总体来说支持度比较高,也会一直维护下去,

OneProxy:

数据库界大牛,前支付宝数据库团队领导楼总开发,基于 mysql 官方的 proxy 思想利用 c 进行开发的,OneProxy 是一款商业收费的中间件,楼总舍去了一些功能点,专注在性能和稳定性上。有朋友测试过说在高并发下很稳定。

Vitess:

这个中间件是 Youtube 生产在使用的,但是架构很复杂。与以往中间件不同,使用 Vitess 应用改动比较大要使用他提供语言的 API 接口,我们可以借鉴他其中的一些设计思想。

Kingshard:

Kingshard 是前 360Atlas 中间件开发团队的陈菲利用业务时间用 go 语言开发的,目前参与开发的人员有 3 个左右,目前来看还不是成熟可以使用的产品,需要在不断完善。

Atlas:

360 团队基于 mysql proxy 把 lua 用 C 改写。原有版本是支持分表,目前已经放出了分库分表版本。在网上看到一些朋友经常说在高并发下会经常挂掉,如果大家要使用需要提前做好测试。

MaxScale 与 MySQL Route:

这两个中间件都算是官方的,MaxScale 是 mariadb (MySQL 原作者维护的一个版本) 研发的,目前版本不支持分库分表。MySQL Route 是现在 MySQL 官方 Oracle 公司发布出来的一个中间件。

优点:

A:架构设计更灵活;

B:可以在程序上实现一些高级控制,如:透明化水平拆分,failover, 监控;

C:可以依靠些技术手段提高 mysql 性能;

D:对业务代码的影响小,同时也安全。

缺点:

需要一定的开发运维团队的支持。

2   什么是 MYCAT

一个彻底开源的,面向企业应用开发的大数据库集群;

支持事务、ACID、可以替代 MySQL 的加强版数据库;

一个可以视为 MySQL 集群的企业级数据库,用来替代昂贵的 Oracle 集群;

一个融合内存缓存技术、NoSQL 技术、HDFS 大数据的新型 SQL Server;

结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品;

一个新颖的数据库中间件产品。

3   服务安装与配置

实验架构

服务器

IP

说明

xuegod65

192.168.1.65

mycat 服务器,连接数据库时,连接此服务器

xuegod63

192.168.1.63

物理数据库 1,master

xuegod64

192.168.1.64

物理数据库 2,slave

MyCAT 有提供编译好的安装包,支持 windows、Linux、Mac、Solaris 等系统上安装与运行。官方下载主页 http://www.mycat.io。

3.1   文件结构

linux 下可以下载 Mycat-server-xxxxx.linux.tar.gz 解压在某个目录下,注意目录不能有空格,

在 Linux(Unix) 下,建议放在 /usr/local/Mycat 目录下,

目录结构

目录

说明

bin

mycat 命令,启动、重启、停止等

catlet

catlet 为 Mycat 的一个扩展功能

conf

Mycat 配置信息, 重点关注

lib

Mycat 引用的 jar 包,Mycat 是 java 开发的

logs

日志文件,包括 Mycat 启动的日志和运行的日志。

配置文件

文件

说明

server.xml

Mycat 的配置文件,设置账号、参数等

schema.xml

Mycat 对应的物理数据库和数据库表的配置

rule.xml

Mycat 分片(分库分表)规则

3.2 mycat 安装 (xuegod65)1. 安装 JDK 1.7 或者以上版本  

第一步:下载 jdk-8u131-linux-x64.tar.gz 文件 http://haixi.sfkcn.com:8080/201704/tools/jdk-linux-x64.tar.gz

第二步:新建 /usr/java 文件夹,将 jdk-8u131-linux-x64.tar.gz 放到该文件夹中,并解压到当前目录下

第三步:配置环境变量 在 /etc/profile 底部加入如下内容:

JAVA_HOME=/usr/java/jdk1.8.0_131

PATH=$JAVA_HOME/bin:$PATH CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

export PATH JAVA_HOME CLASSPATH

[root@xuegod65 java]# source /etc/profile  # 使环境变量生效

查看 java –version

2. 解压 mycat 安装  

linux 下可以下载 Mycat-server-xxxxx.linux.tar.gz 解压到 /usr/local/,注意目录不能有空格

创建 mycat 用户,并修改密码 useradd mycat

修改权限 chown – R mycat.mycat  /usr/local/mycat

配置环境变量

1) vi /etc/profile, 在系统环境变量文件中增加

MYCAT_HOME=/usr/local/mycat

PATH=$MYCAT_HOME/bin:$PATH

2) 执行 source /etc/profile 命令,使环境变量生效。

编辑 hosts 文件

192.168.1.63    xuegod63.cn     xuegod63

192.168.1.64    xuegod64.cn     xuegod64

192.168.1.65    xuegod65.cn     xuegod65

4   服务启动与启动设置

(mycat 的用户账号和授权信息是在 conf/server.xml 文件中配置

[root@xuegod65 ~]#Vim /usr/local/mycat/conf/server.xml

 

druidparser

user name= root

123456

ha

user

ha

true

参数说明

user      用户配置节点

–name  登录的用户名,也就是连接 Mycat 的用户名,这里就是对于外部应用

–password  登录的密码,也就是连接 Mycat 的密码

–schemas  数据库名,这里会和 schema.xml 中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库 db1,db2,则配置 db1,dbs

–privileges  配置用户针对表的增删改查的权限,具体见文档吧

编辑 MyCAT 的配置文件 schema.xml,关于 dataHost 的配置信息如下:

[root@xuegod65 ~]#vim /usr/local/mycat/conf/schema.xml

select user()

以下是一个模版解释

select user()

 

balance  属性负载均衡类型,目前的取值有 4 种:

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,所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。

 

writeType  属性,负载均衡类型,目前的取值有 3 种:

writeType= 0 , 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .

writeType= 1,所有写操作都随机的发送到配置的 writeHost。

writeType= 2,没实现。

 

switchType  属性

-1 表示不自动切换

1 默认值,自动切换

2 基于 MySQL 主从同步的状态决定是否切换

5   配置 Mysql 主从

xuegod63 上创建数据库和表,用于实现写操作:

[root@xuegod63 ~]# mysql -uroot -p123456

mysql create database ha;

mysql use ha;

mysql create table test(id int,name varchar(20));

mysql insert into test values(1, man

授权给 mycat 登陆数据库使用的帐号

mysql grant all privileges on *.* to  mycat@ % identified by 123456

mysql grant replication slave on *.* to slave@ 192.168.1.% identified by 123456

mysql flush privileges;

mysqldump –uroot –p123456  -B ha ha.sql  # 导出给从库

scp ha.sql xuegod64.cn:/root

[root@xuegod64 ~]# vim /etc/my.cnf

log-bin=mysql-bin-master  # 启用二进制日志

server-id=1   #本机数据库 ID 标示

binlog-do-db=HA #可以被从服务器复制的库, 二进制需要同步的数据库名

binlog-ignore-db=mysql  # 不可以被从服务器复制的库

如需关闭密码强度审计,在 my.cnf 添加 validate-password=off

[root@xuegod64 ~]# systemctl restart mysqld

xuegod64 上导入数据库和表,用于实现读操作:

[root@xuegod64 ~]# mysql -uroot -p123456 ha.sql  

授权给 mycat 登陆数据库使用的帐号

mysql grant all privileges on *.* to  mycat@ % identified by 123456

mysql flush privileges;

[root@xuegod64 ~]# vim /etc/my.cnf

server-id=2   #本机数据库 ID 标示

[root@xuegod64 ~]# systemctl restart mysqld

mysql stop slave;    # 停止 slave

mysql change master to master_host= 192.168.1.63 ,master_user= slave ,master_password= 123456

mysql start slave;    # 启动 slave

mysql show slave status\G 查看状态,有两个 yes 主从同步成功!

启动服务 mycat 服务

[root@xuegod65~]# /usr/local/mycat/bin/mycat  start

测试读写分离

6   当我们 slave 挂掉后咋样呢

模拟故障:从服务器挂掉了

[root@xuegod64 ~]# systemctl stop mysqld

在客户端上测试读写

[root@xuegod66 ~]# mysql -uroot -p123456  -h 192.168.1.65-P8066

mysql use ha;

mysql select * from t1;

说明读操作的路由切换到 master 上了,对外没有任何影响!

7   当我们 master 挂掉后咋样呢

模拟故障:主服务器挂掉了

[root@xuegod63 ~]# systemctl stop mysqld

在客户端上测试读写

[root@xuegod66 ~]# mysql -uroot -p123456  -h 192.168.1.65 -P8066

mysql create table t3(id int);

ERROR 1184 (HY000): 拒绝连接 #主数据库停止了,是无法写操作的,但不影响读.

mysql use ha;

mysql select * from t1;

到此,关于“怎么理解 Mycat 读写分离”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计5883字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)