iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >怎么理解Mycat读写分离
  • 125
分享到

怎么理解Mycat读写分离

2024-04-02 19:04:59 125人浏览 安东尼
摘要

这篇文章主要介绍“怎么理解Mycat读写分离”,在日常操作中,相信很多人在怎么理解Mycat读写分离问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解Mycat读写分离”

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

1 Mysql读写分离的概述

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

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

1.1  读写分离工作原理:

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

怎么理解Mycat读写分离

数据内部交换过程:

怎么理解Mycat读写分离

1.2  为什么要读写分离:

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

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

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

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

1.3  实现读写分离的方式:

一般有两种方式实现

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

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

优点:

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

B:减少一定部署难度;

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

缺点:

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

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

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

中间件层实现

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

常见的中间件程序:

怎么理解Mycat读写分离

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有提供编译好的安装包,支持windowslinuxMac、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/,注意目录不能有空格


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


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


  1. 配置环境变量


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

MYCAT_HOME=/usr/local/mycat

PATH=$MYCAT_HOME/bin:$PATH


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


  1. 编辑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;

怎么理解Mycat读写分离

说明读操作的路由切换到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读写分离

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

您可能感兴趣的文档:

--结束END--

本文标题: 怎么理解Mycat读写分离

本文链接: https://www.lsjlt.com/news/64566.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么理解Mycat读写分离
    这篇文章主要介绍“怎么理解Mycat读写分离”,在日常操作中,相信很多人在怎么理解Mycat读写分离问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解Mycat读写分离”...
    99+
    2024-04-02
  • mycat-3:读写分离
    利用mycat读写分离主库192.168.56.101,备库192.168.56.25.3个数据库db1,db2,db3.主从同步见之前数据库目录。 修改schema.xml balance="0"0:不开启读写分离机制,所有读操作都发送到...
    99+
    2023-01-31
    mycat
  • MyCat中怎么实现读写分离
    这期内容当中小编将会给大家带来有关MyCat中怎么实现读写分离,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、mycat实现读写分离这里没有用到mysql03主机,读写...
    99+
    2024-04-02
  • Mycat读写分离配置实践
       工作这些年来,也去了一些地方,有了一些见闻,隐隐感觉很多文化和猫有着千丝万缕的联系。就拿IT行业来说吧,猫有着很高的曝光率,比如大名鼎鼎的 tomcat,是由SUN的软件构架...
    99+
    2024-04-02
  • 使用Mycat怎么实现MySQL读写分离
    今天就跟大家聊聊有关使用Mycat怎么实现MySQL读写分离,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。搭建环境操作系统:CentOS-6.5-x...
    99+
    2024-04-02
  • SpringBoot中怎么利用MyCat实现读写分离
    SpringBoot中怎么利用MyCat实现读写分离,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。MySQL配置主从关系说明 192.168.0.10...
    99+
    2023-06-16
  • MyCat怎么实现MySQL一主两从读写分离
    这篇文章主要介绍“MyCat怎么实现MySQL一主两从读写分离”,在日常操作中,相信很多人在MyCat怎么实现MySQL一主两从读写分离问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2024-04-02
  • Mycat如何实现Mysql集群读写分离
    这篇文章给大家分享的是有关Mycat如何实现Mysql集群读写分离的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。MySQL 读写分离的概述MySQL 作为目前世界上使用最广泛的免...
    99+
    2024-04-02
  • 怎样实现Mycat读写分离与负载均衡
    怎样实现Mycat读写分离与负载均衡,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。我们来学习读写分离与负载均衡先看一下bala...
    99+
    2024-04-02
  • mysql数据库中怎么利用mycat实现读写分离
    这期内容当中小编将会给大家带来有关mysql数据库中怎么利用mycat实现读写分离,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、部署mycat下载 [root@myc...
    99+
    2024-04-02
  • Mycat中间件实现Mysql主从读写分离
    环境规划: IP地址 主机名 角色 备注 10.4.132.50 k8s01 mycat,master 10.4.132.42 k8s02 slave ...
    99+
    2024-04-02
  • MyCat如何实现MySQL双主一从读写分离
    这篇文章给大家分享的是有关MyCat如何实现MySQL双主一从读写分离的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1)配置server.xml<user nam...
    99+
    2024-04-02
  • Mycat中间件实现Percona Cluster集群读写分离
    Mycat实现读写分离架构图: Mycat主从自动切换架构图: Mycat下载地址:http://dl.mycat.io/1.6.7.3/20190828135747/Mycat-server...
    99+
    2024-04-02
  • redis怎么读写分离
    采用读写分离架构,通过创建主从复制组,将写入操作交给主实例,而读取操作交给从实例,从而提升了 redis 的性能和可用性。 Redis 读写分离 为了提高 Redis 的性能和可用性,...
    99+
    2024-04-08
    redis
  • 对mycat读写分离主从切换策略的调研
        当从库宕机后,读请求会全部转移到主库上,对业务无影响。 2、当主库宕机后     目前,我们的writehost只设置了一个主库,当主库宕机后,通过myca...
    99+
    2024-04-02
  • 如何利用mycat实现mysql数据库读写分离
    这篇文章主要介绍了如何利用mycat实现mysql数据库读写分离,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是MyCAT一个彻底开源的...
    99+
    2024-04-02
  • Linux如何使用 MyCat 实现 MySQL 主从读写分离
    目录Linux-使用 MyCat 实现 MySQL 主从读写分离 一、MySQL 读写分离1、MySQL 读写分离的概述2、读写分离工作原理3、为什么要读写分离3、实现读写分离的方式...
    99+
    2024-04-02
  • mongodb怎么做读写分离
    在MongoDB中实现读写分离可以通过复制集来实现。复制集是一组运行在不同服务器上的MongoDB进程,其中有一个主节点(Prima...
    99+
    2023-09-04
    mongodb
  • redis读写分离代码怎么写
    使用 redis 实现读写分离代码,通过连接写服务器和多个读服务器来实现:1. 写操作使用写服务器客户端进行;2. 读操作使用读服务器客户端进行;3. 确保数据一致性需要定期同步写服务器...
    99+
    2024-04-08
    python redis
  • maxscale读写分离
    maxscale安装 官网配置文件详解地址: https://mariadb.com/kb/en/mariadb-enterprise/mariadb-maxscale/maxscale-configu...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作