摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归作者所有,欢迎转载,但请保留该声明。

3.2 Multi-Master Replication

多主复制意味着您可以写入任何节点并确保写入对所有节点都是一致的在集群中。
这与常规MySQL复制不同,在常规MySQL复制中,您必须将写入应用于master以确保它将被同步。

对于多主复制,任何写入都在所有节点上提交或根本不提交。
下图显示了它如何适用于两个节点,但是相同的逻辑适用于集群中的任意数量的节点:

Figure 3.1: Image source: Galera documentation - HOW CERTIFICATION-BASED REPLICATION WORKS

所有查询都在节点上本地执行,并且仅在COMMIT上有特殊处理。
当COMMIT查询发出时,事务必须通过所有节点上的认证。
如果它没有通过,你会收到ERROR作为响应。之后,事务在本地节点上应用。

COMMIT的响应时间包括以下内容:
•网络往返时间
•认证时间
•本地申请

注意:在远程节点上应用事务不会影响COMMIT的响应时间,因为它发生在背景后的认证反应。

这种架构有两个重要的后果:
•可以并行使用几个应用程序。这实现了真正的并行复制。
使用 wsrep_slave_threads 变量配置的线程从机可以有多个并行。

•slave可能有一个小的时间段不同步。这是因为master可以申请事件比slave更快。
如果你从slave读取,您可以读取尚未更改的数据。你可以从图中看到。

但是, 可以通过设置 wsrep_causal_reads = ON 变量来更改此行为。
在这种情况下,在slave上读取将等待,直到事件被应用(这将明显增加读取的响应时间)。
Slave和Master之间的差距是这种复制被称为这个复制被称为虚拟同步的原因,而不是真正的同步复制。

所描述的COMMIT行为也有另一个严重的暗示。如果你运行写事务到两个不同的节点,
集群将使用乐观锁模型。这意味着事务在个别查询期间不会检查可能的锁定的冲突,
而是在COMMIT阶段,您可能会在COMMIT上收到ERROR响应。

这是因为它是与您可能会遇到的常规InnoDB不兼容之一。
在InnoDB,DEADLOCK和LOCK TIMEOUT错误通常发生在特定查询,而不是COMMIT。
优良做法是在COMMIT后检查错误代码,但仍有许多应用程序不能做那个。

如果计划在多个节点上使用多主复制并运行写事务,你可能需要确保您处理COMMIT查询的响应。

3.2 Multi-Master Replication的更多相关文章

  1. Oracle Created Database Users: Password, Usage and Files References (文档 ID 160861.1)

    This document is no longer actively maintained, for info on specific (new) users in recent product e ...

  2. 多服务器之间Session共享

    原理:多个服务器间想共享session,就相当于共享取多台主机上的一个变量,所以共享的思路就是让大家都能读取变量,实现的方法可以通过将session保存到专门的一个服务器上,所有服务器都去请求数据,也 ...

  3. Multi-source Replication

    MariaDB starting with 10.0.1 Multi-source replication means that one server has many masters from wh ...

  4. MySQL Master High Available 源码篇

    https://m.aliyun.com/yunqi/users/1287368569594542/articles https://yq.aliyun.com/articles/59233 MySQ ...

  5. 两主机搭建MySQL主从复制后,show slave status显示:Last_IO_Error: error connecting to master ……

    两台主机A.B搭建mysql主从复制关系(A为master,B为slave)后,在slave上执行show slave status,结果中显示Last_IO_Error: error connect ...

  6. 关于Redis中的Replication

    一.简介 Redis的replication机制允许slave从master那里通过网络传输拷贝到完整的数据备份.具有以下特点: 异步复制 可以配置一主多从 可以配置从服务器可以级联从服务器,既 M- ...

  7. [置顶] 两主机搭建MySQL主从复制后,show slave status显示:Last_IO_Error: error connecting to master ……

    两台主机A.B搭建mysql主从复制关系(A为master,B为slave)后,在slave上执行show slave status,结果中显示Last_IO_Error: error connect ...

  8. Redis Persistent Replication Sentinel Cluster的一些理解

    Redis Persistent Replication Sentinel Cluster的一些理解 我喜欢把工作中接触到的各种数据库叫做存储系统,笼统地说:Redis.Mysql.Kafka.Ela ...

  9. 深入剖析 redis 主从复制

    主从概述 redis 支持 master-slave(主从)模式,redis server 可以设置为另一个 redis server 的主机(从机),从机定期从主机拿数据.特殊的,一个 从机同样可以 ...

  10. MYSQL 5.7 新增150多个新功能

    http://www.thecompletelistoffeatures.com/ There are over 150 new features in MySQL 5.7. The MySQL ma ...

随机推荐

  1. java替换特殊字符串

    开始想到String.replaceFirst(regex, replacement)和String.replaceAll(regex, replacement); 但特殊字符没替换成功. 用法:St ...

  2. MVC DbContext

    指定数据连接,指定表名,移除表名复数化(表名后面不加s),设置字段约束,主外键关系. using MvcApplication1.Models; using System; using System. ...

  3. git查看远程仓库地址

    git remote -v

  4. Wap版

    Wap版:又叫h5.M版.移动网页版: Mobile:存储wap版调用的接口

  5. maven pom.xml几个特殊的插件

    1. surefire插件 Maven Surefire 插件有一个 test 目标,该目标被绑定在了 test 阶段.  test 目标执行项目中所有能在 src/test/java 找到的并且文件 ...

  6. 前端福利之个性化设置table的td宽度(总结)

    很多时候,我们在用到table时,都希望随意设置 每个单元格的宽度,而不希望单元格被内容撑开table的样式. 1.首先,设置table的宽度 width=“1000” 或者 width=“100%” ...

  7. java反射简单实例

    这篇博友的总结的反射知识点是比较全面的 http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 下面介绍我用反射做的两个功能 ...

  8. swift 创建UICollectionView

    // //  CollectionViewController.swift //  tab // //  Created by su on 15/12/8. //  Copyright © 2015年 ...

  9. Linux 基础教程 35-软件包管理-YUM

    YUM基础     使用RPM在Linux中安装.卸载软件或服务进会经常碰到RPM包的依赖,而我们在安装软件A时,提示依赖于软件B,安装软件B时又会出现提示依赖于软件C等一系列的依赖关系.这时大家会提 ...

  10. [转]How to Clean the Global Assembly Cache

    本文转自:https://www.techwalla.com/articles/how-to-clean-the-global-assembly-cache The Global Assembly C ...