博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.2 Multi-Master Replication
阅读量:6290 次
发布时间:2019-06-22

本文共 1199 字,大约阅读时间需要 3 分钟。

摘要: 出处:黑洞中的奇点 的博客 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查询的响应。

 

转载于:https://www.cnblogs.com/kelvin19840813/p/8203569.html

你可能感兴趣的文章
《算法基础:打开算法之门》一3.4 归并排序
查看>>
高德开放平台开放源代码 鼓励开发者创新
查看>>
《高并发Oracle数据库系统的架构与设计》一2.5 索引维护
查看>>
Firefox 是 Pwn2own 2014 上攻陷次数最多的浏览器
查看>>
阿里感悟(十八)- 应届生Review
查看>>
话说模式匹配(5) for表达式中的模式匹配
查看>>
《锋利的SQL(第2版)》——1.7 常用函数
查看>>
jquery中hover()的用法。简单粗暴
查看>>
线程管理(六)等待线程的终结
查看>>
spring boot集成mongodb最简单版
查看>>
DELL EqualLogic PS存储数据恢复全过程整理
查看>>
《Node.js入门经典》一2.3 安装模块
查看>>
《Java 开发从入门到精通》—— 2.5 技术解惑
查看>>
Linux 性能诊断 perf使用指南
查看>>
实操分享:看看小白我如何第一次搭建阿里云windows服务器(Tomcat+Mysql)
查看>>
Sphinx 配置文件说明
查看>>
数据结构实践——顺序表应用
查看>>
python2.7 之centos7 安装 pip, Scrapy
查看>>
机智云开源框架初始化顺序
查看>>
Spark修炼之道(进阶篇)——Spark入门到精通:第五节 Spark编程模型(二)
查看>>