mysql 8.0 集群模式下的自动读写分离方案

问题

  1. 多主模式下的组复制,看起来挺好,起始问题和限制很多。而且中断一个复制就无法配置了
  2. 多主模式下,innodbcluster 等于是无用的,不需要自动切换,
  3. 多主模式,不应该作为高可用方案,太多风险
  4. 单主模式下,innodbcluster 自动切换,前端挂mysql router进行自动读负载和写转发。
  5. 但是程序 往往没有做读写分离的方案,无法写的时候找写节点,读的时候找读节点

解决方案:

Oracle官方想到了这个问题,让JDBC驱动来解决

JDBC 驱动有一种 replication 模式,可以看如下链接

https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-master-slave-replication-connection.html

http://shift-alt-ctrl.iteye.com/blog/2399464

URL 范例

  1. jdbc:mysql:replication://address=(type=master)(host=mr1)(port=mp1),address=(type=master)(host=mr2)(port=mp2),address=(type=slave)(host=sr1)(port=sp1)../database

根据上文约定,良好架构下,针对WRITE操作的Router集群应该有3个节点,那么我们需要在URL中指定三个“type=master”的Router地址;此外“type=slave”的地址为接收READ操作的Router节点地址,需要多个。

根据replication协议的设计原理,对于WRITE、READ操作将会在相应的Router节点之间“负载均衡”,默认策略为“轮询”;当其中某个Router失效,replication协议提供了Failover机制,将会把请求路由到同一type的其他Router节点。

此外有几个可以参考的参数,我们配合replication协议:

1)autoReconnect:设置为false,遵循默认值。

2)failOverReadOnly:此参数只会在autoReconnect为true时生效,建议保持默认值“true”。

3)roundRobinLoadBalance:此参数只会在autoReconnect为true、failOverReadOnly为false时生效,建议保持默认值。

4)readFromMasterWhenNoSlaves:当“type=slave”的所有地址都不可达时,是否可以将read请求转发给master,默认值为“false”,这个值根据实际情况设定,如果你的master可以承载所有的read请求,可以设置为true。

5)loadBalanceStrategy:可选值为“random”、“bestResponseTime”、“serverAffinity”,默认值为“random”。

6)loadBalanceAutoCommitStatementThreshold:当请求状态为“autoCommit”时,在一个连接上操作一定次数的请求后,触发“负载均衡”,选在其他Server。(参见源码)。

7)allowMasterDownConnections:默认值为false,在replication协议中,如果Master无法连接时是否允许Client创建或者获取连接(包括获取Slave的连接)。“false”表示当Master无法连接时,将不能创建任何连接,包括Slave读操作。在基于Router集群时,建议设置为true。

8)allowSlaveDownConnections:默认为false,同上。

mysql 官方读写分离方案的更多相关文章

  1. MySQL数据库读写分离、读负载均衡方案选择

    MySQL数据库读写分离.读负载均衡方案选择 一.MySQL Cluster外键所关联的记录在别的分片节点中性能很差对需要进行分片的表需要修改引擎Innodb为NDB因此MySQL Cluster不适 ...

  2. Mysql读写分离方案-Amoeba环境部署记录

    Mysql的读写分离可以使用MySQL Proxy,也可以使用Amoeba.Amoeba(变形虫)项目是一个类似MySQL Proxy的分布式数据库中间代理层软件,是由陈思儒开发的一个开源的java项 ...

  3. Mysql读写分离方案-MySQL Proxy环境部署记录

    Mysql的读写分离可以使用MySQL Proxy和Amoeba实现,其实也可以使用MySQL-MMM实现读写分离的自动切换.MySQL Proxy有一项强大功能是实现"读写分离" ...

  4. MySQL的读写分离的几种选择

    MySQL的读写分离的几种选择 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 原址如下: http://heylinux.com/archives/1004. ...

  5. Amoeba搞定mysql主从读写分离

    前言:一直想找一个工具,能很好的实现mysql主从的读写分离架构,曾经试用过mysql-proxy发现lua用起来很不爽,尤其是不懂lua脚本,突然发现了Amoeba这个项目,试用了下,感觉还不错,写 ...

  6. Amoeba实现mysql主从读写分离

    Amoeba实现mysql主从读写分离 这段在网上看了下关于amoeba的文章,总体感觉好像要比mysql-proxy好的多,也参考了不少的资料,此文章可能与其他文章作者会有雷同的地方,请谅解,但是此 ...

  7. MySQL Router实现MySQL的读写分离

    1.简介 MySQL Router是MySQL官方提供的一个轻量级MySQL中间件,用于取代以前老版本的SQL proxy. 既然MySQL Router是一个数据库的中间件,那么MySQL Rout ...

  8. mysql主从复制-读写分离-原理

    Mysql主从复制和读写分离 在实际的生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性.高可用性,还是高并发等各个方面都是不能满足实际需求的.因此,一般通过主从复制 ...

  9. 使用mysql-proxy实现mysql的读写分离

     前言: MySQL读写分离是指让master处理写操作,让slave处理读操作,非常适用于读操作量比较大的场景,可减轻master的压力.使用mysql-proxy实现mysql的读写分离,mysq ...

随机推荐

  1. ASP.NET Core Web API 控制器与方法返回输出

    DATA ACCESS LAYER 在一些不同的示例教程中,我们可能看到 DAL 的实现在主项目中,并且每个控制器中都有实例.我们不建议这么做. 当我们编写 DAL 时,我们应该将其作为一个独立的服务 ...

  2. css的多级分类

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  3. NPOI 导出Excel表报错

    当导出2007格式的时候,打开文件总是报错“发现 xxx中的部分内容有问题.是否让我们尽量尝试恢复?”. 导出的程序: protected void btnValidateInternalData_C ...

  4. JetBrains PyCharm 2018.2.1 x64永久激活码

    812LFWMRSH-eyJsaWNlbnNlSWQiOiI4MTJMRldNUlNIIiwibGljZW5zZWVOYW1lIjoi5q2j54mIIOaOiOadgyIsImFzc2lnbmVlT ...

  5. 09day vi命令详解

    vi有三种模式(互相切换) 1. 命令模式 2. 插入模式(编辑模式) 3. 低行模式 三种模式的切换方法: 使用技巧 vi 文件信息 i --- 进入编辑模式 esc --- 退出编辑模式 :wq ...

  6. Adobe PS

    1. ctrl + Tab  切换视图窗口 2.shift 拖拽图片,将 2 张图片放在一起 3.切换显示方式 /全屏/带有工具栏 快捷键:F 4. 缩小/放大工具 快捷键: alt + 鼠标滑轮 5 ...

  7. vue+axios安装

    Axios是一个基于promise的HTTP库,可以用在浏览器和node.js中. 安装方式: 1.使用cdn <script src="https://unpkg.com/axios ...

  8. 433B.Kuriyama Mirai's Stones

    Kuriyama Mirai has killed many monsters and got many (namely n) stones. She numbers the stones from  ...

  9. EFCore.BulkExtensions Demo

    最近做了一个项目,当用EF传统的方法执行时,花时4小时左右,修改后,时间大大减少到10分钟,下面是DEMO实例 实体代码: public class UserInfoEntity { [Key] pu ...

  10. LeetCode | No.2 两数相加

    ​题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序的方式存储的,并且它们的每个节点只能存储一位数字.如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...